天津职业技术师范大学2011届本科生毕业设计
write_add(0x99); for(k=0;k<=9;k++) {
write_data(love[k]+0x30); delay(); } if(fu==1) {
write_add(0x9a);write_data('-'); //write_data(' '); delay(); } } } else if(yes==1) error(); else if(yes==2) out(); }
/**********************清除键*****************************/ void clear(void) { //uchar k;
while(((~P2) & 0xf0)!=0); /*
write_add(0x80); for(k=0;k<=15;k++) { delay(); write_data(' '); }
41
天津职业技术师范大学2011届本科生毕业设计
write_add(0x98); for(k=0;k<=15;k++) { delay(); write_data(' '); } */ lcm_clr(); rrr=0xff;
kind=yes=position1=position2=0; ///////////清运算类型标志 fu=pfu=0;
data1=data2=0; ///////////清数据 data3=0; write_add(0x83); }
void prodis(void) { rrr++; if(rrr==16) {rrr=0x00;} delay();
while(((~P3) & 0xf0)!=0); }
void delay(void) { uchar m;
for(m=200;m>0;m--) {;} }
void error(void) {
uchar derror[16]={' ',' ',' ','E','R','R','O','R','!','!','!',' ',' ',' ',' ',' '}; uchar k; write_add(0x98);
42
天津职业技术师范大学2011届本科生毕业设计
for(k=0;k<=15;k++) {
write_data(derror[k]); delay(); } }
void out(void) { uchar k;
uchar dout[16]={' ',' ',' ','O','U','T',' ','O','F',' ','R','A','N','G','E',' '}; write_add(0x98); for(k=0;k<=15;k++) {
write_data(dout[k]); delay(); } }
void xian(void) { uchar k;
uchar dout[16]={'-','-','-','-','-','-','-','-','-','-','-','-','-','-','-','-'}; write_add(0x88); for(k=0;k<=15;k++) {
write_data(dout[k]); delay(); } }
unsigned long shi(uchar n) { int m=1; while(n!=0) { m=m*10;
43
天津职业技术师范大学2011届本科生毕业设计
n--; } return(m); }
//DS1302时钟芯片驱动程序 //常用时钟数据读取 void read_clockS(void){ }
//调时用加1程序
void Set_time(unsigned char sel){ //根据选择调整的相应项目加1并写入DS1302 signed char address,item; signed char max,mini; lcm_w_test(0,0x9a); lcm_w_word(\调整\
//if(sel==6) {lcm_w_word(\秒钟\ //秒7 if(sel==5) {lcm_w_word(\分钟\max=59;mini=0;} //分钟6
if(sel==4) {lcm_w_word(\小时\max=23;mini=0;} //小时5
if(sel==3) {lcm_w_word(\星期\ //星期4 if(sel==2) {lcm_w_word(\日期\ //日3 if(sel==1) {lcm_w_word(\月份\ //月2 if(sel==0) {lcm_w_word(\年份\ //年1 //读取1302某地址上的数值转换成10进制赋给item
item=((read_clock(address+1))/16)*10 + (read_clock(address+1)); if(KEY_2 == 0){ item++;//数加 1
44
ss = read_clock(0x81);//读取秒数据 mm = read_clock(0x83);//读取分钟数据 hh = read_clock(0x85);//小时 dd = read_clock(0x87);//日 mo = read_clock(0x89);//月 xq = read_clock(0x8b);//星期 yy = read_clock(0x8d);//年
天津职业技术师范大学2011届本科生毕业设计
}
if(KEY_4 == 0){ item--;//数减 1 }
if(item>max) item=mini;//查看数值有效范围 if(item write_clock(address,(item/10)*16+item);//转换成16进制写入1302 write_clock(0x8e,0x80);//写保护,禁止写操作 updata (); //刷新数据 lcm_w_mm();//刷新 分 } //设置1302的初始时间(自动初始化) void Init_1302(void){//-设置1302的初始时间(2009年1月1日00时00分00秒星期一) } //DS1302写数据(底层协议) 45 unsigned char f; if(read_clock(0xc1) != 0xaa){ } write_clock(0x8e,0x00);//允许写操作 write_clock(0x8c,0x09);//年 write_clock(0x8a,0x01);//星期 write_clock(0x88,0x01);//月 write_clock(0x86,0x01);//日 write_clock(0x84,0x00);//小时 write_clock(0x82,0x00);//分钟 write_clock(0x80,0x00);//秒 write_clock(0x90,0xa5);//充电 write_clock(0xc0,0xaa);//写入初始化标志RAM(第00个RAM位置) for(f=0;f<60;f=f+2){//清除闹钟RAM位为0 } write_clock(0x8e,0x80);//禁止写操作 write_clock(0xc2+f,0x00);