单片机的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 ;判时是。

4位简易秒表的设计与制作

4位简易秒表的设计与制作

4位秒表的设计与制作一、任务要求该任务要求设计并制作一个4位秒表,秒表有启动、停止和清零功能,显示时间为0到9999秒。

该任务是综合应用数码管动态显示、单片机定时计数器和中断系统设计一个具有启动、停止、清零和校时功能的,能显示0到9999秒的4位秒表。

二、设计方案提示4位秒表的设计与1位秒表设计基本相似,所不同的是4位秒表要显示4位数据,而且要有校时功能,所以它只是综合了键盘、定时器、中断系统和动态显示的应用。

多位数显示器是用数码管显示4位十进制数,如果采用数码管静态显示方法,4个数码管要占用4个I/O端口,将占用单片机的所有I/O口而无法实现其他功能,因此不能用静态显示方法实现多位数据的显示。

如何用单片机控制数码管实现多位数据的现实,而又不占用太多的I/O口呢?这就要用到--------数码管的动态显示。

4位秒表设计与1位秒表的设计在原理上是一样的,不同的是:4位秒表要显示4位数,利用前面的数码管显示方法需要4个并行I/0口,而启动停止和清零要占用2个I/O线,89C52单片机只有4个并行I/O口,因此这种显示方法不能满足4位秒表的功能。

那么,如何实现4位秒表的设计呢?这就是该任务的关键------数码管动态显示技术三、系统硬件设计参考:4位秒表电路原理图如图3-21所示,有启动停止、清零和校时电路;数码管的位选端分别接P2口的P2.0~P2.3,段选端接P0口,74LS245是驱动电路。

图3-21 4位秒表电路原理图硬件电路设计图3-17 4位数据显示器的硬件原理图图3-17是4位数据显示器的硬件原理图,数码管是共阳连接,P2口输出显示段码,74LS245驱动数码管显示,CE是片选端,低电平有效;4位数码管的公共端分别由P3.0、P3.1、P3.2、P3.3控制。

四、系统软件设计参考程序//功能:4位数码管动态显示“1234”//函数名:delay50ms//函数功能:采用定时器1、工作方式1实现50ms延时,晶振频率12MHz//形式参数:无//返回值:无void delay50ms(){ TH1=0x3c; // 置定时器初值TL1=0xb0;TR1=1; // 启动定时器1while(!TF1); // 查询计数是否溢出,即定时到,TF1=1TF1=0; // 50ms定时时间到,将定时器溢出标志位TF1清零}void main() //主函数{unsigned char led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92}; //设置数字0~5字型码unsigned char i,w;TMOD=0x10; //设置定时器1工作方式1while(1) {w=0x01; //位选码初值为01Hfor(i=0;i<4;i++){P2=~w; //位选码取反后送位控制口P2口w<<=1; //位选码左移一位,选中下一位LEDP1=led[i]; //显示字型码送P1口delay50ms(); //延时50ms}}}4位秒表流程图如图3-22所示:包括主函数流程、定时器中断函数和显示函数流程图。

基于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单片机的秒表。

单片机 4位时钟数码管

单片机 4位时钟数码管

单片机控制4位时钟数码管的方法如下:
连接硬件:将4位数码管的共阳(或共阴)引脚连接到单片机的I/O口,连接数码管的段选引脚到单片机的另外4个I/O口。

同时,连接一个晶振和相关的电容电阻到单片机的时钟输入引脚和地。

设置引脚:在代码中定义每个数码管引脚对应的I/O口为输出模式,用于控制数码管的显示。

编写代码:使用单片机的定时器功能,通过编程计算出每个数码管显示的数字对应的段选编码,并在定时器中断服务程序中更新数码管的显示。

调试程序:将程序下载到单片机中,通过观察数码管的显示效果,调整程序中的参数或代码,以达到预期的显示效果。

需要注意的是,具体的实现方式可能因单片机的型号和数码管的类型而有所不同,需要根据实际情况进行相应的调整。

四位数码管秒闪烁可调时钟

