能不能帮我看一下,先谢谢
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define LCD1602_DB P0 //定义1602的DB口为P0口
- uchar code table[]="CurrentTime"; //当前时间
- uchar code table1[]="00:00:00";
- uchar key1Flag = 0;//定义按键关闭符
- uchar key2Flag = 0;
- uchar key3Flag = 0;
- uchar key4Flag = 0;
- uchar count = 0;
- uchar sec = 57;//秒
- uchar min = 59;//分
- uchar hour = 9;//小时
- uchar clockHour = 0;//闹钟小时
- uchar clockMin = 0;//分
- uchar clockFlag = 0;// 定义闹钟关闭符
- uchar beepNum = 0;//声音
- uchar temp=0;
- uchar shijian=0;
- sbit LCD1602_RS = P2^0; //指令1/数据0选择端
- sbit LCD1602_RW = P2^1; //读1写0选择端
- sbit LCD1602_E = P2^2; //读1写0使能端
- sbit Key1 = P1^0;//定义键位符
- sbit Key2 = P1^1;
- sbit Key3 = P1^2;
- sbit Key4 = P1^3;
- sbit Speaker = P2^5;//定义蜂鸣器
- sbit LED=P2^4;
- void Delay1ms() //@12.000MHz
- {
- uchar i, j;
- i = 12;
- j = 169;
- do
- {
- while (--j);
- } while (--i);
- }
- void Delay20ms() //@12.000MHz
- {
- uchar i, j, k;
- _nop_();
- _nop_();
- i = 1;
- j = 234;
- k = 113;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
- void delay()
- {
- unsigned int a;
- while(a--);
- }
- void Beep() //蜂鸣器警报
- {
- Speaker = 0;
- Delay20ms();
- Speaker = 1;
- }
- void LcdWaitReady() //检查LCD忙函数
- {
- uchar sta;
- LCD1602_DB = 0xFF;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do {
- LCD1602_E = 1;
- sta = LCD1602_DB;
- LCD1602_E = 0;
- }while(sta & 0x80);
- }
- void LcdWriteCmd(uchar cmd) //写命令函数
- {
- LcdWaitReady();
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_DB = cmd;
- LCD1602_E = 1;
- LCD1602_E = 0;
- }
- void LcdWriteDat(uchar dat) //写数据函数
- {
- LcdWaitReady();
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_DB = dat;
- LCD1602_E = 1;
- LCD1602_E = 0;
- }
- void LcdSetCursor(uchar x, uchar y)//时间设置
- {
- uchar addr;
- if(y == 0)
- addr = 0x00 + x;
- else
- addr = 0x40 + x;
- LcdWriteCmd(addr | 0x80);
- }
- void LcdShowStr(uchar x, uchar y, uchar *str)
- {
- LcdSetCursor(x, y);
- while(*str != '\0')
- {
- LcdWriteDat(*str++);
- }
- }
- void InitLcd1602()//初始化LCD函数
- {
- LcdWriteCmd(0x01);
- LcdWriteCmd(0x38);
- LcdWriteCmd(0x0c);
- LcdWriteCmd(0x06);
- }
- void WriteAddress(uchar x)
- {
- LcdWriteCmd(0x80 + x);
- }
- void DisplayMinTens() //显示分十位
- {
- WriteAddress(0x49);
- LcdWriteDat((min / 10) + '0');
- Delay1ms();
- }
- void DisplayMinUnits() //显示分个位
- {
- WriteAddress(0x4A);
- LcdWriteDat((min % 10) + '0');
- Delay1ms();
- }
- void DisplayHourTens() //显示时十位
- {
- WriteAddress(0x46);
- LcdWriteDat((hour / 10) + '0');
- Delay1ms();
- }
- void DisplayHourUnits()//显示时个位
- {
- WriteAddress(0x47);
- LcdWriteDat((hour % 10) + '0');
- Delay1ms();
- }
- void DisplayClkMinTens() //显示闹钟分十位
- {
- WriteAddress(0x49);
- LcdWriteDat((clockMin / 10) + '0');
- Delay1ms();
- }
- void DisplayClkMinUnits() //显示闹钟分个位
- {
- WriteAddress(0x4A);
- LcdWriteDat((clockMin % 10) + '0');
- Delay1ms();
- }
- void DisplayClkHourTens() //显示闹钟时十位
- {
- WriteAddress(0x46);
- LcdWriteDat((clockHour / 10) + '0');
- Delay1ms();
- }
- void DisplayClkHourUnits() //显示闹钟时个位
- {
- WriteAddress(0x47);
- LcdWriteDat((clockHour % 10) + '0');
- Delay1ms();
- }
- void DisplayClkSecTens() //显示秒十位
- {
- WriteAddress(0x4C);
- LcdWriteDat((sec / 10) + '0');
- Delay1ms();
- }
- void DisplayClkSecUnits() //显示秒个位
- {
- WriteAddress(0x4D);
- LcdWriteDat((sec % 10) + '0');
- Delay1ms();
- }
- void ScanKey4()
- {
- if((Key4 == 0)&(clockFlag ==1))
- {
- Delay20ms();
- if((Key4 == 0)&(clockFlag ==1))
- {
- clockFlag = 0;
- beepNum = 0;
- key4Flag = 0;
- }
- }
- }
- void InitTimer0()//初始化定时器0
- {
- TMOD = 0x11;
- TH0 = (65536 - 50000) / 256;
- TL0 = (65536 - 50000) % 256;
- TH1 = (65536 - 50000) / 256;
- TL1 = (65536 - 50000) % 256;
- ET1=1;
- ET0=1;
- EA = 1;
- PT0=1;
- TR0=1;
- TR1=1;
-
-
- }
- void main()//主函数
- {
- InitLcd1602();
- LcdShowStr(0,0,table);
- LcdShowStr(6,1,table1);
- InitTimer0();
- while(1)
- {
- if(sec == 60)
- {
- sec = 0;
- min++;
- }
- if(min == 60)
- {
- min = 0;
- hour++;
- }
- if(hour == 24)
- {
- hour = 0;
- }
- LcdShowStr(0,0,table);
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- LcdShowStr(11,1,":");
- DisplayClkSecUnits();
- DisplayClkSecTens();
- //==============================================================
- if((Key1 == 0)&(key1Flag == 0)) { //设置当前时间
- Delay20ms();
- if((Key1 == 0)&(key1Flag == 0)) {
- TR0 = 0;
- InitLcd1602();
- LcdShowStr(0,0,"SetCurrentTime");
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- key1Flag = 1;
- }
- }
- while(key1Flag == 1)
- {
- if(Key1 == 0) {
- Delay20ms();
- if(Key1 == 0)
- {
- hour++;
- if(hour == 24)
- {
- hour = 0;
- }
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- }
- }
- if(Key2 == 0)
- {
- Delay20ms();
- if(Key2 == 0)
- {
- min++;
- if(min == 60)
- {
- min = 0;
- hour++;
- }
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- }
- }
- if((Key3 == 0)&(key1Flag == 1)) { //退出设置当前时间
- Delay20ms();
- if((Key3 == 0)&(key1Flag == 1)) {
- InitLcd1602();
- LcdShowStr(0,0,table);
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- LcdShowStr(11,1,":");
- DisplayClkSecUnits();
- DisplayClkSecTens();
- key1Flag = 0;
- TR0 = 1;
- }
- }
- }
- //==============================================================
- if((min==0)&(sec<5)) //时间到整点
- {
- LED=0;
- delay();
- Beep();
- Beep();
- Delay20ms();
- }
- if((min==0)&(sec>=5))
- {
- LED=1;
- }
- //==============================================================
- if((Key2 == 0)&(key2Flag == 0))
- { //显示闹钟时间
- Delay20ms();
- if((Key2 == 0)&(key2Flag == 0))
- {
- key2Flag = 1;
- InitLcd1602();
- while(key2Flag == 1)
- {
- LcdShowStr(0,0,"Clock Time");
- DisplayClkHourTens();
- DisplayClkHourUnits();
- LcdShowStr(8,1,":");
- DisplayClkMinTens();
- DisplayClkMinUnits();
- if(Key2 == 0)
- {
- Delay20ms();
- if(Key2 == 0)
- {
- key2Flag = 0;
- InitLcd1602();
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- LcdShowStr(11,1,":");
- DisplayClkSecUnits();
- DisplayClkSecTens();
- }
- }
- }
- }
- }
- //==============================================================
- if((Key3 == 0)&(key3Flag == 0)) //设置闹钟时间
- {
- Delay20ms();
- if((Key3 == 0)&(key3Flag == 0))
- {
- TR0 = 0;
- InitLcd1602();
- LcdShowStr(0,0,"SetClockTime");
- DisplayClkHourTens();
- DisplayClkHourUnits();
- LcdShowStr(8,1,":");
- DisplayClkMinTens();
- DisplayClkMinUnits();
- key3Flag = 1;
- }
- }
- while(key3Flag == 1)
- {
- if(Key1 == 0)
- {
- Delay20ms();
- if(Key1 == 0)
- {
- clockHour++;
- if(clockHour == 24)
- {
- clockHour = 0;
- }
- DisplayClkHourTens();
- DisplayClkHourUnits();
- LcdShowStr(8,1,":");
- DisplayClkMinTens();
- DisplayClkMinUnits();
- }
- }
- if(Key2 == 0)
- {
- Delay20ms();
- if(Key2 == 0)
- {
- clockMin++;
- if(clockMin == 60)
- {
- clockHour++;
- clockMin = 0;
- }
- DisplayClkHourTens();
- DisplayClkHourUnits();
- LcdShowStr(8,1,":");
- DisplayClkMinTens();
- DisplayClkMinUnits();
- }
- }
- if(Key3 == 0)
- { //退出设置闹钟时间
- Delay20ms();
- if(Key3 == 0)
- {
- key3Flag = 0;
- InitLcd1602();
- TR0 = 1;
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- LcdShowStr(11,1,":");
- DisplayClkSecUnits();
- DisplayClkSecTens();
- }
- }
- }
- //==============================================================
- if((Key4 == 0)&(key4Flag == 0)) //闹钟ON/OFF位设置
- {
- Delay20ms();
- if((Key4 == 0)&(key4Flag == 0))
- {
- key4Flag = 1;
- InitLcd1602();
- LcdShowStr(0,0,"Clock ON");
- Delay20ms();
-
- Delay20ms();
-
- Delay20ms();
-
- Delay20ms();
-
- Delay20ms();
- }
- }
- if((Key4 == 0)&(key4Flag == 1)) //闹钟ON/OFF位设置
- {
- Delay20ms();
- if((Key4 == 0)&(key4Flag == 1))
- {
- key4Flag = 0;
- InitLcd1602();
- LcdShowStr(0,0,"Clock OFF");
- Delay20ms();
- Delay20ms();
- Delay20ms();
- Delay20ms();
- }
- }
- //==============================================================
- if((key4Flag == 1)&(hour == clockHour)&(min == clockMin))
- {
- clockFlag = 1; //闹钟时间到
- InitLcd1602();
- LcdShowStr(0,0,table);
- LcdShowStr(0,0,"Time's up");
- DisplayHourTens();
- DisplayHourUnits();
- LcdShowStr(8,1,":");
- DisplayMinTens();
- DisplayMinUnits();
- LcdShowStr(11,1,":");
- DisplayClkSecUnits();
- DisplayClkSecTens();
- while(clockFlag == 1)
- {
- LED=!LED;
- Beep();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- Delay20ms();
- ScanKey4();
- beepNum++;
- if(beepNum == 20)
- {
- clockFlag = 0;
- beepNum = 0;
- key4Flag = 0;
- LED=1;
- }
- }
- }
- }
- }
- void Timer0() interrupt 1
- {
- temp++;
- if(temp == 20)
- {
- sec++;
- temp = 0;
- }
- TH0 = (65536 - 50000) / 256;
- TL0 = (65536 - 50000) % 256;
- }
- void Timer1() interrupt 3
- {
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- }
复制代码 |