基于51单片机的4位数码管秒表

合集下载

单片机4位数码管电子时钟

单片机4位数码管电子时钟

单片机4位数码管电子时钟经过几天的努力,第一个51 单片机电子时钟终于出炉了,通过4 位数码管来显示时间,系统晶振11.0592MHZ,仿真图中用二极管代替时钟冒号闪烁,非门代替三极管,让仿真速度与真实速度达到一致,本设计用了6 个按钮来对时间及闹钟时间的调节、关闭,p3.2 接时间分加1 按钮,p3.3 接时间时加1 按钮,p3.4 接闹钟时间与当前时间切换按钮,按住不放显示闹钟的时间,闹钟初始化为00:00,放开按钮则显示当前时间,p3.5 接闹钟加1 按钮,p3.6 接闹钟时加1 按钮,p3.7 接关闭闹钟按钮有没有人会问1hei 本程序已经通过软件仿真和硬件制作.程序源代码:org 0000h ajmp main ;调至主程序org 000bh ;T0 中断入口地址ljmp inti0 org 001bh ;T1 中断入口地址ljmp inti1 org 0030hmain:mov tmod,#11h ;设T0、T1 为模式1 mov ie,#8ah ;开T0、T1 中断允许mov th0,#4ch ;赋T0 50ms初值mov tl0,#00h mov th1,#4ch ;赋T1 50ms 初值mov tl1,#00h mov sp,#60h ;设置堆栈指针mov r0,#20 ; T0 50ms 计数20 次mov 31h,#00 ;时间秒初始化mov32h,#00 ;时间分初始化mov 33h,#00 ;时间时初始化mov 38h,#00 ;闹钟分初始化mov 39h,#00 ;闹钟时初始化setb tr0 ;启动T0 setb tr1 ;启动T1loop:lcall display ;调用时间显示子程序lcall key ;调用时间调节按键子程序lcall keynz ;调用闹钟按键子程序ajmp loopinti0:push psw ;保护现场push acc clr ea ;关中断movth0,#4ch ;重赋50ms 初值mov tl0,#00h djnz r0,out ;对50ms 计数判断mov r0,#20 ;重赋50ms 计数值inc 31h ;秒加1 cpl p2.2 ;P2.2 取反输出mov a,31h cjne a,#60,out ;判秒是否加到60,没有加到中断返回mov 31h,#00 ;秒加到60,对秒清零inc 32h ;分加1 mov a,32h cjne a,#60,out ;判分是否加到60,没有加到就中断返回mov32h,#00 ;分加到60,对分清零inc 33h ;时加1 mov a,33h cjne a,#24,out ;判时是。

0907040209基于51单片机的秒表

0907040209基于51单片机的秒表

课程名称:单片机原理及应用(1)设计题目:基于51单片机的秒表计时系统成绩:姓名:郑灵莉学号:0907040209专业年级:电信工程09级学院:电气信息学院指导教师:邓魁时间:2012年12月29日基于51单片机的秒表一、摘要:在日常生活中,我们经常为了计时而采用秒表,在一些特殊场合,如体育比赛中,我们更希望计时更加精准。

因此,希望我利用所学的知识设计一个计时器可以完成更精确的计时。

它是利用51单片机控制LED数码管,实现00.00到99.99秒的计时,在Proteus 软件上实现其电路设计和程序设计。

它的设计也许比较简单,而且有可能达不到很多人的要求,但我相信通过我们过一步的学习,我们一定会制造出更好的系统,为社会大众服务。

关键词:51单片机LED数码显示管二、设计要求1.完成秒/微秒的依次显示并正确计数2.秒/微秒各段个位满10正确进位3.利用四位一体数码管动态扫描完成秒、微秒显示:A:精度达10ms;B:可以启动; C:完成暂停4.秒表暂停记录数据后能在原有基础上继续计时,而不是复位重新开始。

即可以随时记时、暂停后记录数据三、功能创新1.在Proteus上实现电路设计,并仿真成功,且在万用板上焊接、调试成功2. 通过编程实现直接在LED 数码管上显示计数值,并精确到1ms 四、硬件电路设计 1. 系统设计框图根据设计要求与思路,在Proteus 软件上设计和仿真该系统的设计方案。