四位数码管秒闪烁可调时钟
voiddelay500usunsignedcharunsignedcharvoidtimer0interrupttimer0中断服务子程序定时时间为50ms本程序加了10us的时间修正量tmod0x01
四位数码管可调时钟(1)
/****本程序中,晶振为12MHz, ****/
/****时间控制采用定时中断控制方式。****/
P21=1;
P22=1;
P23=1;
P0=table[hour/10];
P23=0;
delay500us(5);
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[hour%10];
P22=0;
delay500us(5);
P20=1;
P21=1;
P22=1;
P23=1;
P0=table[min/10];
void init();//初始化子程序声明
void delay500us(unsigned char X);//延时子程序声明
void display();//显示子程序声明
void display001();//显示子程序声明
void display002();//显示子程序声明
void keyscan();//按键识别子程序声明
while(key0==0)display();//等待按键释放。
}
if(key1==0)
{
display002();
if(key1==0)
{
min++;
if(min>=60)min=0;
while(key1==0)display002();
}
}

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. 单片机开发板
2. 4位数码管
3. 开始按钮
4. 停止按钮
5. 连接线
实验步骤:
1. 将4位数码管连接到单片机的相应引脚上。

2. 将开始按钮连接到单片机的外部中断引脚上。

3. 将停止按钮连接到单片机的外部中断引脚上。

4. 编写程序,设置外部中断的中断服务函数。

5. 在中断服务函数中实现计时功能,将计时结果显示在数码管上。

6. 在主函数中初始化单片机,开始计时。

7. 测试实验是否正常工作。

实验结果:
经过测试,单片机秒表实验正常工作。

当按下开始按钮时,数码管开始计时,实时显示计时结果。

当按下停止按钮时,数码管停止计时,并将计时结果保存下来。

实验总结:
通过本实验,我掌握了使用单片机设计秒表的方法和步骤,加深了对单片机的理解和应用。

同时,我还学会了使用外部中断进行计时,并将计时结果显示在数码管上。

这对于我今后的学习和实践有着重要的指导意义。

单片机的4位数码管秒表

单片机的4位数码管秒表

原理图:源程序:/*************************************************************标题:定时器中断精确到00.01的秒表效果:能清零重新开始,暂停,继续计时,能精确到0.01秒作者:皖绩小挺说明:使用12M晶振,四位数码管,3个按键****************************************************************/ #include<reg52.h>#define uint unsigned int#define uchar unsigned charuint 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++;}。

数字秒表设计(4位)

数字秒表设计(4位)

目录1 数字秒表方案设计与论证 (2)2 数字秒表总体设计 (2)3 电子秒表的工作原理 (4)3.1脉冲源电路 (4)3.2分频器电路 (4)3.3时间计数单元 (5)3.4码驱动及显示单元 (8)3.5元件列表 (9)4 调试 (10)5 电路测试及测试结果 (10)6 心得体会 (12)7 参考文献 (13)1 数字秒表方案设计与论证电子秒表的工作原理就是不断输出连续脉冲给加法计数器,而加法计数器通过译码器来显示它所记忆的脉冲周期个数。

1时钟发生器:利用石英震荡555定时器构成的多谐振荡器做时钟源,产生脉冲;2记数器:对时钟信号进行记数并进位,毫秒和秒之间10进制,秒和分之间60进制; 本设计采用二—五—十进制加法计数器74LS90构成电子秒表的计数单元,3译码器:对脉冲记数进行译码输出到显示单元中;4显示器:采用4片LED显示器把各位的数值显示出来,是秒表最终的输出,有分、秒、和毫秒位;74LS48是BCD码到七段码的显示译码器5控制器:控制电路是对秒表的工作状态(记时开始/暂停)进行控制的单元。

属低电平直接触发的触发器,有直接置位、复位的功能。

2数字秒表总体设计图 1 工作流程图:图图2 原理电路图3电子秒表的工作原理3.1脉冲源电路用555 实现多谐振荡,需要外接电阻R1,R2和电容C。

电路图如下:(a)(b)图3 构成多谐振荡器电路图4 555引脚图3.2分频器电路通常,数字钟的晶体振荡器输出频率较高,为了得到0.1Hz的秒信号输入,需要对振荡器的输出信号进行分频。

