AT89C51单片机数码管仿真60.00到00.00倒计时程序 4位数码管显示...

用AT89C51单片机,4位共阴极数码管,显示出1234 程序怎么写?????? 请各位朋友帮忙!谢谢!_百度知道
用AT89C51单片机,4位共阴极数码管,显示出1234 程序怎么写?????? 请各位朋友帮忙!谢谢!
我有更好的答案
&&&&&MOV&&&&R3;ANL&&&&P1;&&&&&&&&&P3.2,C&&&&&&&&SETB&&&P3;MOV&&36H,#06H&&&&&&&&&&&&&&&&&JMP&&&&&$-2D0;&ORL&&&&P1;&&&nbsp:&&&&&&&&&&&&MOV&&32H,#02H&&&&&&nbsp,06H;&&R3,D2&&&&RETTAB;MOV&&&&DPTR;ACALL&&&D0&R3,#250&&&&&&&&&&nbsp,R2&&&&&&&&RL&&&A&&&&&&&&MOV&R2,A&&&&&&&&JB&&&ACC.6,D1&DJNZ&&&nbsp:&&&&A;&MOV&&33H,#03H&&&&&&&&RLC&&A&&&&&&&&MOV&&&&&&nbsp,4FH&nbsp,@R0&R2,#B&&DJNZ&MOV&&34H,#04H&&nbsp,#8D2;&&&&&&nbsp,@A+DPTR&&&&DB&&MOVC&&&&&nbsp,AD3:&&&&&MOV&&nbsp,#B&&&&&&&&MOV&&MOV&&35H,#05H&&&&nbsp,#31H&&&&&&&MOV&&&&&&&&DB&66H,6DH,7DH,07H&&&&&&&&&DB&7FH,6FH,77H,7CH&&&&&&&&&DB&39H,5EH,79H,71H&&&&&&&&&DB&40H&&&&&&&&&END;&&&&nbsp:&&&&3FH;&&&&&&&nbsp.3&&R3,$&&&&&&&&MOV&&&MOV&&&A,R2&INC&&&&R0&CLR&&&&P3;&A;MOV&&R0;&&&&&&&&&&&&A;&&nbsp,5BH;&&&nbsp,#TABD1;&&&nbsp.3&&nbsp:&&&&nbspMOV&&31H,#01H&nbsp
采纳率:60%
为您推荐:
其他类似问题
您可能关注的内容
at89c51的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。文档分类:
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
您的浏览器不支持进度条
下载文档到电脑,查找使用更方便
还剩?页未读,继续阅读
播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表基于AT89C51单片机的LED数字倒计时器设计.docx
文档介绍:
单片机原理及其应用课程设计
课题: 基于AT89C51单片机的LED数字倒计时器设计
专业: 电工程及其自动化
AT89C51单片机LED数字倒计时器设计报告
一、设计目的作用
1、掌握51单片机最小系统的设计;
2、掌握按键电路设计、LED数码管的使用;
3、掌握C51的编程方式。
4、培养我们的团结合作能力。
5、锻炼我们的动手实践能力。
二、设计要求
基于AT89C51单片机的LED数字倒计时器主要具有如下功能,具体要求如下:
(1)LED数码管显示倒计时时间。
(2)倒计时过程中能设置多个闹钟,当倒计时值倒计到设定值时会发出2s的报警声音。(K1设置小时,K2设置分钟,K3设置秒钟,K4完成退出)
(3)通过按键可以对倒计时设定处置。倒计时初值范围在24:00:00~00:00:60之间,用户可根据需要对其进行设置,设置成功后复位初始值为成功设定值。
三、设计的具体实现
1、设计原理
(1)LED数字倒计时器主要由AT89C51单片机、晶振电路、复位电路、按键电路、数码管电路、蜂鸣电路组成(如图1.1)。
数码管电路
图1.1 LED数字倒计时器系统设计框图
(2)手绘草图
2、系统设计
(1)晶振电路的分析
a.晶振电路原理:
晶振是通过电激励来产生固定频率的机械振动,而振动又会产生电流反馈给电路,电路接到反馈后进行信号放大,再次用放大的电信号来激励晶振机械振动,晶振再将振动产生的电流反馈给电路,如此这般。当电路中的激励电信号和晶振的标称频率相同时,电路就能输出信号强大,频率稳定的正弦波。整形电路再将正弦波变成方波送到数字电路中供其使用。
b.晶振电路的特点:
晶振是石英振荡器的简称,英文名为Crystal,晶振分为有源晶振和无源晶振两种,其作用是在电路产生震荡电流,发出时钟信号。它是时钟电路中最重要的部件,它的作用是向IC等部件提供基准频率,它就像个标尺,工作频率不稳定会造成相关设备工作频率不稳定,自然容易出现问题。由于制造工艺不断提高,现在晶振的频率偏差、温度稳定性、老化率、密封性等重要技术指标都很好,已不容易出现故障,但在选用时仍可留意一下晶振的质量。
图1.2晶振电路原理图
(2)复位电路的分析
a.复位电路原理
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。RC复位电路可以实现上述基本功能,但解决不了电源毛刺和电源缓慢下降(电池电压不足)等问题,而且调整 RC 常数改变延时会令驱动能力变差。左边的电路为高电平复位有效,右边为低电平有效, 复位按键为手动复位开关,电容可避免高频谐波对电路的干扰。
b.复位电路的作用:
复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位。一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。
图1.3 复位电路原理图
(3)按键电路的分析 
a.按键电路的原理: 
按键B1/B2/B3/B4断开时,P1.0/P1.1/P1.2/P1.3输入为高电平;按键
B1/B2/B3/B4闭合后,P1.0/P1.1/P1.2/P1.3输入为低电平。每按一次按键,就会有一次低电平,单片机就会对低电平计数,从而来调节定时时间。由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,这种抖动对于计算机来说,是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级。你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了,所以必须运用延时程序消除按键的抖动。
b.按键电路的作用:     
每次复位之后,三个两位数码管全部都会显示为0,而与P1.0相接的按钮B1,每次按下一次,就会产生一次低电平,单片机就会计数一次,从而调节倒计时的小时时间,B2则调节分钟,B3则调节秒钟,与这三个按键分别控制数码管的显示倒计时的小时、分钟、秒。与这三个按键不同的是,按键B3的作用是开始倒计时。这些按键的功能都是通过编程来控制的。
图1.4按键电路原理图
(4)数码管电路的分析
a.数码管电路的组成:
1&六位数码管:分别显示小时,分钟和秒钟。
2&含有八个电阻带电源的排阻:分别与三个数字显示的数码管并联,电源给数码管提供电压,电阻的作用是保护数码管不被烧坏。
3&将PO口的八位与数码管和排阻连载一起的导线,将P2口的六位分别与六位数码管的六个位选引脚接在一起。
b.数码管电路的原理:
7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。当发光二极管导通时,相应的一个点或一个笔画发光。控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管。
(5)蜂鸣电路的分析
a.蜂鸣电路的组成:
两个阻值为一千欧姆的电阻,一个阻值为100欧姆的电阻,一个蜂鸣器,一个三极管,一个接地,以及导线。
b.蜂鸣电路的原理:
蜂鸣电路是利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动。在程序上,可以使用TIMER0 来定时,将TIMER0 的预分频设置为/1,选择TIMER0 的始终为系统时钟(主振荡器时钟/4),通过按键可以在TIMER0 的载入/计数寄存器内调节设置时间,就能将TIMER0 的中断设置设置为倒计时时间,当需要I/O 口驱动的蜂鸣器鸣叫时,只需要在进入TIMER0 中断的时候对该 I/O 口的电平进行翻转一次,直到蜂鸣器不需要鸣叫的时候,将I/O 口的电平设置为低电平即可。不鸣叫时将I/O 口的输出电平设置为低电平是为了防止漏电。
图1.5蜂鸣电路原理图
3、系统实现
(1)LED数字倒计时器的程序流程图
(2)LED数字倒计时器的C语言程序编码
#include&reg51.h&
sbit kh=P1^0;
sbit km=P1^1;
sbit ks=P1^2;
sbit st=P1^3;
sbit b=P3^7;
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,
0x83,0xc6,0xa1,0x86,0x8e};1
内容来自淘豆网www.taodocs.com转载请标明出处.
文件大小:0 KB
下载次数:AT89C51单片机24.00.00到00.00.00倒计时程序 6位或8位数码管显示 C语言和汇编都行 急用 带电路图 十分感谢_百度知道
AT89C51单片机24.00.00到00.00.00倒计时程序 6位或8位数码管显示 C语言和汇编都行 急用 带电路图 十分感谢
急用 自己没做出来
我有更好的答案
y[6]={0x80,0x40;&q&6;)&&&&&&S18=P3^2;&P21=0;&char&&long&sbit&P17=P1^7;&//循环扫描&&&{&&&&&&&q++;&unsigned&&&5&&{&nbsp.h&/****************************声明函数*****************************/&P20=1;&}}/*****************************主程序******************************/&&void&main(void)&&{&&&&&&&&&&&&unsigned&long&a=240000;&&&RCAP2H&=0x10;&//赋T2的预置值0x1000,溢出30次就是1秒钟&&&RCAP2L&=0x00;&&&&TR2=1;&&&//启动定时器&&&ET2=1;&&&&//打开定时器2中断&&&EA=1;&&&&&//打开总中断&&&&&&while(1)&&&{&&&&if(f)//发现标记进入处理&&&&{&&&&&&&&&&&&&&f=0;//清除标记&&&&&a--;&&&&&if(a&0)a=240000;&&&&}&&&&&&&&x8led(a);//将a的值送到数码管显示&&&}&&&&}/*****************************************************************/;&&&{&P13=P1^3;&delay882us(void){&unsigned&char&i;&sbit&t,0x80,0x90;&&&}}&&/*******************************延时882us*************************/void&xx[5]=ddd/;&&&&&q;&&&&xx[3]=ddd/1000%10;&&sbit&void&&&&TF2=0;&delay882us(void);/*****************************定义IO******************************/&sbit&P12=P1^2;&unsigned&&&char&&sbit&&&&if(t==30)&&nbsp,0.h&&&&&&//包括一个52标准内核的头文件&nbsp,0;i&255;i++)&&&&&P20=0;&sbit&r++;P15=P1^5;&&P1=0&&&&//0-9的字段码&&&unsigned&char&xx[6]={0;ddd);&unsigned&&&&xx[2]=ddd/100%10;S19=P3^1;&&nbsp,0x8;P11=P1^1;&P14=P1^4;&&&sbit&&xx[0]=ddd%10;&sbit&&&delay882us();&sbit&void&_nop_(),0x20,0x10;&&&&&P1=l[xx[r]];&&&&&&&&&P21=1;&&nbsp,晶振HZ&{&&t=0;&xx[4]=ddd/10000%10;&&reg52;t++;//T2的预置值0x1000,溢出30次就是1秒钟,0xa4,0xb0;&//每次长时间的溢出,就置一个标记;P10=P1^0;&static&xx[1]=ddd/10%10;char&&&&&if(r==6)r=0;&&P21=P2^1;&&nbsp,0x82,0xf8,以便主程序处理&&P20=P2^0;&&&&&&&unsigned&char&l[11]={0xc0,0xf9,0;P16=P1^6;&&&S20=P3^0;&&delay882us();&&&&for(q=0;x8led(unsigned&for(i=0;&&&&&&bit&f=0;//位变量&/***************************定时器2中断**************************/timer2()&interrupt&&&&sbit&#include&lt,0};&nbsp,0,r=0;f=1;&&nbsp,0x7f};&&&sbit&P1=y[r];sbit&nbsp,0x4};&nbsp#include&}}/*****************************数码管扫描**************************/void&x8led(unsigned&long&ddd){&sbit&&lt,0x99,0x92
采纳率:24%
为您推荐:
其他类似问题
数码管显示的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。基于51单片机能实现任意时间倒计时。_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于51单片机能实现任意时间倒计时。
&&基于51系列AT89C51单片机能能实现任意时间倒计时。
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩17页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢c语言-关于AT89C51单片机数字时钟的设计C语言程序warning问题
作者:用户
浏览:469 次
关于AT89C51单片机数字时钟的设计C语言程序warning问题本人新手,还希望各位大大帮忙看下怎么解决Buildtarget'Target1'assemblingSTARTUP.A51...lin
关于AT89C51单片机数字时钟的设计C语言程序warning问题
本人新手,还希望各位大大帮忙看下怎么解决
Build target 'Target 1'
assembling STARTUP.A51...
linking...
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
STARTUP.obj (?C_STARTUP)
ADDRESS: 080AH
Program Size: data=9.0 xdata=0 code=15
"t" - 0 Error(s), 2 Warning(s).
源程序如下:
#define uint unsigned int
#define uchar unsigned char
sbit QB1=P1^0;
sbit QB2=P1^1;
//数码管段选
sbit QB3=P1^2;
sbit QB4=P1^3;
sbit QB5=P1^4;
sbit QB6=P1^5;
sbit fm=P1^6; //蜂鸣器
sbit s1=P2^4; //s5按键,切换显示
sbit s2=P2^3; //s2按键,设置调时
sbit s3=P2^2; //s3按键,加1
sbit s4=P2^1; //s4按键,减1
sbit led1=P0^0;
sbit led2=P0^1;
sbit led3=P0^2;
uchar sec,minu,hour,day,week,
uchar n_sec,n_minu,n_
uchar set_2=1,set_1=1;
uchar hs,hg,mis,mig,ss,
uchar nhs,nhg,nms,nmg,nss=0,nsg=0;
uchar ms,mg,ds,dg,w;
uchar code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,
0X90,0X88,0X83,0XC6,0XA1,0X8E,0X86,0xbf}; //0~F,-,共阳
//uchar code tableyi[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
//0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};//0-F,-,共阴
uchar code table_d[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
0x87,0xff,0xef}; //0~9数组,带小数点
uchar table1[]={31,31,29,31,30,31,30,31,31,30,31,30,31}; //闰年
uchar table2[]={31,31,28,31,30,31,30,31,31,30,31,30,31}; //非闰年
void delay(uint); //延时函数
void timer0(); //走时中断函数
void jishi(); //计时函数
void key_change(); //切换显示按键函数
void key_set(); //设置时间按键函数
void disp(uchar,uchar,uchar,uchar,uchar,uchar); //显示函数
void zd_clock(); //整点报时函数
void nz_clock(); //闹钟函数
uchar incone(uchar); //加1函数
uchar decone(uchar); //减1函数
void set_time(); //设置时间函数
void set_clock(); //设置闹钟函数
void set_mdw(); //设置月日星期函数
void main() //主函数
TMOD=0x01;
TH0=0x4c; //50ms初值 晶振11.0592
hour=23;minu=59;sec=49; //赋初值:11点59分0秒
n_hour=12;n_minu=56;n_sec=0; //闹钟赋初值12点1分0秒
year=2008;mon=5;day=14;week=3;//年月日星期赋初值日星期天;祝天下所有母亲节日快乐
hs=hour/10; //时分秒HH.MM.SS
hg=hour%10;
mis=minu/10;
mig=minu%10;
ss=sec/10;
sg=sec%10;
ms=mon/10; //月日-星期MM.DD.-W
mg=mon%10;
ds=day/10;
dg=day%10;
nhs=n_hour/10; //闹钟定时HH.MM.SS
nhg=n_hour%10;
nms=n_minu/10;
nmg=n_minu%10;
nss=n_sec/10;
nsg=n_sec%10;
key_change(); //s4按键扫描
key_set(); //s2按键扫描
set_time(); //设置时间
set_mdw(); //设置月日星期
set_clock(); //设置闹钟
if(set_1==1) //正常走时显示
disp(hs,hg,mis,mig,ss,sg);
if(set_1==2) //设置时间,LED1闪亮
disp(hs,hg,mis,mig,ss,sg);
if(sec%2==0)
{led2=1;led3=1;led1=~led1;}
// {led1=1;}
if(set_1==3) //正常显示月日-星期
disp(ms,mg,ds,dg,16,w);
if(set_1==4) //设置月日-星期,LED2闪亮
disp(ms,mg,ds,dg,16,w);
if(sec%2==0)
{led1=1;led3=1;led2=~led2;}
// {led2=1;}
if(set_1==5) //正常显示定时
disp(nhs,nhg,nms,nmg,nss,nsg);
if(set_1==6) //设置闹钟定时,LED3闪亮
disp(nhs,nhg,nms,nmg,nss,nsg);
if(sec%2==0)
{led1=1;led2=1;led3=~led3;}
// {led3=1;}
zd_clock(); //整点报时
nz_clock(); //闹钟
void timer0() interrupt 1 //50ms中断函数
TMOD=0x01;
TH0=0x4c; //50ms初值 晶振11.0592
if(count==20)
jishi(); //调计时函数
void jishi() //计时函数
if(sec==60)
if(minu==60)
if(hour==24)
if(week==8)
if(year%4==0&&year%100!=0||year%400==0) //闰年
if(day==table1[mon]+1)
if(mon==13)
{mon=0;year++;}
else //非闰年
if(day==table2[mon]+1)
if(mon==13)
{mon=0;year++;}
void key_change() //s1按键扫描
delay(200);
while(!s1);
if(set_1==7)
{set_1=1;}
void key_set() //s2按键扫描
delay(10);
while(!s2);
if(set_2==4)
{set_2=1;}
void disp(uchar a1,uchar a2,uchar a3,uchar a4,uchar a5,uchar a6) //显示函数
P3=table[a1]; //段码送P0口
delay(10); //延时一小会
P3=table[a2]; //第2个数码管显示,带小数点
delay(10);
P3=table[a3]; //第3个数码管显示
delay(10);
P3=table[a4]; //第4个数码管显示,带小数点
delay(10);
//第5个数码管显示
P3=table[a5];
delay(10);
P3=table[a6]; //第6个数码管显示
delay(10);
void zd_clock() //整点报时函数
if(minu==59&&(sec==53||sec==55||sec==57))
if(minu==59&&sec==59)
void nz_clock() //闹钟函数
if(hour==n_hour&&minu==n_minu&&sec==n_sec)
//if((sec%2==0)&&sec&30)
void set_time() //设置时间函数
if(set_1==2)
if(set_2==1)
hour=incone(hour);
if(hour==24)
// if(hour&0)
// {hour=23;}
hour=decone(hour);
if(set_2==2)
minu=incone(minu);
if(minu==60)
// if(minu&0)
// {minu=59;}
minu=decone(minu);
void set_mdw() //设置月日星期函数
if(set_1==4)
if(set_2==1)
mon=incone(mon);
if(mon==13)
mon=decone(mon);
// if(mon==0)
// {mon=12;}
if(set_2==2)
day=incone(day);
if(day==32)
day=decone(day);
// if(day==0)
// {day=0;}
if(set_2==3)
week=incone(week);
if(week==8)
week=decone(week);
// if(week==0)
// {week=7;}
void set_clock() //设置闹钟函数
if(set_1==6)
if(set_2==1)
n_hour=incone(n_hour);
if(n_hour==24)
{n_hour=0;}
n_hour=decone(n_hour);
if(n_hour==0)
{n_hour=0;}
if(set_2==2)
n_minu=incone(n_minu);
if(n_minu==60)
{n_minu=0;}
n_minu=decone(n_minu);
if(n_minu==0)
{n_minu=0;}
uchar incone(uchar n) //加1函数
{ delay(200);
while(!s3);
return(n);
uchar decone(uchar m) //减1函数
delay(200);
while(!s4);
return(m);
void delay(uint k) //延时函数
for(i=k;i&0;i--)
for(j=80;j&0;j--);
表示自己已经解决忘记添加到项目了。。。
解决方案二:
解决方案三:
好厉害哦,我们刚学而已
【云栖快讯】中办国办印发《推进互联网协议第六版(IPv6)规模部署行动计划》加快推进基于 IPv6 的下一代互联网规模部署,计划指出2025年末中国 IPv6 规模要达到世界第一,阿里云也第一时间宣布了将全面提供IPv6服务,那么在全面部署 IPV6 前,你需要了解都在这儿&&
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
开发者常用软件,超百款实用软件一站式提供}

我要回帖

更多关于 单片机数码管仿真 的文章

更多推荐

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

点击添加站长微信