信息工程学院课程设计
参考文献
[1]《单片机原理及应用(第二版)》 张毅刚 彭喜元 彭宇 北京 高等教育出版社 [2]刘和平. 单片机编程与入门.重庆大学出版社,2002.68-99,111-122
[3]陈明荧. 89C51单片机课程设计实训教材.清华大学出版社,2003.38-67,102-118
附录
#include
#define uint unsigned int #define uchar unsigned char sbit key1=P1^0; sbit key2=P1^1; sbit key3=P1^2; sbit key4=P1^3; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit lcdrw=P3^6; sbit led=P2^2; sbit sound=P2^7;
int a,b,i,min,hour,minge,minshi,hourge,hourshi,sec,secge,secshi,cnt,cnt1, nian=2013,yue=5,ri=5, amin1=1,ahour1,aminge1,aminshi1,ahourge1,ahourshi1, amin2=1,ahour2,aminge2,aminshi2,ahourge2,ahourshi2, amin3=1,ahour3,aminge3,aminshi3,ahourge3,ahourshi3, amin4=1,ahour4,aminge4,aminshi4,ahourge4,ahourshi4;
uchar code table1[]={'0','1','2','3','4','5','6','7','8','9'}; uchar code table2[]=\ \; uchar code Alarm_1[]=\ %uchar code Alarm_2[]=\ %uchar code Alarm_3[]=\ %uchar code Alarm_4[]=\ %uchar code riqi[]=\ \
uchar num1,num2,alarm1,alarm2,alarm3,alarm4; bit flag=0;
void delay(unsigned int z) //延时程序 { uint i,j; for(i=z;i>0;i--) for(j=110;j>0;j--); }
void write_com(uchar com) //LCD命令控制,写指令函数
11
信息工程学院课程设计
{ delay(5) ; lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }
void write_data(uchar date) //LCD数据控制,写数据函数 { delay(5); lcdrs=1; P0=date; delay(5); lcden=1; delay(5); lcden=0; }
void write_nian(uchar add , uint date) //年显示函数 {
uchar qian,bai,shi,ge; qian=date/1000;
bai=(date-1000*qian)/100;
shi=(date-qian*1000-bai*100)/10; ge=date;
write_com(0x80+0x40+add); write_data(table1[qian]); write_data(table1[bai]); write_data(table1[shi]); write_data(table1[ge]); }
void write_yue(uchar add , uchar date) //月显示函数 {
uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); }
void write_ri(uchar add , uchar date) //日显示函数
12
信息工程学院课程设计
{
uchar shi,ge; shi=date/10; ge=date;
write_com(0x80+0x40+add); write_data(0x30+shi); write_data(0x30+ge); }
void qi() {
write_nian(0,nian); write_yue(5,yue); write_ri(8,ri);
write_com(0x80+0x40+7); write_data('-');
write_com(0x80+0x40+4); write_data('-'); }
void time() //设置时间函数 { while(1) { if(key1==0) { delay(10); if(key1==0) { if(hour==23) //\时\设置 hour=0; else hour++; hourge=hour; hourshi=hour/10; write_com(0x0f); delay(2); write_com(0x80+6); write_data(table1[hourge]); //\时\个位写入LCD第1行第6位 delay(5); write_com(0x80+5);
13
信息工程学院课程设计
delay(2); write_data(table1[hourshi]); //\时\十位写入LCD第1行第5位 while(!key1); } } if(key2==0) { delay(10); if(key2==0) { if(min==59) //\分\设置 min=0; else min++; minge=min; minshi=min/10; write_com(0x0f); write_com(0x80+9); write_data(table1[minge]); //\分\个位写入LCD第二行第9位 delay(1); write_com(0x80+8); write_data(table1[minshi]); //\分\十位写入LCD第二行第8位 delay(1); while(!key2); } } if(key3==0) { delay(10); if(key3==0) { write_com(0x0c); //整体显示,关光标,不闪烁 TR1=1; //定时计数器1启动 while(!key3); break; //key3松开时,显示时间\时\分\位均已设置完毕 } } } }
void display1() //设置闹钟1时间函数 {
14
信息工程学院课程设计
while(1) { if(key1==0) { delay(10); if(key1==0) { if(ahour1==23) //闹钟\时\设置 ahour1=0; else ahour1++; ahourge1=ahour1; ahourshi1=ahour1/10; write_com(0x0f); write_com(0x80+0x40+8); write_data(':'); write_com(0x80+0x40+7); write_data(table1[ahourge1]); delay(1); write_com(0x80+0x40+6); write_data(table1[ahourshi1]); delay(1); while(!key1); } } if(key2==0) //闹钟\分\设置 { delay(10); if(key2==0) { if(amin1==59) amin1=0; else amin1++; aminge1=amin1; aminshi1=amin1/10; write_com(0x0f); write_com(0x80+0x40+10); write_data(table1[aminge1]); delay(1); write_com(0x80+0x40+9); write_data(table1[aminshi1]); delay(1); while(!key2);
15