须设计一个五进制计数器,对频率为50HZ 的时钟脉冲进行五分频,在输出端QD 取得周期为0.1S 的矩形脉冲,作为时间计数单元的时钟输入。

用集成异步计数器74LS90 实现,电路图如下:(a) (b)图5 74ls90引脚图及构成五进制计数器3.3时间计数单元记数器74160、74ls192、74ls90等都能实现十进制记数,本设计采用二—五—十进制加法计数器74LS90构成电子秒表的计数单元,如图三所示,555定时器构成的多谐振荡器作为计数器1的时钟输入。

单片机课程设计实验报告 基于单片机的数字时钟 含完整实验代码..

单片机课程设计实验报告 基于单片机的数字时钟 含完整实验代码..

单片机课程设计报告基于单片机的数字时钟姓名:班级:学号:一、前言利用实验板上的4个LED数码管,设计带有闹铃、秒表功能的数字时钟。

功能要求:a)计时并显示(LED)。

由于实验板上只有4位数码管,可设计成显示“时分”和显示“分秒”并可切换。

b)时间调整功能。

利用4个独立按钮,实现时钟调整功能。

这4个按钮的功能为工作模式切换按钮(MODE),数字加(INC),数字减(DEC)和数字移位(SHITF)。

c)定闹功能。

利用4个独立按钮设定闹钟时间,时间到以蜂鸣器响、继电器动作作为闹铃。

d)秒表功能。

最小时间单位0.01秒。

二、硬件原理分析1.电源部分电源部份采用两种输入接口(如上图)。

a)外电源供电,采用2.1电源座,可接入电源DC5V,经单向保护D1接入开关S1。

b)USB供电,USB供电口输入电源也经D1单向保护,送到开关S1。

注:两路电源输入是并连的,因此只选择一路就可以了,以免出问题。

S1为板子工作电源开关,按下后接通电源,提供VCC给板子各功能电路。

电路采用两个滤波电容,给板子一个更加稳定的工作电源。

LED为电源的指示灯,通电后LED灯亮。

2.蜂鸣器蜂鸣器分为有源和无源两种,有源即两引脚有一个直流电源就可以长鸣,无源则需要一个1K左右的脉冲才可以蜂鸣,因此对于按键的提示音及报警蜂鸣使用有源来得方便。

有源也可以当无源使用,而无源则不能当有源使用,当然用有源蜂鸣器作音乐发声会失真厉害。

如上图:单片机P15输出高低电平经R21连接三极管B极,控制三极管的导通与截止,从而控制蜂鸣器的工作。

低电平时三极管导通,蜂鸣器得电蜂鸣,高电平时三极管截止,蜂鸣器失电关闭蜂鸣。

电路使用一个四位共阳型数码管,四个公共阳级由三极管放大电流来驱动,三极管由P10-P13控制开与关。

数码管的阴级由P0口经过电阻限流连接。

例如,要十位的数码管工作,P12输出0,使三极管Q12导通,8脚得电,当P0口相应位有输出0时,点亮相应的LED灯组合各种字符数字。

单片机60分钟倒计时秒表

单片机60分钟倒计时秒表

