#include "reg52.h" typedef unsigned int uint16; typedef unsigned char uint8; uint16 H = 23,M = 0,S = 0,j = 0,x = 0;//初始化 uint8 code time[5] = {"time:"}; ***it RS = P2^5; ***it RW = P2^6; ***it E = P2^7; //延时函数 void delay(uint16 k) { uint16 i; for(i = 0;i < k;i++); } //写LCD1602的命令 void write_com(uint8 com) { RS = 0; RW = 0; P0 = com; E = 0; delay(20); E = 1; } //写LCD1602的数据 void write_date(uint8 date) { RS = 1; RW = 0; P0 = date; E = 0; delay(20); E = 1; } //LCD1602的初始化 void init(void) { write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); } //主程序 void main(void) { init(); TMOD = 0x01;//设置定时器0的工作方式为1 TH0 = 0xdc; TL0 = 0x00; ET0 = 1; EA = 1; TR0 = 1; while(1) { write_com(0x80); for(x = 0;x < 5;x++) { write_date(time[x]); } write_com(0x80+0x05);//时的十位显示的位置 write_date((H/10)+'0');//时的十位显示的内容 write_com(0x80+0x06);//时的个位显示的位置 write_date((H%10)+'0');//时的个位显示的内容 write_com(0x80+0x07);//‘:’显示的位置 write_date(':');//‘:’显示的内容 write_com(0x80+0x08);//分的十位显示的位置 write_date((M/10)+'0');//分的十位显示的内容 write_com(0x80+0x09);//分的个位显示的位置 write_date((M%10)+'0');//分的个位显示的内容 write_com(0x80+0x0A);//‘:’显示的位置 write_date(':');//‘:’显示的内容 write_com(0x80+0x0B);//秒的十位显示的位置 write_date((S/10)+'0');//秒的十位显示的内容 write_com(0x80+0x0C);//秒的个位显示的位置 write_date((S%10)+'0');//秒的个位显示的内容 } } //定时器0中断服务子函数 void TIME0(void) interrupt 1//10MS中断一次 { TH0 = 0xdc;//重新赋值 TL0 = 0x00; j++; if(j==100) { j = 0; S++; if(S==60) { S = 0; M++; if(M==60) { M = 0; H++; if(H==24) { H = 0; } } } } } |
更多回帖