LCD液晶显示可调时钟
来源:互联网 发布:最强力的胶水知乎 编辑:程序博客网 时间:2024/04/30 02:12
void clock_2() //可调时钟
{
unsigned char num;
init_timer0();
while(1)
{
num = keyscan1();
switch(num)
{
case 1: hour++;if(hour == 24)hour = 0;
break;
case 5: hour--;if(hour == 255)hour = 23;
break;
case 2:minute++;if(minute == 60)minute = 0;
break;
case 6:minute--;if(minute == 255) minute = 59;
break;
default:break;
}
if(updatetimerflag == 1)
{
updatetimerflag = 0;
LCD_Write_Char(3,1,hour/10+'0');
LCD_Write_Char(4,1,hour%10+'0');
LCD_Write_Char(5,1,':');
LCD_Write_Char(6,1,minute/10+'0');
LCD_Write_Char(7,1,minute%10+'0');
LCD_Write_Char(8,1,':');
LCD_Write_Char(9,1,second/10+'0');
LCD_Write_Char(10,1,second%10+'0');
}
}
}
void init_timer0() //定时器初始化程序
{
TMOD |= 0X01;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0_isr(void) interrupt 1 //定时器中断程序
{
unsigned int num,i,k,j;
TH0 = 0XF8; //重新赋值2ms
TL0 = 0X30;
i++;
if(i==10) //20ms更新一次
{
i = 0;
updatetimerflag = 1;
}
num++;
if(num==500)
{
for(j=0;j<5;j++)
{
delayus(1000);
delayus(1000);
SPK=!SPK;
}
num = 0;
second++;
if(second==60)
{
second = 0 ;
minute++;
if(minute==60)
{
for(j=0;j<100;j++)
{
delayus(200);
delayus(200);
SPK=!SPK;
}
for(j=0;j<100;j++)
{
delayms(1);
SPK=!SPK;
}
minute = 0;
hour++;
if(hour==24)
{
hour = 0;
}
}
}
}
}
unsigned char keyscan1(void) //按键扫描函数,返回扫描键值
{
unsigned char keyvalue;
if(KEYPORT !=0xff)
{
delayms(10);
if(KEYPORT!=0XFF)
{
keyvalue=KEYPORT;
while(KEYPORT!=0XFF);
switch(keyvalue)
{
case 0xfe:return 1;break;
case 0xfd:return 2;break;
case 0xfb:return 3;break;
case 0xf7:return 4;break;
case 0xef:return 5;break;
case 0xdf:return 6;break;
case 0xbf:return 7;break;
case 0x7f:return 8;break;
default:return 0;break;
}
}
}
return 0;
}
{
unsigned char num;
init_timer0();
while(1)
{
num = keyscan1();
switch(num)
{
case 1: hour++;if(hour == 24)hour = 0;
break;
case 5: hour--;if(hour == 255)hour = 23;
break;
case 2:minute++;if(minute == 60)minute = 0;
break;
case 6:minute--;if(minute == 255) minute = 59;
break;
default:break;
}
if(updatetimerflag == 1)
{
updatetimerflag = 0;
LCD_Write_Char(3,1,hour/10+'0');
LCD_Write_Char(4,1,hour%10+'0');
LCD_Write_Char(5,1,':');
LCD_Write_Char(6,1,minute/10+'0');
LCD_Write_Char(7,1,minute%10+'0');
LCD_Write_Char(8,1,':');
LCD_Write_Char(9,1,second/10+'0');
LCD_Write_Char(10,1,second%10+'0');
}
}
}
void init_timer0() //定时器初始化程序
{
TMOD |= 0X01;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void timer0_isr(void) interrupt 1 //定时器中断程序
{
unsigned int num,i,k,j;
TH0 = 0XF8; //重新赋值2ms
TL0 = 0X30;
i++;
if(i==10) //20ms更新一次
{
i = 0;
updatetimerflag = 1;
}
num++;
if(num==500)
{
for(j=0;j<5;j++)
{
delayus(1000);
delayus(1000);
SPK=!SPK;
}
num = 0;
second++;
if(second==60)
{
second = 0 ;
minute++;
if(minute==60)
{
for(j=0;j<100;j++)
{
delayus(200);
delayus(200);
SPK=!SPK;
}
for(j=0;j<100;j++)
{
delayms(1);
SPK=!SPK;
}
minute = 0;
hour++;
if(hour==24)
{
hour = 0;
}
}
}
}
}
unsigned char keyscan1(void) //按键扫描函数,返回扫描键值
{
unsigned char keyvalue;
if(KEYPORT !=0xff)
{
delayms(10);
if(KEYPORT!=0XFF)
{
keyvalue=KEYPORT;
while(KEYPORT!=0XFF);
switch(keyvalue)
{
case 0xfe:return 1;break;
case 0xfd:return 2;break;
case 0xfb:return 3;break;
case 0xf7:return 4;break;
case 0xef:return 5;break;
case 0xdf:return 6;break;
case 0xbf:return 7;break;
case 0x7f:return 8;break;
default:return 0;break;
}
}
}
return 0;
}
0 0
- LCD液晶显示可调时钟
- 可调闹钟lcd时钟
- 可调时钟
- 1602LCD液晶显示
- 可调数字时钟程序
- 矩阵键盘可调时钟
- 定时器可调时钟
- 可调闹钟的时钟
- 51单片机可调时钟
- 液晶显示的时钟
- 串口数据接收LCD液晶显示
- DS1302时钟与LCD1602液晶显示
- 矩阵键盘可调时间,可调闹钟(LCD显示)
- 用verilog HDL实现LCD液晶显示代码
- arduino due lcd 8602液晶显示程序
- TQ2440裸板---lcd液晶显示(详细注释)
- 基于Verilog的LCD液晶显示程序
- 51单片机第六弹---LCD液晶显示模块
- lcd显示时钟
- 微信小程序开发初级实践篇
- lcd1602液晶
- Spring源码解析-杂记
- Codeforces Round #392 (Div. 2)B (模拟)
- LCD液晶显示可调时钟
- Java中字符串与ASCII相互转换
- Tomcat – Java.Lang.OutOfMemoryError: PermGen Space
- 如何在WeX5中使用自己的tomcat并在修改代码后自动同步
- Android项目架构搭建必备
- MIT 线性代数(1—3)读书笔记
- PHP错误日志记录功能,一般用于调试BUG
- 学习总结--View 的移动
- maven(七),本地仓库