60分钟倒计时秒表功能:1.带有启动键Start,暂停键Pause,停止键Stop,复位键Reset;2.4位数码管显示分(两位)秒(两位);3.按启动键启动从60分开始倒计时,按暂停键暂停,显示保持原来计时时间,再次按启动键继续计时,按停止键停止计时,复位键复位,到零停止计时.4.按停止键后,可按中间的4个键,分别对应分的十位(2键),个位(4键),和秒的十位(5键),个位(9键),按动一下,相应的位增1,并保证时间的正确值,再按一次停止键,保存设置值,按其它键则放弃设置时间值,恢复原来的时间.电路图:计时器工作模式:编码(54H单元) 当前工作模式00H Reset01H Start02H Pause03H Stop主程序流程:主程序代码段:ORG 0000HLJMP MAINORG 000BHLJMP TIMER0ORG 1000HMAIN: ACALL INIT ;初始化定时器SETB EA ;开总中断SETB ET0 ;开定时器0中断MOV A, #03H ;设置8155的工作模式, PA, PB输出, PC输入.MOV DPTR, #7F00HMOVX @DPTR, ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZ INK1AJMP BEGININK1: ACALL DISACALL CLEARACALL CCSCANJNZ INK2AJMP BEGININK2: MOV R2, #7FH ;从最左边列开始扫描MOV R4, #00HCOLUM: MOV DPTR, #7F02HMOV A, R2MOVX @DPTR, AINC DPTRMOVX A, @DPTRJB ACC.2, LONEMOV A, #00HAJMP KCODELONE: JB ACC.1, NEXTMOV A, #04HKCODE: ADD A, R4ACALL PUTBUFKON: ACALL DISACALL CLEARACALL CCSCANJNZ KONNEXT: INC R4MOV A, R2JNB ACC.4, KERRRR AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR, #7F02HMOV A, #00HMOVX @DPTR, AINC DPTRMOVX A, @DPTRCPL AANL A, #03HRETCLEAR: MOV DPTR, #7F01HMOV A, #00HMOVX @DPTR, ARETINIT: MOV 53H, #06H ;分十位MOV 52H, #00H ;分个位MOV 51H, #00H ;秒十位MOV 50H, #00H ;秒个位MOV 54H, #00H ;存放当前工作模式, 00:Reset, 01 Start, 02 Pause, 03 StopMOV 55H, #0AH ;定时计数用, 定时器每次中断0.1s, 计数10次, 定时1sCLR TR0MOV TMOD, 01H ;定时器工作在方式1, 16位定时器MOV TH0, #3CHMOV TL0, #0B0HRETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A, #03HMOV DPTR, #7F00HMOVX @DPTR, AMOV R0, #50HMOV R3, #0EFHMOV A, 54HCJNE A, #03H, DIS0MOV R0, #60HDIS0: MOV A, R3AGAIN: MOV DPTR, #7F02HMOVX @DPTR, AMOV A, @R0MOV DTPR, DAT ASMOVC A, @A+DPTRMOV DPTR, #7F01HMOVX @DPTR, AACALL DL1MSINC R0MOV A, R3JNB ACC.0, OUTRL AMOV R3, AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRETDAT AS: DB 03FH, 06H, 05BH, 04FH, 066H, 06DH, 07DH DB 07H, 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71HDL1MS: MOV R7, #01HDL0: MOV R6, #0FFHDL1: DJNZ R6, DL1DJNZ R7, DL0RETPUTBUF: MOV R1, AJNZ CHKSTAR TACALL RESETFUNCSJMP GOBACKCHKSTAR T: CJNE R1, #03H, CHKPAUSEACALL STAR TFUNCSJMP GOBACKCHKPAUSE: CJNE R1, #04H, CHKSTOPACALL PAUSEFUNCSJMP GOBACKCHKSTOP: CJNE R1, #07H, CHKOTHERACALL STOPFUNCSJMP GOBACKCHKOTHER: ACALL OTHERFUNCGOBACK: RETRESETFUNC: MOV R0, 54HCJNE R0, #00H, RESET0RETCJNE R0, #01H, RESET0RETRESET0: ACALL INITMOV 54H, #00HRETSTAR TFUNC: MOV R0, 54HCJNE R0, #01H, STAR T0RETSTAR T0: MOV 54H, #00HSETB TR0RETPAUSEFUNC: MOV R0, 54HCJNE R0, #01H, PAUSE0CLR TR0MOV 54H, #02HSJMP PAUSE1PAUSE0: CJNE R0, #02H, PAUSE1SETB TR0MOV 54H, #01HPAUSE1: RETSTOPFUNC: MOV R0, 54HCJNE R0, #03H, STOP0MOV 54H, #02HMOV R0, #50HMOV R1, #60HSTOP1: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R0, #54H, STOP1RETSTOP0: CLR TR0MOV 54H, #03HMOV R0, #60HMOV R1, #50HSTOP2: MOV A, @R1MOV @R0, AINC R0INC R1CJNE R1, #54H, STOP2RETOTHERFUNC: MOV R0, 54HCJNE R0, #03H, OTHER0CJNE R1, #01H, OTHER1MOV R0, #63HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER1: CJNE R1, #02H, OTHER2MOV R0, #62HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER2: CJNE R1, #05H, OTHER3MOV R0, #61HINC @R0CJNE @R0, #06H, OTHER0MOV @R0, #00HSJMP OTHER0OTHER3: CJNE R1, #06H, OTHER0MOV R0, #60HINC @R0CJNE @R0, #0AH, OTHER0MOV @R0, #00HSJMP OTHER0OTHER0: RET;使用定时器0, 工作模式1, 定时0.1s, 晶振频率为6MHz;定时器初值X = 65536 –50000 = 15536 = 3CB0HTIMER0: MOV TH0, #3CHMOV TL0, #0B0HDJNZ 55H, EXIT0 ;判断是否已定时中断10, 即1秒MOV 55H, #0AHMOV R0, #50HGOON0: DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #05HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0MOV @R0, #09HINC R0DEC @R0CJNE @R0, #0FFH, EXIT0 ; 倒计时结束, 停止计时, 显示全”0”ACALL INITMOV 53H, #00HMOV 54H, #03HEXIT0: RET。

