51单片机1602时钟程序

时间:2025-07-06

经过测试成功的单片机时钟程序

#include<reg52.h>

#include<intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit lcden=P2^7;

sbit rs=P2^6;

sbit rd=P3^7;

sbit s1=P1^0;

sbit s2=P1^1;

sbit s3=P1^2;

uchar code table1[]=" 2009-07-18 ";

uchar code table2[]=" 00:00:00";

uchar *table3[]={"SUN","MON","TUE","WED","THU","FRI","STA"};

uchar countday=1;

uint count=0;

char month=7,day=18,shi,fen,miao;

uint year=2009;

uchar counts1=0;

void delay(uint z)

{

uint x,y;

for(x=z;x>0;x--)

for(y=112;y>0;y--);

}

经过测试成功的单片机时钟程序

void delay_us(uint z)

{

for(;z>0;z--)

_nop_();

}

void write_com(uchar com)

{

rs=0;

P0=com;

delay(1);

lcden=1;

delay(5);

lcden=0;

delay(1);

}

void write_dat(uchar dat)

{

rs=1;

P0=dat;

delay(1);

lcden=1;

delay(5);

lcden=0;

delay(1);

}

经过测试成功的单片机时钟程序

void init()

{

uint i;

wela=0; //液晶初始化

dula=0;

rd=0; //用于检测矩阵键盘

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x80);

write_com(0x01);

for(i=0;i<12;i++)

{

write_dat(table1[i]);

delay_us(50);

}

write_com(0x80+0x40);

for(i=0;i<12;i++)

{

write_dat(table2[i]);

delay_us(50);

}

TMOD=0x01;//设置定时器0为工作方式1

TH0=(65535-46080)/256;//晶振为11.0592MHz

TL0=(65535-46080)%256;

EA=1;//开总中断

经过测试成功的单片机时钟程序

ET0=1;//开定时器中断

TR0=1;//开启定时器

}

void display1(uchar address,char date)

{

char shi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+address);

write_dat(0x30+shi);

write_dat(0x30+ge);

}

void display2(uchar address,char date)

{

char shi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+address);

write_dat(0x30+shi);

write_dat(0x30+ge);

}

void display_year(uchar address,uint date)

{

uint qian,bai,shi,ge;

qian=date/1000;

经过测试成功的单片机时钟程序

bai=date/100%10;

shi=date/10%10;

ge=date%10;

write_com(0x80+address);

write_dat(0x30+qian);

write_dat(0x30+bai);

write_dat(0x30+shi);

write_dat(0x30+ge);

}

void display_week(uchar address,uchar date)

{

uchar i;

write_com(0x80+address);

for(i=0;i<3;i++)

write_dat(*(table3[date-1]+i));

}

void keyscan()

{

if(s1==0)//s1为模式选择

{

delay(10);//用于消抖,确认键是否被按下

if(s1==0)

{

counts1++;

if(counts1!=0)

{

经过测试成功的单片机时钟程序

TR0=0;//定时器停止工作

write_com(0x0d);//显示光标 光标闪烁

while(!s1);//松手检测

switch(counts1)

{

case 1: //miao

write_com(0x80+0x40+11);break;

case 2: //fen

write_com(0x80+0x40+8);break;

case 3: //shi

write_com(0x80+0x40+5);break;

case 4: //星期

write_com(0x80+14);break;

case 5: //day

write_com(0x80+10);break;

case 6: //month

write_com(0x80+7);break;

case 7: //year

write_com(0x80+4);break;

case 8:

counts1=0;

write_com(0x0c);//不显示光标

TR0=1;//启动定时器

break;

}

}

经过测试成功的单片机时钟程序

}

}

if(s2==0)

{

delay(10);

if(s2==0)

{

switch(counts1)

{

case 1:

miao++;

if(miao==60)

{

miao=0;

}

while(!s2);

display2(10,miao);

write_com(0x80+0x40+11);

break;

case 2:

fen++;

if(fen==60)

{

fen=0;

}

while(!s2);

经过测试成功的单片机时钟程序

display2(7,fen);

write_com(0x80+0x40+8);

break;

case 3:

shi++;

if(shi==24)

{

fen=0;

}

while(!s2);

display2(4,shi);

write_com(0x80+0x40+5);

break;

case 4:

countday++;

if(countday==8)

{

countday=1;

}

while(!s2);

display_week(12,countday);

write_com(0x80+14);

break;

case 5:

day++;

if(month==1||month==3||month==5||month==7||month==8||month=

经过测试成功的单片机时钟程序

=10||month==12)

{

if(day==32)

{

day=1;

}

}

if(month==4||month==6||month==9||month==11)

{

if(day==31)

{

day=1;

}

}

if(month==2)

{

if(day==29)

{

day=1;

}

}

while(!s2);

display1(9,day);

write_com(0x80+10);

break;

case 6:

经过测试成功的单片机时钟程序

month++;

if(month==13)

{

month=1;

}

while(!s2);

display1(6,month);

write_com(0x80+7);

break;

case 7:

year++;

while(!s2);

display_year(1,year);

write_com(0x80+4);

break;

}

}

}

if(s3==0)

{

delay(10);

if(s3==0)

{

switch(counts1)

{

case 1:

经过测试成功的单片机时钟程序

miao--;

if(miao==-1)

{

miao=59;

}

while(!s3);

display2(10,miao);

write_com(0x80+0x40+11);

break;

case 2:

…… 此处隐藏:2893字,全部文档内容请下载后查看。喜欢就下载吧 ……

51单片机1602时钟程序.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219