利用单片机的定时器和数码管,设计一个数码管电子时钟源程序

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开始每1秒钟加1。
我有更好的答案
己网上找找,多的是!你这样问别人怎么回答你!计时就用单片机定时器就可以了!至于数码管驱动,自己好好看看书吧
数码管驱动可以用CD4511比较省事
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包【急】利用51单片机的定时器和实验仪的数码管电路设计一个电子时钟,显示格式XX XX XX,依次为 时、分、秒_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
【急】利用51单片机的定时器和实验仪的数码管电路设计一个电子时钟,显示格式XX XX XX,依次为 时、分、秒
今晚18:00点之前发到
要用汇编语言编写的 最好还有流程图
悬赏10个金币
我有更好的答案
P0 =表[NUM%10];
P0 =表[num/ &#47.6硬件是很简单的,我不画,和它的简要说明。最小的单芯片系统基础上的P0端口访问的数据的数字控制端,P2; J&gt, 0x4f,0x66, 0x6d,0x7d;& } 的无效TO_time()中断 { TH0 =()/ 256 / /加载初始值的11;/ /位 UCHAR NUM0;} } 显示() { S1 = 1; 数+ +, 0x77?/ /加载的初始值11;
P0 = 0XFF; 延迟(5),2秒 { NUM0 = 0,0x39,0x7c; (40 ==的NUM0)/
ET0 = 1; 0,我 - )为(J = 110;10],0x5e者,0X06,0x5b;
TR0 = 1; 0,J - ); }
BR /&无效的init() { TMOD = 0X01; / /的 TH0 =()/到40; 256的设置定时器0的作品01; ?,数量; 的UCHAR代码表[] =
{的0x3F.0592晶体定时50ms的 TL0 =()%256;
NUM0 + +,值为0x79,0x71}; 无效延迟(UCHAR X)
UCHAR I,J; (I = X&gt。 程序如下;/ / 10位 SBIT S2 = P2 ^ 7 .0592水晶定时50ms的 TL0 =()%256;
EA = 1:#包括的的定义uint无符号整数定义UCHAR无符号的字符 SBIT S1 = P2 ^ 6 ,为0x07到0x7f,0x6f,P2.7连接数码管的控制端
已经晚了吧
为您推荐:
其他类似问题
51单片机的相关知识
换一换
回答问题,赢新手礼包怎么只用数码管与单片机写时钟_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
怎么只用数码管与单片机写时钟
我有更好的答案
用数码管与单片机是不写时钟的,是可以画时钟的仿真图,程序是写的,并写出时钟的程序吗。是要画出仿真图?是用C语言写吗
采纳率:90%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包基于51单片机定时器的电子时钟设计_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于51单片机定时器的电子时钟设计
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢用51单片机定时器中断设计电子钟
把前天设计的时钟的功能补全了一些,贴上来,
#include&reg52.h&
#define uchar unsigned char
sbit rd=P2^6;
sbit wr=P2^5;
sbit lcde=P2^7;
sbit k1=P1^0;
sbit k2=P1^1;
sbit k4=P1^3;
sbit k8=P1^7;
uchar code table1[]="";
uchar code table2[]="00:00:00";
uchar code
table3[][3]={{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};&&&&&&&&
//定义了二维数组存放星期
uchar t,s1
char shi,fen,miao,week,
uchar yue=1,ri=1;
void delay(uchar
//延迟zms函数
&uchar x,y;
&for(x=z;x&0;x--)
&for(y=110;y&0;y--);
void write_com(uchar
com)&&&&&&
//液晶写指令操作
&delay(5);
void write_date(uchar
date)&&&&&&&
//液晶写数据操作
&delay(5);
void write_sfm(uchar add,uchar
date)&&&&&&
//更新时分秒
&uchar shi,
&shi=date/10;
&write_com(0x80+0x40+add);
&write_date(0x30+shi);
&write_date(0x30+ge);
void write_week(uchar
i)&&&&&&&&&&&&
//更新星期
&write_com(0x80+0x0b);
&for(j=0;j&3;j++)
&&write_date(table3[i][j]);
void write_riqi(uchar add,uchar
//更新年月日
&uchar shi,
&shi=riqi/10;
&write_com(0x80+0x00+add);
&write_date(0x30+shi);
&write_date(0x30+ge);
init()&&&&&&&&&&&&&&&
//初始化函数
&uchar i,j;
&write_com(0x38);
&write_com(0x0c);
&write_com(0x06);
&write_com(0x01);
&write_com(0x80+0x00);
&for(i=0;i&10;i++)
&write_date(table1[i]);
&write_com(0x80+0x00+0x0b);
&for(j=0;j&3;j++)
&write_date(table3[week][j]);
&write_com(0x80+0x46);
&for(i=0;i&8;i++)
&write_date(table2[i]);
&TMOD=0x01;&&&&&&&&&&&&&
//定时器0工作方式1
&TH0=()/256;&&&&&&&&
//设定定时器初值
&TL0=()%6;&&&&&&&&
//12M晶振时50ms数为50000
keyscan()&&&&&&&&&&&
//键盘扫描函数
&if(k1==0)&&&&&&&&&&&&&&
//按下k1键确定调时分秒
&delay(5);
&if(k1==0)
&&s1num++;
&&while(!k1)
&&delay(5);
&&while(!k1);
&&&if(s1num==1)&&&&&
&&&TR0=0;&&&&&&&&&&&&&&&&&&
//暂停计时器
&&&write_com(0x80+0x4d);&&&&
//光标在秒的位置闪烁
&&&write_com(0x0f);
&&&if(s1num==2)&&&&&&&&
//光标在分的位置
&&&write_com(0x80+0x4a);
&&&write_com(0x0f);
&&&if(s1num==3)&&&&&&&&
//光标在小时的位置
&&&write_com(0x80+0x47);
&&&write_com(0x0f);
&&if(s1num==4)&&&&&&&&
//光标在星期的位置
&&&write_com(0x80+0x0d);
&&&write_com(0x0f);
&&if(s1num==5)&&&&&&&&
//光标在日的位置
&&&write_com(0x80+0x09);
&&&write_com(0x0f);
&&if(s1num==6)&&&&&&&&
//光标在月的位置
&&&write_com(0x80+0x06);
&&&write_com(0x0f);
&&if(s1num==7)&&&&&&&&
//光标在年的位置
&&&write_com(0x80+0x03);
&&&write_com(0x0f);
&&&if(s1num==8)&&&&&&
//按下第8下时接着走时
&&&&s1num=0;
&&&&write_com(0x0c);
&&&&TR0=1;
&if(s1num!=0)
&&if(s1num==1)
&&if(k2==0)&&&&&&&&&&&
//按k2键秒加1
&&&delay(5);
&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&miao++;
&&&if(miao==60)
&&&miao=0;
&&&write_sfm(0x0c,miao);&
&&&write_com(0x80+0x4d);
&&if(s1num==2)
&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&fen++;&
&&&if(fen==60)
&&&write_sfm(0x09,fen);&
&&&write_com(0x80+0x4a);
&&if(s1num==3)
&&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&shi++;&
&&&if(shi==24)
&&&write_sfm(0x06,shi);&
&&&write_com(0x80+0x47);
&&if(s1num==4)
&&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&week++;&
&&&if(week==7)
&&&week=0;
&&&write_week(week);&
&&&write_com(0x80+0x0d);
&&if(s1num==5)
&&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&if(ri==31)
&&&write_riqi(0x08,ri);
&&&write_com(0x80+0x09);
&&if(s1num==6)
&&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&yue++;&
&&&if(yue==12)
&&&write_riqi(0x05,yue);
&&&write_com(0x80+0x06);
&&if(s1num==7)
&&&if(k2==0)&&&&&&&&&&
&&&delay(5);
&&&if(k2==0)
&&&while(!k2);
&&&delay(5);
&&&while(!k2);
&&&nian++;&
&&&if(nian==100)
&&&nian=0;
&&&write_riqi(0x02,nian);&
&&&write_com(0x80+0x03);
&if(k4==0)&&//判断k4是否被按下
&&delay(5);
&&if(k4==0)
&&&while(!k4);
&&&delay(5);
&&&while(!k4);
&&&if(s1num==1)
&&&&miao--;&&&&&&&
&&&&if(miao==-1)
&&&&miao=59;
&&&&write_sfm(0x0c,miao);&
&&&&write_com(0x80+0x4d);
&&&if(s1num==2)
&&&&fen--;&&&&&&&&
&&&&if(fen==-1)
&&&&fen=59;
&&&&write_sfm(0x09,fen);&
&&&&write_com(0x80+0x4a);
&&&if(s1num==3)
&&&&shi--;&&&&&&&&
&&&&if(shi==-1)
&&&&shi=23;
&&&&write_sfm(0x06,shi);&
&&&&write_com(0x80+0x47);
&&if(s1num==4)
&&&&week--;&&&&&&&&
&&&&if(week==-1)
&&&&week=6;
&&&&write_week(week);&
&&&&write_com(0x80+0x0d);
&&if(s1num==5)
&&&&ri--;&&&&&&&&
&&&&if(ri==0)
&&&&ri=30;
&&&&write_riqi(0x08,ri);
&&&&write_com(0x80+0x09);
&&if(s1num==6)
&&&&yue--;&&&&&&&&
&&&&if(yue==0)
&&&&yue=12;
&&&&write_riqi(0x05,yue);
&&&&write_com(0x80+0x06);
&&if(s1num==7)
&&&&nian--;&&&&&&&&
&&&&if(nian==-1)
&&&&nian=99;
&&&&write_riqi(0x02,nian);&
&&&&write_com(0x80+0x03);
&if(k8==0)&&&&&&&
// 按下k8退出调时&&
&&delay(5);
&&if(k8==0)
&&&while(!k8);
&&&delay(5);
&&&while(!k8);
&&&s1num=0;
&&&write_com(0x0c);
&&&TR0=1;&
void main()
&keyscan();
void timer0() interrupt
//中断服务程序
&TH0=()/256;&&&&&&&&
//设定定时器初值
&TL0=()%6;&&&&&&&&
//12M晶振时50ms数为50000
&&if(t==20)&&&&&&&&&&
//定时器中断20次为1秒
&if(miao==60)
&if(fen==60)
&&if(shi==24)
&&&week++;
&&&if(week==7)
&&&&week=0;
&&&&write_week(week);&&&&&&&&&&&&&&&
//刷新星期
if(ri==31)
&&&&&ri=1;
&&&&&yue++;
&&&&&if(yue==13)
&&&&&&&yue=1;
&&&&&&&nian++;
&&&&&&&if(nian==100)
&&&&&&&nian=0;
&&&&&&&write_riqi(0x02,nian);&&
&&&&&&write_riqi(0x05,yue);&&
&&write_riqi(0x08,ri);&
//刷新日&&
&write_sfm(0x06,shi);&&&
&write_sfm(0x09,fen);&&&&
&write_sfm(0x0c,miao);&&&&
还可以加上整点报时和断电记忆的功能,还可以加上24小时和12小时制转换功能,还可以加上秒表功能,原理都是一样的,但由于51单片机内存有限,只有
//4k,所以没加
//由于单片机晶振不是严格的12MHz,所以要想时钟精确的话还要进行中断时间的调整//其中年只能改变后两位,即从年,其实也可实现全调,原理是一样的,但没这个必要
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 定时器控制数码管 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信