51单片机4位数码管秒表代码

51单片机4位数码管秒表代码

主题:51单片机4位数码管秒表代码内容:1. 介绍51单片机51单片机是一种通用的单片机系列,广泛应用于各种电子设备中。

它具有稳定性好、成本低、易于编程等优点,因此备受电子爱好者和专业工程师的青睐。

2. 4位数码管秒表4位数码管秒表是一种常见的电子计时器,通过LED数码管显示出当前的时间,可以用于各种计时应用,比如比赛计时、实验计时等。

3. 代码编写以下是一段简单的51单片机4位数码管秒表代码:```c#include <reg52.h>#include <intrins.h>// 数码管位选端口sbit wei1 = P2^2;sbit wei2 = P2^3;sbit wei3 = P2^4;sbit wei4 = P2^5;// 数码管显示段选端口sbit se2 = P0^2;sbit se1 = P0^3;sbit se4 = P0^4;sbit se3 = P0^5;unsigned char code smgduan[17] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; // 显示0~9,A,b,C,d,E,F,无的值void delay(unsigned int i) { // 延时while(i--);}void display(unsigned char *tab) { // 数码管显示 unsigned char i;for(i=0; i<7; i++) {P0=0; // 清除段选,以选中所显示的数码管 switch(i) { //确定位选case(0):wei1=0;wei2=wei3=wei4=1;break;case(1):wei2=0;wei1=wei3=wei4=1;break;case(2):wei3=0;wei1=wei2=wei4=1;break;case(3):wei4=0;wei1=wei2=wei3=1;break;default:break;}P0=tab[i]; //段码输出delay(5); // 数码管微秒级延迟}}void m本人n() {unsigned char a=0,b=0,c=0,d=0; //时钟的4位数据 unsigned int i=0;wei1=wei2=wei3=wei4=1; //段选、位选初始化while(1) {a++; // 微秒级的计数if(a==100) { //达到100a=0; b++; //b加1if(b==60) { //当b=60时b=0; c++; //c加1if(c==60) { //当c=60时c=0; d++; //d加1if(d==24) { //当d=24时d=0; //归零}}}}display(smgduan+d10); //显示个秒wei1=1;wei2=wei3=wei4=0; //位选delay(500); //延时display(smgduan+c/10+10); //显示十秒wei2=1;wei1=wei3=wei4=0; //位选delay(500); //延时display(smgduan+b10); //显示个分wei3=1;wei1=wei2=wei4=0; //位选delay(500); //延时display(smgduan+b/10+10); //显示十分wei4=1;wei1=wei2=wei3=0; //位选delay(500); //延时if(i++==200) { //当i=200时i=0;}}}```4. 代码分析该代码通过对51单片机的引脚进行控制,实现了4位数码管秒表的计时功能。

4位单片机数字钟电子钟制作

4位单片机数字钟电子钟制作