硬件电路由5部分组成,即单片机电路,时钟电路,复位电路,显示电路,显示器控制电路图3.12. 单片机系统设计电路本次设计采用ATmel 生产的AT89C51作为控制芯片。

AT89系列与MCS-51系列相比具有两大优势:一,片内程序存储器采用闪速存储器,使程序的写入更加方便;二,提供了更小存储的芯片,使整个电路设计更小。

它以较小的体积、良好的性价比备受亲睐。

51单片机如下图:输入电压51单片机时钟电路 复位电路显示电路显示器控制电路51单片机管脚图3.时钟电路单片机工作的时间基准是由时钟电路提供的,在单片机的XTAL1和XTAL2两个管脚接一只晶振和两只电容就构成了单片机的时钟电路。

基于51单片机的数字秒表课程设计

基于51单片机的数字秒表课程设计

电气与自动化工程学院卓越工程师培养计划暑期实训报告题目秒表系统的设计年级11级专业自动化班级卓越班学号*********姓名俞雷地点大学生创新实验室日期2012年8月12日~2012年8月20日目录一、单片机简介............................................................................- 2 -二、设计目标................................................................................- 3 -1、设计目的: (3)2、具体操作: (3)三、硬件设计................................................................................- 4 -原理图:. (4)四、系统的软件设计....................................................................- 5 -1、软件整体设计思路: (5)2、软件流程图: (5)3、程序: (6)(1)数码管秒表显示程序: ...................................................- 6 -(2)1602液晶秒表显示程序:............................................ - 13 -五、系统的调试及设计结果..................................................... - 18 -1602液晶——秒表显示效果图:. (18)LED数码管——秒表显示效果图: (18)六、创新实验室课程设计小结................................................. - 19 -一、单片机简介单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。

基于51单片机秒表的程序的设计[1]

基于51单片机秒表的程序的设计[1]

基于51单片机秒表的程序设计1.设计目的:(1)利用单片机定时器中断和定时器计数方式实现秒、分定时。

(2)通过LED显示程序的调整,熟悉8155与8051,8155与LED的接口技术,熟悉LED动态显示的控制过程。

(3)通过键盘程序的调整,熟悉8155与矩阵式键盘的接口技术,熟悉键盘扫描原理。

(4)通过阅读和调试简易秒表整体程序,学会如何编制含LED动态显示、键盘扫描和定时器中断等多种功能的综合程序,初步体会大型程序的编制和调试技巧。

2.设计步骤与要求(1)要求:以8位LED右边2位显示秒,左边6位显示0,实现秒表计时显示。

以4×4矩阵键盘的KE0、KE1、KE2等3键分别实现启动、停止、清零等功能。

(2)方法:用单片机定时器T0中断方式,实现1秒定时;利用单片机定时器1方式3计数,实现60秒计数。

用动态显示方式实现秒表计时显示,用键盘扫描方式取得KE0、KE1、KE2的键值,用键盘处理程序实现秒表的启动、停止、清零等功能。

(3)软件设计:软件整体设计思路是以键盘扫描和键盘处理作为主程序,LED动态显示作为子程序。

二者间的联系是:主程序查询有无按键,无按键时,调用二次LED动态显示子程序(约延时8ms)后再回到按键查询状态,不断循环;有按键时,LED动态显示子程序作为按键防抖延时被连续调用二次(约延时16ms),待按键处理程序执行完后,再回到按键查询状态,同时兼顾了按键扫描取值的准确性和LED动态显示的稳定性。

秒定时采用定时器T0中断方式进行,60秒计数由定时器1采用方式3完成,中断及计数的开启与关闭受控于按键处理程序。

由上述设计思路可设计出软件流程图如图1.1所示。

(5)程序编制:编程时置KE0键为“启动”,置KE1键为“停止”,置KE2键为“清零”,因按键较少,在处理按键值时未采用散转指令“JMP”,而是采用条件转移指令“CJNE”,每条指令后紧跟着一条无条件跳转指令“AJMP”,转至相应的按键处理程序,如不是上述3个按键值则跳回按键查询状态。

51单片机秒表程序

