简单的51 单片机时钟程序,可以通过按键来设置时间,按键可以自己更改。 #include #define uint unsigned int #define uchar unsigned char #define tt 46080 //设置时间间隔,对应 11.0592MHZ 的晶振 uchar code table[]="Happy every day!"; uchar code table1[]="00:00:00"; uchar num,hh,mm,ss,t,s1num=0; sbit en=P3^4; sbit rs=P3^5; sbit rw=P3^6; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2;//按键所用的端口 sbit s4=P3^3; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); //大约是1ms,因为单片机的时钟周期为11.0592mhz。 } void write_com(uchar com) { rs=0; //指令 P0=com; //写指令函数 delay(1); en=1; delay(1); en=0; } void write_data(uchar dat) { rs=1; //数据 P0=dat; //写指令函数 delay(1); en=1; delay(1); en=0; } void init() { en=0; //初始时使能为 0 rw=0; write_com(0x38); //显示屏模式设置为 1602 方案 write_com(0x0c); write_com(0x06); //显示开关/光标设置 write_com(0x01); //清屏 write_com(0x80); //指针置零 for(num=0;num<16;num++) write_data(table[num]); write_com(0xc3); for(num=0;num<8;num++) write_data(table1[num]); } void dingshi() { TMOD=0x01; //确定定时器工作模式(定时模式) TH0=(65536-tt)/256; //赋初值为tt 微秒 TL0=(65536-tt)%256; //不赋值时默认其值是 0 EA=1; //开总中断 ET0=1; //开定时器0 中断 // IE=0x82; //总线写法 TR0=1; //启动定时器0 总线 TCON=0x10; } void shuanxin(uchar add,uchar date) { uchar shi,ge; write_com(0xc3+add); //指针指向 shi=date/10; ge=date%10; write_data(0x30+shi); write_data(0x30+ge); //指针自动后移,故不必再写指针位置 } /***************借助蜂鸣器接地起作用***************/ void keyscan() { if(s1==0) { delay(5); if(s1==0) { s1num++; while(!s1); if(s1num==1) { TR0=0; //时钟停止运行 write_com(0xca); //指针指向 ss write_com(0x0f); //光标闪烁 } if(s1num==2) { write_com(0xc7); //指针指向mm write_com(0x0f); } if(s1num==3) { write_com(0xc4); //指针指向hh write_com(0x0f); } if(s1nu...