1
PCB
专用 PCB
1
21
4 位数字电子钟调试说明
代码(冒号左边两 位,按 S1 加 1)
功能名称
01秒显示与调整
调位试,内按容S(2 加冒号1)右边两说明
按 S2 秒加 1
可以作为秒表使用
02走时分钟调整
走时分钟调整
03走时小时调整
走时小时调整
走时小时调整
04整点报时设置调整
05时间快慢调整 06第 1 路闹铃分钟调整 07第 1 路闹铃小时调整 08第 2 路闹铃分钟调整 09第 2 路闹铃小时调整
元件清单如下:
元件名称
规格型号
瓷片电容
30P
瓷片电容
104
电解电容
10uF/16-50V
电解电容
220uF/10V
四位绿色阴数码管 ORS-5463BG
20P IC 座
DIP 20
写入程序的芯片 STC11F02
12mm 电磁无源蜂鸣

12RT04CC
9P 排阻
200-
0 为所有整点报时,1
为 7-22 点报时,2 为
不整点报时
有 1-5 档,默认 2 档,
数字越大走时越快
第 1 路闹铃分钟显示
并设定
第 1 路闹铃小时显示
并设定
第 2 路闹铃分钟显示
并设定
第 2 路闹铃小时显示 并设定
此状态后进入正常走时
1/4W 电阻
10K
编号 C1, C2 C5 C3 C4 DS IC1 IC1
数量 2 1 1 1 1 1 1
LS1
1
PR1
1
Q1
1
R1, R2, R3, 4 R4

单片机数码管秒表

单片机数码管秒表

单片机数码管秒表 Company number:【0089WT-8898YT-W8CCB-BUUT-202108】《电子系统创新设计与实践》课程期末论文(2016——2017年度第一期)专业软件工程班级15F学号7姓名李国二〇一六年十二月摘要近年来随着科学技术的发展,单片机的应用正在不断走下面还深入。

本文简单阐述了基于单片机的数字秒表的的设计。

本设计的主要特点是计时精度达到秒,是各种竞赛的必要设备之一。

本设计的数字秒表采用AT89C51单片机为主要器件,利用其定时器的原理,结合显示电路、LED数码管以及外部外部中断电路来设计计时器。

将软硬件结合起来,使得系统能实现0~秒的计时,计时精度位秒。

实验目的:数字秒表具有显示直观、读取方便、精度高等优点,在计时中广泛应用。

本设计中用单片机和数码管组成数字秒表力求结构简单。

设计中包括硬件电路的设计和系统程序的设计。

硬件电路主要有主控制器、控制按钮与显示电路组成。

主控制器采用单片机AT89C51,显示电路采用四位共阴极数码管显示计时时间。

本设计利用AT89C51单片机的定时器,使其能精确计时。

利用中断系统使其实现启动和暂停的功能,P0口输出段码数据,~连上译码器作为位选,和接口的两个按钮分别实现启动和暂停功能。

设计的基本要求是正确性。

计时器采用T0中断实现,定时溢出中断周期为1ms,当溢出中断后向CPU发出溢出中断请求,每发出10次中断请求就对10ms位(即最后一位)加一,达到100次就对100ms位加一,以此类推,直到为止。

再看按键的处理。

两个按键采用中断的方法,设置外部中断0和外部中断1位脉冲边沿触发方式,这样一来每当按键按下时便会触发中断,从而实现启动和暂停。

设计计时器的流程:程序源代码如下:#include<>Unsigned int datatable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 1系列单片机开发宝典。

单片机技术简易秒表教程

单片机技术简易秒表教程
一、定时器初始化的主要内容 1. 选择工作方式。即通过方式寄存器TMOD进行设置。 例如:欲设置T0为定时方式1,TMOD状态应置为:
T1
T0
指令:MOV TMOD,#01H;则可以使T0工作在方式1状态
若要设置T1为计数方式1,指令是怎样?
注意:TMOD不能位寻址。
《单片机技术》项目化课程
2. 给定时器初赋。即把初值装入TH0、TL0或TH1、TL1。
2、Our destiny offers not only the cup of despair, but the chalice of opportunity. (Richard Nixon, American President )命运给予我们的不是失望之酒,而是机会之杯。二〇二一年六月十七日2021年6月17日星期四 3、Patience is bitter, but its fruit is sweet. (Jean Jacques Rousseau , French thinker)忍耐是痛苦的,但它的果实是甜蜜的。10:516.17.202110:516.17.202110:5110:51:196.17.202110:516.17.2021 4、All that you do, do with your might; things done by halves are never done right. ----R.H. Stoddard, American poet做一切事都应尽力而为,半途而废永远不行6.17.20216.17.202110:5110:5110:51:1910:51:19 5、You have to believe in yourself. That's the secret of success. ----Charles Chaplin人必须相信自己,这是成功的秘诀。-Thursday, June 17, 2021June 21Thursday, June 17, 20216/17/2021

