陕西理工学院毕业论文
附录B 主程序
#include
#define uchar unsigned char #define uint unsigned int
//uchar time_data[7]={13,5,10,18,0,30,50}; //年周月日时分秒 ,初始化 uchar time_data[7];
uchar code write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; //数据的地址 uchar code read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};
uchar code table1[]=%uchar code table2[]=\ |00:00:00 0%uchar code table3[]=\ //清屏内容 uchar code table4[]=\ Set Real Time %uchar code table5[]=\ Set Open Time %uchar code table6[]=\ Start Time: %uchar code table7[]=\ 00:00:00 %uchar code table8[]=\ End Time: %uchar code table9[]=%uchar code table0[]=\
bit Adjust; //调节标志位,=1表示进入调节模式,=0是正常模式 bit Auto_flg; //自动模式标志位,=1表示手动模式,=0是自动模式 sbit rs=P1^0; //LCD1602 sbit rw=P1^1; //LCD1602 sbit e=P1^2; //LCD1602 sbit sck=P2^5; //时钟端口 sbit io=P2^6; //时钟端口 sbit rst=P2^7; //时钟端口 sbit SELT =P1^6; //选择键 sbit ENTER=P1^7; //确认键 sbit UP =P3^0; //加键 sbit DOWN =P3^1; //减键
sbit MODE =P3^2; //切换按键接口 sbit SWITCH=P3^3; //手动开关
sbit AUTO_LED=P1^3; //自动模式灯接口 sbit HAND_LED=P1^5; //手动灯接口 sbit LAMP1=P3^4; //灯接口 sbit LAMP2=P3^5; //灯接口 sbit LAMP3=P3^6; //灯接口 sbit LAMP4=P3^7; //灯接口 sbit LIGHT1=P2^0; //光线检测端口 sbit IN1=P2^2; sbit OUT1=P2^1;
第18页 ,共38页
陕西理工学院毕业论文
uchar Select_num; //选择按键按下次数 uchar Enter_num; //确认按键按下次数 float Year,Month,Day,Hour,Minute,Second; //时间设置值 uchar Week;
float Hour_H,Minute_H,Second_H; //设置开始时间 float Hour_L,Minute_L,Second_L; //设置结束时间 int Value1; //人数 uchar IN1_flag=0; uchar OUT1_flag=0; void read_rtc();
/*********************************************************************************************************************/
void delay1(uint z) //延时函数 { uint x,y; for(x=z;x>0;x--) for(y=10;y>0;y--); }
void write_com(uchar com) //写指令函数 { rw=0; delay1(5); rs=0; delay1(5); e=1; delay1(5); P0=com; delay1(5); e=0; delay1(5); }
void write_date(uchar date) //写数据函数 { rw=0; delay1(5); rs=1; delay1(5); e=1; delay1(5); P0=date; delay1(5); e=0; delay1(5);
第19页 ,共38页
陕西理工学院毕业论文
}
void init() //初始化函数 { uchar num; Year=16; Month=1; Day=1; Hour=15; Minute=30; Second=50; Week=6; Hour_H=22; Minute_H=0; Second_H=0; Hour_L=18; Minute_L=0; Second_L=0; e=0; // 时序表e初始为0 write_com(0x38); //设置16*2显示,5*7点阵,8位数据接口 write_com(0x0c); //设置光标 write_com(0x06); //光标自动加1,光标输入方式 write_com(0x01); //清屏 write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) { write_date(table1[num]); delay1(5); } write_com(0x80+0x40); for(num=0;num<16;num++) { write_date(table2[num]); delay1(5); } }
void SetTime_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { uchar shi,ge; shi=dat/10; //把十位提取出来 ge=dat; //把个位提取出来 write_com(add); //要写的地址 write_date(0x30+shi); //十位的内容 1602字符库 write_date(0x30+ge); //个位的内容 1602字符库 }
第20页 ,共38页
陕西理工学院毕业论文
void Week_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { write_com(add); //要写的地址 write_date(0x30+dat); //十位的内容 1602字符库 }
void Date_dispaly(uchar add,uchar dat) //第一个:参数的地址,第二个:参数的内容 { uchar shi,ge; shi=dat/16; //把十位提取出来 ge=dat; //把个位提取出来 write_com(add+3); //要写的地址 write_date(0x30+shi); //十位的内容 1602字符库 write_date(0x30+ge); //个位的内容 1602字符库 }
void LCD_Clean(uchar i) //液晶屏清除显示 { uchar num; if(i==1) { write_com(0x80); //设置初始显示位置 for(num=0;num<16;num++) //显示第一行内容 { write_date(table3[num]); delay1(1); } } if(i==2) { write_com(0x80+0x40); for(num=0;num<16;num++) //显示第二行内容 { write_date(table3[num]); delay1(1); } } }
void LCD_Display_String(unsigned char line,unsigned char *string) { //液晶屏显示内容,把要显示的内容写到对应的位置 unsigned char i; unsigned char address=0; if(line==1) { address=0x80; //0X80是第1行的第1个位置 ,0x81第2位
第21页 ,共38页
陕西理工学院毕业论文
位
}
else if(line==2) { address=0x80+0x40; //0X80+0x40是第2行的第1个位置,0X80+0x40+1是第2行第2
} for(i=0;i<16;i++) { write_com(address); write_date(string[i]); address++; } }
void Time_Display(void) { read_rtc(); Date_dispaly(0x80+0x40+9,time_data[6]); //显示秒 Date_dispaly(0x80+0x40+6,time_data[5]); //显示分 Date_dispaly(0x80+0x40+3,time_data[4]); //显示时 Date_dispaly(0x80+11,time_data[3]); //显示日 Date_dispaly(0x80+8,time_data[2]); //显示月 Week_dispaly(0x80+0x40+15,time_data[1]); //显示周 Date_dispaly(0x80+5,time_data[0]); //显示年 // Year/10*16+Year Hour=time_data[4]/16*10+time_data[4];; Minute=time_data[5]/16*10+time_data[5];; Second=time_data[6]/16*10+time_data[6];; }
void write_ds1302_byte(uchar dat) { uchar i; for(i=0;i<8;i++) { sck=0; io=dat&0x01; //准备数据,从最低位开始 dat=dat>>1; sck=1; } }
void write_ds1302(uchar add,uchar dat) {
第22页 ,共38页