51单片机秒表程序
TH0=0Xd8;//给定时器赋初值,定时10ms
TL0=0Xf0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
/*******************************************************************************
case(7):
LSA=0;LSB=0;LSC=0; break;//显示第0位
}
P0=DisplayData[i];//发送段码
delay(100); //间隔一段时间扫描
P0=0x00;//消隐
}
}
void datapros()
{
DisplayData[0]=smgduan[min/10];
DisplayData[1]=smgduan[min%10];
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
/*******************************************************************************
void main()
{
Timer0Init(); //定时器0初始化
while(1)
{
datapros();
DigDisplay();
}
}
/*******************************************************************************

基于51单片机的秒表设计报告

基于51单片机的秒表设计报告

课程名称:微机原理课程设计题目:基于51单片机的秒表设计随着社会的发展,单片机已经渗透到我们生活中的各个领域,广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等。

本设计就是由单片机STC89C52RC芯片和四位一体LED数码管为核心,辅以必要的电路,构成了一个单片机电子秒表。

秒表是一种常用的测试仪器,它可以用在百米赛跑等需要精确计时的地方,为人们的生活提供了很大的方便。

该单片机电子秒表布置合理,全部器件分布在7*9cm洞洞板上,看起来小巧精简。

采用的是单片机内部定时/计数器计时,走时非常精确而且不易出错。

0.56英寸的四位数码管发出红光,可以直观地显示时间。

一个控制按键就可以控制秒表的计数与停止,按一下控制键,秒表工作状态就由计时变为计时变为停止或停止变为计时,按一下清零键就可以清零,操作非常简单。

由于是四位数码管,它的计时周期为100秒,显示满刻度为99:99秒,从左往右数共四位,前两位显示整数部分,后两位显示小数部分,中间两个个秒闪灯(秒闪灯一直亮)。

关键词:秒表,51单片机,C语言一、设计任务与要求 (18)1.1 设计任务 (18)1.2 设计要求 (18)二、方案总体设计 (19)2.1 方案一 (19)2.2 方案二 (19)2.3 系统采用方案 (19)三、硬件设计 (21)3.1 单片机最小系统 (21)3.2 数码管显示模块 (21)3.3 系统电源 (22)3.4 整体电路 (22)四、软件设计 (24)4.1 keil软件介绍 (24)4.2 系统程序流程 (24)五、仿真与实现 (27)5.1 proteus软件介绍 (27)5.2 仿真过程 (27)5.3 实物制作与调试 (29)5.4 使用说明 (30)六、总结 (32)6.1设计总结 (32)6.2经验总结 (20)七、参考文献 (21)一、设计任务与要求1.1 设计任务1).对更多小器件的了解2).巩固51单片机和C语言的知识,熟悉单片机和C语言的实际操作运用3).掌握仿真软件的运用和原理图的绘制4).加深焊接的技巧,提高焊接的能力5).熟悉调试方法和技巧,提高解决实际问题的能力6).熟悉设计报告的编写过程1.2 设计要求1).清零键进行清零2).一个独立按键进行停止与运行的操作3).秒闪灯一直亮二、方案总体设计设计一个基于51单片机的秒表。

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验

51单片机中4个数码管的显示实验一、实验目的:1、看懂电路原理图,明白4个共阳数码管的编程方式。

2、看懂参考程序,学会使用扫描法来对4个数码管进行扫描显示。

学会使用定时器。

二、实验设备:51通用实验板一个,51仿真器一个,40针仿真头一个,12V电源一个,串口线一条。

三、实验电路原理图:四、实验内容:4个数码管一次显示4个数字,下一次加4进行显示,数字最大为9,到9再从0重新进行显示。

中间有一定的时间延时。

改变数据用定时器进行设置。

五、实验步骤:安实物图的形式把实验设备连接在一起。

六、参考程序:;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4个数码管的显示实验;使用70H,71H,72H,73H进行数码管显示数据存储。

75H进行定时器定时时间设置,发光二极管L1进行亮灭显示改变数据标志。

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SETTIM EQU 75H;定时时间长短设定ORG 0000HLJMP MAINORG 000BHLJMP TIM0;定时器0中断ORG 0030HMAIN: ;主程序MOV SP,#07HMOV SETTIM ,#00HLCALL INIT;初始化数据MOV TMOD,#01H;设值定时器0MOV TH0,#00H;定时初值MOV TL0,#00HSETB EA;开总中断SETB ET0;开中断SETB TR0;开始定时器STAR:LCALL DISPLJMP STAR;****************************************;显示子程序DISP: MOV R0,#0FEHMOV R1,#70HDISP1:MOV A,R0MOV P2,AMOV A,@R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P0,ALCALL DLYSINC R1MOV A,R0RL AMOV R0,AJB ACC.4,DISP1RET;***************************************;定时器0中断程序TIM0:CLR TR0CLR EAMOV A,SETTIMINC ACJNE A,#9,TM1LCALL CHGMOV A,#00HCPL P1.0;定时器运行标志,使L1灯不断闪动TM1: MOV SETTIM,AMOV TH0,#00HMOV TL0,#00HSETB EASETB TR0RETI;****************************改变要显示的值CHG:MOV R0,#70HMOV R3,#04HCH1:MOV A,@R0INC ACJNE A,#0AH,CH2MOV A,#00HCH2:MOV @R0,AINC R0DJNZ R3,CH1RET;********************************************;初始化程序INIT: ;初始化70H---73H中的数据,使用R0,R1,R3MOV R0,#00H;数据初值MOV R3,#04HMOV R1,#70H;4个数码管数据存储地址IN0:MOV A,R0MOV @R1,AINC R0INC R1DJNZ R3,IN0RET;*****************************************;延时程序DLYS: MOV R6,#5DLYS0:MOV R5,#150DJNZ R5,$DJNZ R6,DLYS0RET;*****************************************;数据表TAB:DB 0C0H,0F9H,0A4H,0B0H; 0,1,2,3DB 99H,92H,82H,0F8H;?,5,6,7DB 80H,90H,88H,83H;?,9,A,BDB 0C6H,0A1H,86H,8EH;C,D,E,FDB 8CH,89H,07fh,0bFH;P,H,.,-11001011END七、思考:修改一下程序,使用定时器2进行定时改变数据进显示。

c51单片机外接四个数码管时钟显示汇编

c51单片机外接四个数码管时钟显示汇编

;p0端口接数码显示p0.0-a.....p0.7-h;p1.0-p1.3接位选p1.0-第4个数码管.....p1.3-第1个;p2.0-p2.3接列...p2.4-p2.6接行qq equ 26hqq1 equ 28hx equ 30Hy equ 32Hz0 equ 34H ;数码显示最高位z1 equ 36H ; 数码显示次高位key equ P2 ;键盘控制key1 equ p3.2 ;时分调整控制键org 0000hajmp mainorg 000bhljmp td0org 0100hmain:mov tmod,#01h ;初始化mov tl0,0b0hmov th0,3chsetb easetb et0mov r0,#00mov r1,#00mov r2,#00mov r3,#00mov r4,#00mov r5,#00mov r6,#00mov r7,#00mov x,#00mov y,#00mov z0,#00mov z1,#00mov dptr,#tabsetb tr0;---------------------------------------main1:call a1 ;判断是否有键按下,,jz main2 ;无键按下,跳main2,call b1 ;有键按下,扫描按键确定哪一个被按下,call c0 ;把对应按键设置键码,main2:jnb key1,guangljmp main4guang:call delayjnb key1,guang1ljmp main4guang1:inc r7jnb key1,$main4:call xianshicjne r0,#20,main1 ;一秒定时mov r0,#00cpl p3.0inc r5cjne r5,#60,main1 ;秒mov r5,#00inc r1cjne r1,#10,main1 ;分个位mov r1,#00inc r2cjne r2,#6,main1 ;分十位mov r2,#00inc r3cjne r6,#1,main3cjne r3,#2,main1 ;时十位mov r3,#00mov r4,#00ljmp main1main3:cjne r3,#10,main1 ;时个位mov r3,#00inc r4inc r6ljmp main1 ;主程序循环;----------------------------------------------------- a1:mov key,#0fH ;判断键按下mov a ,keyanl a ,#0fhcjne a,#0fh,a2 ;有键按下跳转mov a,#0 ;无键按下跳转a2:retb1:mov b,#7fh ;判断哪一个键b2:mov a,brr amov b,amov p2,amov a,p2 ;依次判断哪一行anl a,#0fhcjne a,#0fh,B3ajmp b2b3:mov a,key ;把P1的值移出retc0:mov b,key ;处理行数据从下往上为X1,X2,X3.mov a,keyanl a,#0f0hc1:cjne a,#0e0h,c2mov x,#1c2:cjne a,#0d0h,c3mov x,#2c3:cjne a,#0b0h,d0mov x,#3d0:mov a,B ;处理列数据从右往左为Y1,Y2,Y3,Y4 anl a,#0fhd1:cjne a,#0eh,d2mov y,#1d2:cjne a,#0dh,d3mov y,#2d3:cjne a,#0bh,d4mov y,#3d4:cjne a,#7h ,e1mov y,#4e1:dec x ;键码设置mov a,xmov b,#4mul abadd a,yclr cycjne a,#10,e2e2:jc e3mov b,#10div abmov z0,amov z1,bajmp e4e3:mov z0,acjne r7,#0,dier ;当r7=0时调分针个位mov r1,z0dier:cjne r7,#1,dier1 ;当r7=1时调分针十位mov r2,z0dier1:cjne r7,#2,dier2 ;当r7=2时调时针个位mov r3,z0dier2:cjne r7,#3,dier3 ;当r7=3时调时针十位mov r4,z0dier3:cjne r7,#4,e4mov r7,#00e4:ret; --------------------------------------------------------------------- xianshi:clr p1.3 ;第一个数码管显示mov a,r4movc a,@a+dptrmov p0,acall delaysetb p1.3mov dptr,#tab1 ;第二个数码管显示clr p1.2mov a,r3movc a,@a+dptrmov p0,acall delaysetb p1.2mov dptr,#tab ;第三个数码管显示clr p1.1mov a,r2movc a,@a+dptrmov p0,acall delaysetb p1.1clr p1.0 ;第四个数码管显示mov a,r1movc a,@a+dptrmov p0,acall delaysetb p1.0ret; -------------------------------------------------------- delay: ;延时程序mov qq,#10mov qq1,#10del:djnz qq,deldjnz qq1,delret;定时中断td0:inc r0mov tl0,0b0hmov th0,3chretitab: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h tab1: db 40h,79h,24h,30h,19h,12h,02h,78h,00h,10h end。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

原理图:
源程序:
/*************************************************************标题:定时器中断精确到00.01的秒表
效果:能清零重新开始,暂停,继续计时,能精确到0.01秒作者:皖绩小挺
说明:使用12M晶振,四位数码管,3个按键
****************************************************************/ #include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uint temp,tt,qian,bai,shi,ge;
sbit smg_q=P1^0;
sbit smg_b=P1^1;
sbit smg_s=P1^2;
sbit smg_g=P1^3;
sbit key1 = P3^7;
sbit key2 = P3^6;
sbit key3 = P3^5;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
uchar code table1[]={0x40,0x79,0x24,0x30,0x19,
0x12,0x02,0x78,0x00,0x10}; //带小数点
void keyscan();
void display(uint shi,uint ge);
void delay(uint z);
void init();
/**************************************************************
主函数
******************************************************************/ void main()
{
init();//初始化子程序
while(1)
{
if(tt==1)
{
tt=0;
temp++;
if(temp==10000)
{
temp=0;
}
qian=temp/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;
}
keyscan();
display(shi,ge);
}
}
/*********************************************************************
延时
***********************************************************************/ void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/*********************************************************************
按键控制
***********************************************************************/ void keyscan()
{
if(key1==0) //清零并重新开始计时
{
temp=0;
TR0=1;
}
if(key2==0) //暂停计时
{
TR0=0;
}
if(key3==0) //继续计时
{
TR0=1;
}
}
/*********************************************************************
显示
***********************************************************************/ void display(uint shi,uint ge)
{
smg_q=0;
P0=table[qian];
delay(1);
smg_q=1;
P0=0xff;
smg_b=0;
P0=table1[bai];
delay(1);
smg_b=1;
P0=0xff;
smg_s=0;
P0=table[shi];
delay(1);
smg_s=1;
P0=0xff;
smg_g=0;
P0=table[ge];
delay(1);
smg_g=1;
P0=0xff;
}
/*********************************************************************初始化
***********************************************************************/ void init()
{
smg_q=1;
smg_b=1;
smg_s=1;
smg_g=1;
temp=0;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
/*********************************************************************中断
***********************************************************************/ void t0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
}
如有侵权请联系告知删除,感谢你们的配合!。

相关文档
最新文档