4位共阳数码管遥控时钟

4位共阳数码管遥控时钟
uchar naofs,naofg,naofen; //闹钟分钟 分钟十位和个位
uchar ds,dss,dsg;//继电器小时 小时十位和个位
uchar df,dfs,dfg;//继电器分钟 分钟十位和个位
//设置标志部分
uchar mode=0;//菜单
uchar yiwei=1;
dfs=df/10;//分十位
dfg=df%10;//分个位
dss=ds/10;//时十位
dsg=ds%10;//时个位
P0=table0[dfs];//分十位
P2=table2[3];
delay(10);
naofen=30;
ds=00;
df=30;
while(1)
{ if(!p30) //判断串口是不是有数据
{
iap=0x60; //执行自动下载的命令
}
jishi();//自动走时
TL0=(65535-50000)%256;
int_num++;
}
//定时器初始化函数
void inter_init()
{
EA=1; ///开总中断
ET0=1; //打开定时器T0
TMOD=0x01; //工作方式1
void de(z)//自己用的延迟
{
g n,m;
for(n=z;n>0;n--)
for(m=110;m>0;m--);
}
//初始化T0函数
void time0(void) interrupt 1 // 定时器T0服务子程序
{
TH0=(65535-50000)/256;

四位秒表程序

四位秒表程序

重赏之下心有勇夫^_^;汇编时钟程序。

4位共阳管。

P0口段码,P2.0~P2.3位码。

显示毫秒和秒。

三个按键一个控制时钟开始走,一个控制暂停和继续。

一个按键清0;12M晶振 2011 04 20 调试完成STRT EQU P3.2STP EQU P3.3CLRR EQU P3.5ORG 00HSJMP MAINORG 0BHAJMP T0INTORG 30HMAIN: MOV SP,#60HMOV R3,#10MOV R4,#20MOV TMOD,#01H ;定时器T0工作方式1MOV TH0,#0D8H ;10MS定时初值MOV TL0,#0F0HSETB ET0SETB EAk1: LCALL DISPJB STRT,K2LCALL DISPJNB STRT,$-3AJMP STARTk2: LCALL DISPJB STP,K3LCALL DISPJNB STP,$-3AJMP SSK3: LCALL DISPJB CLRR,K1LCALL DISPJNB CLRR,$-3AJMP CLEARSTART: SETB TR0CLR F0 ;如无此条,暂停后,不是按继续键,而是按开始键继续走时,下次按暂停键时,不能暂停AJMP K1SS: CPL F0JNB F0,STARTSTOP: CLR TR0AJMP K2CLEAR: CLR TR0MOV A,#0MOV 20H,AMOV 21H,AMOV 22H,AMOV 23H,AMOV 24H,AMOV 25H,AAJMP K3DISP: MOV A,24HMOV B,#10DIV ABMOV 20H,B ;余数(MS个位数)MOV 21H,A ;商(MS十位数)MOV A,25HMOV B,#10DIV ABMOV 22H,B ;余数(S个位数)MOV 23H,A ;商(S十位数)MOV A,20H ;MS个位ACALL SEG7MOV P0,ASETB P2.4ACALL DLYCLR P2.4MOV A,21H ;MS十位ACALL SEG7MOV P0,ASETB P2.5ACALL DLYCLR P2.5MOV A,22H ;S个位ACALL SEG7MOV P0,ACLR P0.7SETB P2.6ACALL DLYCLR P2.6MOV A,23H ;S十位ACALL SEG7MOV P0,ASETB P2.7ACALL DLYCLR P2.7RETT0INT: MOV TH0,#0D8H MOV TL0,#0F0HINC 24HMOV A,24HCJNE A,#99,T0INTRMOV 24H,#0INC 25HMOV A,25HCJNE A,#60,T0INTRMOV 25H,#0T0INTR: RETIDLY: MOV R7,#10D1: MOV R6,#50DJNZ R6,$DJNZ R7,D1RETSEG7: INC AMOVC A,@A+PCRETDB 0C0H;0DB 0F9H;1DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9 END2STRT EQU P1.0CLRR EQU P1.1ORG 00HAJMP MAINORG 0BHAJMP T0INT0ORG 30HMAIN:MOV SP,#60HMOV R4,#20MOV TMOD,#01HMOV TH0,#3CH;12M晶振时定时初值取#3CB0H,还可细调如TL=#0B7H,可以更准MOV TL0,#0B0HSETB ET0SETB EAk1:ACALL DISP ;开始/暂停键JB STRT,K2ACALL DISPJNB STRT,$-2AJMP K1K2:JB CLRR,K1ACALL DISPJNB CLRR,$-2MOV A,#0CLR TR0MOV 26H,AMOV 27H,AMOV 28H,AAJMP K2DISP:MOV A,26HMOV B,#10DIV ABMOV 20H,B ;余数(百分秒位数)MOV 21H,A ;商(十分秒位数)MOV A,27HMOV B,#10DIV ABMOV 22H,B ;余数(秒个位数)MOV 23H,A ;商(秒十位数)MOV A,28HMOV B,#10DIV ABMOV 24H,B ;余数(分个位数)MOV 25H,A ;商(分十位数)MOV A,20H ;百分秒?ACALL SEG7MOV P0,ACLR P2.3ACALL DLYSETB P2.3MOV A,21H ;十分秒ACALL SEG7MOV P0,AACALL DLYSETB P2.2DISP1:MOV A,22H ;秒个位ACALL SEG7MOV P0,ASETB P0.7CLR P2.1ACALL DLYSETB P2.1MOV A,23H ;秒十位ACALL SEG7MOV P0,ACLR P2.0ACALL DLYSETB P2.0RETT0INT0:MOV TH0,#3CH; ;定时中断子程序。

C51单片机秒表计时(C语言)

C51单片机秒表计时(C语言)

南开大学滨海学院C51嵌入式软件设计(C语言)题目:计时秒表●功能描述:本设计实现在99秒内的秒表计时,一个按键实现开始、暂停、复位。

●原理概述:P1接四位七段数码管,P3.2接一按键产生外部中断0,P3.4-P3.7控制扫描显示。

计时使用定时器0产生10ms 中断累计。

按键不同次序决定了对应的控制功能,因为第一次按键必定为开始计时,所以第二次按键判断为暂停,依次第三次为置零。

主程序调用显示程序,显示程序实时显示计时时间。

●效果显示●图一(电路总图)●图二(效果显示)注:第四位显示为单位:S ●程序清单#include<reg51.h>#include<stdio.h>unsigned char Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F }; sbit P37=P3^7;sbit P36=P3^6;sbit P35=P3^5;sbit P34=P3^4;unsigned int a=0,cout=0,mm=0;x,y,p,q;/*********延时*********************/void delay(){int g;for(g=70;g>0;g--);}/*********显示程序*****************/void display(){x=cout/10; //秒十位P34=0;P1=Tab[x]; delay();P34=1;y=cout-x*10; //秒各位P35=0;P1=Tab[y]; delay();P1=0x80; delay();P35=1;p=mm/10; //ms的高位P36=0;P1=Tab[p];delay();P36=1;P37=0; //显示单位:SP1=Tab[5]; delay();P37=1;}/*********主程序********************/ void main(){IT0=1;EX0=1;ET0=1;TMOD=0x01;TH0=0xD8; //装初值,10msTL0=0xF0;EA=1;while(1){ display(); };}/*********外部按键中断子程序*********/ void int0 ()interrupt 0{if(a==0) //开始计时{ TR0=1;mm=0;a++; }else if(a==1) //暂停计时{ TR0=0;a++;}else //置零{ a=0;mm=0;cout=0;}}/*********定时器子程序****************/ void time0() interrupt 1{TH0=0xD8;TL0=0xF0;mm++;if(mm==80) //考虑其它损耗,调整后约为1S{ cout++;mm=0;}}。

  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++;
}。

相关文档
最新文档