LCD显示时钟
来源:互联网 发布:淘宝曝光量是什么意思 编辑:程序博客网 时间:2024/05/02 02:02
#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define KEY_IO P3 #define LCD_IO P0 sbit LCD_RS = P2^0; sbit LCD_RW = P2^1; sbit LCD_EN = P2^2; sbit SPK = P1^2; sbit LED = P2^4; bit new_s, modify = 0; char t0, sec = 50, min = 59, hour = 23; char code LCD_line1[] = "Clock!"; char code LCD_line2[] = " 00:00:00 "; char Timer_buf[] = "23:59:50"; //--------------------------------------------------- void delay(uint z) { uint x, y; for(x = z; x > 0; x--) for(y = 100; y > 0; y--);} //--------------------------------------------------- void W_LCD_Com(uchar com) //写指令 { LCD_RS = 0; LCD_IO = com; // LCD_RS和R/W都为低电平时,写入指令 LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲 } //--------------------------------------------------- void W_LCD_Dat(uchar dat) //写数据 { LCD_RS = 1; LCD_IO = dat; // LCD_RS为高、R/W为低时,写入数据 LCD_EN = 1; delay(5); LCD_EN = 0; //用EN输入一个高脉冲 } //--------------------------------------------------- void W_LCD_STR(uchar *s) //写字符串 { while(*s) W_LCD_Dat(*s++); } //--------------------------------------------------- void W_BUFF(void) //填写显示缓冲区 { Timer_buf[7] = sec % 10 + 48; Timer_buf[6] = sec / 10 + 48; Timer_buf[4] = min % 10 + 48; Timer_buf[3] = min / 10 + 48; Timer_buf[1] = hour % 10 + 48;Timer_buf[0] = hour / 10 + 48; W_LCD_Com(0xc0 + 7); W_LCD_STR(Timer_buf);} //--------------------------------------------------- uchar read_key(void) { uchar x1, x2; KEY_IO = 255; x1 = KEY_IO; if (x1 != 255) { delay(100); x2 = KEY_IO; if (x1 != x2) return 255; while(x2 != 255) x2 = KEY_IO; if(x1 == 0x7f) return 0; else if (x1 == 0xbf) return 1; else if (x1 == 0xdf) return 2; else if (x1 == 0xef) return 3; else if (x1 == 0xf7) return 4; } return 255;} //--------------------------------------------------- void Init() { LCD_RW = 0; W_LCD_Com(0x38); delay(50); W_LCD_Com(0x0c); W_LCD_Com(0x06); W_LCD_Com(0x01); W_LCD_Com(0x80); W_LCD_STR(LCD_line1); W_LCD_Com(0xC0); W_LCD_STR(LCD_line2); TMOD = 0x01; //T0定时方式1 TH0 = 0x4c; TR0 = 1; //启动T0 PT0 = 1; //高优先级, 以保证定时精度 ET0 = 1; EA = 1; } //--------------------------------------------------- void main() { uint i, j; uchar Key; Init(); while(1) { //------------------------------- if (new_s) { //如果出现了新的一秒, 修改时间 new_s = 0; sec++; sec %= 60; if(!sec) { min++; min %= 60; if(!min) { hour++; hour %= 24;} } W_BUFF(); //写显示//------------------------------- if (!sec && !min) { //整点报时 for (i = 0; i < 200; i++) { SPK = 0; for (j = 0; j < 100; j++); SPK = 1; for (j = 0; j < 100; j++); } } } //------------------------------- Key = read_key(); //读出按键 switch(Key) { //分别处理四个按键 case 0: modify = 1; break; case 1: if(modify) {min++; min %= 60; W_BUFF(); break;} case 2: if(modify) {hour++; hour %= 24; W_BUFF(); break;} case 3: modify = 0; break; } } } //--------------------------------------------------- void timer0(void) interrupt 1 //T0中断函数, 50ms执行一次 { TH0 = 0x4c; t0++; t0 %= 20; //20, 一秒钟 if(t0 == 0) {new_s = 1; LED = ~LED;} if(modify) LED = 0; }
0 0
- lcd显示时钟
- LCD的时钟显示
- LCD显示时钟
- 模拟时钟在LCD上的显示
- 模拟时钟在LCD上的显示
- LCD显示时钟,可断电保存,调整时间,调整闹钟
- LCD电子时钟
- lcd时钟输出分析
- LCD液晶显示可调时钟
- 单片机lcd时钟
- 可调闹钟lcd时钟
- lcd时钟掉电保护
- lcd 显示
- LCD显示
- LCD显示
- LCD显示
- mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系
- mipi LCD 的CLK时钟频率与显示分辨率及帧率的关系
- 了解UART串口驱动
- 素数回文
- 10分钟精通SharePoint - SharePoint升级
- 递归--九度1458.汉诺塔3
- 第28天(就业班) 自定义mvc框架、Struts入门及执行流程、环境搭建
- LCD显示时钟
- Deep Learning(深度学习)学习笔记整理系列之LeNet-5卷积参数个人理解
- 寒假作业
- MMAP使用
- 每日更新【Python】常用方法
- 凑算式
- Servlet总结
- Deep Learning(深度学习)学习笔记整理系列之(一)
- 重复值判断练习题