简单的 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; //初始时使能为 0rw=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;//不赋值时默认其值是 0EA=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); //指针指向 sswrite_com(0x0f); //光标闪耀}if(s1num==2){write_com(0xc7); //指针指向 mmwrite_com(0x0f);}if(s1num==3){write_com(0xc4);//指针指向 hhwrite_com(0x0f);}if(s1num==4){s1num=0;TR0=1;//时钟运行write_com(0x0c);//取消闪耀}}}/***************调节时间****************/if(s1num!=0)//目的是使 s1 按下的前提才起作用{if(s2==0){delay(5);if(s2==0){while(!s2); //松手检测...