一个汇编语言定时器t0,控制一个led数码管实现数字0~9循环显示,精确执行每一秒显示一个数字

作者&投稿:斐俭 (若有异议请与网页底部的电邮联系)
用单片机控制一个8段数码管,其循环显示数字0到9,每位数字显示时间为一秒,定时功能用单片机中断显示~


有一个一模一样的提问,好吧,俺再发布一次

给你一份我自己写的,利用四位数码管显示模拟时钟的程序吧,供你研究

另外,再给你一个一位数码管的,是你要求的那种

这两个都是利用单片机的定时器中断来产生秒信号的

下面这个是 四位数码管的,最下边的是一位数码管的,端口不一样的话,自己改下

/***************************************************************************/
#include
sbit p20=P3^7; sbit p21=P3^6; sbit led=P2^7;//按键及LED端口定义
sbit Axs=P1^3; sbit Bxs=P1^2; sbit Cxs=P1^1; sbit Dxs=P1^0;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
unsigned int h,m,s,t,n;
/***************************************************************************/
void YS(char hs)//延时函数
{char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}
/***************************************************************************/
void XS(int xh,int xm) //显示子函数
{
char d1,d2,d3,d4;
d1=(xh/1)%10; d2=(xh/10)%10;//分离小时
d3=(xm/1)%10; d4=(xm/10)%10;//分离分钟

P0=table[d1];Cxs=0;YS(10);Cxs=1;//小时个位
P0=table[d2];Dxs=0;YS(10);Dxs=1;//小时十位
P0=table[d3];Axs=0;YS(10);Axs=1;//分钟个位
P0=table[d4];Bxs=0;YS(10);Bxs=1;//分钟十位
P0=0x7f; P1=0xfd; YS(10); P1=0xff;//小数点
}
/***************************************************************************/
void main(void)
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化
while(1)//主循环
{
if(p20==0){YS(10);if(p20==0){h++;if(h>23){h=0;}}while(!p20){XS(h,m);}}
if(p21==0){YS(10);if(p21==0){m++;if(m>59){m=0;}}while(!p21){XS(h,m);}}
XS(h,m);//调用数码管显示函数
}
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;t++;
if(t>500){t=0;led=~led;}//LED闪烁
if(n>1000){n=0;s++;}//如果达到一秒,秒加一
if(s>59){s=0;m++;}//如果达到一分,分加一
if(m>59){m=0;h++;}//如果达到一小时,小时加一
if(h>23){h=0;}//如果达到24小时,小时清零
}
/***************************************************************************/


/***************************************************************************/
#include
sbit Axs=P1^3;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
unsigned int h,m,s,t,n;
/***************************************************************************/
void YS(char hs)//延时函数
{char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}
/***************************************************************************/
void main(void)
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;//定时器初始化
while(1)//主循环
{
P0=table[m];Axs=0;YS(10);Axs=1;//小时个位
}
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>1000){n=0;m++;}//如果达到一秒,秒加一
if(m>9){m=0;}//如果达到一小时,小时加一
}
/***************************************************************************/

/***************************************************************************/
#include //51通用头文件
sbit Axs=P1^0; ;//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管显示编码
void YS(char hs); void XS(int xm,int xs); void Time1(void);int n,s;//变量及函数声明
/***************************************************************************/
void main(void){Time1();while(1){XS(s);}}//主函数
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256; TL0=(65536-1000)%256; n++;
if(n>1000){n=0;s++; if(s>9){s=0;}}//变量累加,一秒加一次
}
/***************************************************************************/
void Time1(void)//定时器初始化
{
TH0=(65536-921)/256; TL0=(65536-921)%256;
TMOD=0x01; EA=1; ET0=1; TR0=1;
}
/***************************************************************************/
void XS(int xs) //数码管显示
{
P0=table[xs]; Axs=0; YS(10); Axs=1;//个位显示
}
/***************************************************************************/
void YS(char hs){char hk;for(;hs>0;hs--){for(hk=200;hk>0;hk--);}}//延时函数
/***************************************************************************/

端口使用略有不同,请自己修改下即可,若有不懂之处,尽请留言

     ORG   0000H
     JMP   BEGIN
     ORG 000BH
     LJMP T0ISR
     ORG 0030H
TABLE:      ; 共阴极数码管显示代码表
          DB    3FH,06H,5BH,4FH,66H ;01234
          DB    6DH,7DH,07H,7FH,6fh ;56789
;---------------------------------------
BEGIN:
    MOV TMOD,#01H
    MOV TH0,#HIGH(65536-5000)
    MOV TL0,#LOW(65536-5000)
    SETB TR0
    SETB ET0
    SETB EA
    MOV R2,#200
    CLR 00H
    MOV R3,#0
    SJMP $
T0ISR:
    CLR TR0
    MOV TH0,#HIGH(65536-5000)
    MOV TL0,#LOW(65536-5000)
    SETB TR0
    DJNZ R2,T01
    MOV R2,#200
    INC R3
    CJNE R3,#10,T01
    MOV R3,#0
T01:
    MOV DPTR,#TABLE
    MOV A,R3
    MOVC A,@A+DPTR
    CPL 00H
    JB 00H,T02
    MOV P2,#0FEH
    SJMP T03
T02:
    MOV P2,#0F7H
T03:
    MOV P0,A
T0E:
    RETI
    END



汇编语言中t命令与p命令的区别
t是单步执行,p是在循环处连续执行完该次循环。当执行call或int等调用其它子程序的指令时,P是等到子程序返回后中断,T是进入到子程序里面中断。p命令是执行循环、重复的字符串指令、软件中断或子例程;或通过任何其他指令跟踪。 指定第一个要执行指令的位置。如果不指定地址,则默认地址是在 CS:IP寄存...

写源程序。汇编语言
;时钟周期是晶振频率的倒数,而计数周期T是时钟周期的12倍,所以计数周期为1us。;使用定时器T0,工作在方式1,当定时为40ms时,计数初值为25536=63C0H;当定时为20ms;时,计数初值为45536=B1E0H。;程序段如下,使用定时器T0,查询方式完成:CLR P1.0;先输出40ms低电平 LOOP1:MOV TMOD,#01...

单片机汇编…如何控制定时计数汇编语言怎么表示?
1.MOV TMOD,#0\/让定时器工作在方式0,当然也可以选择1、2、3方式,就是定时的范围有些不同。2.MOV TH0,#3C\/定时器高位置值3.MOV TL0,#0B 0H\/低位置值,定时器等于3CB0=50000,4.SETB TR0\/开启定时器T0,前面2、3把值送到了T0,也可选择T1 ...

汇编语言中 p 和 t命令的区别请详细告诉我。
p和t是debug调试器的命令,并不是汇编语言的一部分。但是学习汇编语言必然要大量的使用debug调试器,并且大量的使用p和t。p是单步执行,但不执行中断内部的指令,也就是 step over,而t是调试到指令内部去,即trace into

汇编语言中t命令与p命令的区别
T是执行一个指令(有时是执行两条,就是那个mov ss,XXXX的那个,我知道的就这一个特例)P其实也是执行一条指令,但区别是在执行INT的时候会把这个INT整个的执行完毕,而不是跳转到这个中断程序去跟踪执行 举个例子:mov ah,002H mov dl,030H int 21H 都是这三条指令,如果用T命令,先会单步执行前两...

汇编语言中,p命令和t命令有什么区别?
在汇编语言程序调试的DEBUG环境中,有三个执行指令的命令:.T命令:单步执行,每次只执行一条代码语句,遇到子程序后进入子程序逐条执行指令;.P命令:类似T命令,若有子程序,直接执行完子程序全部指令而不是逐条执行指令,在遇到循环指令时,会直接执行至CX递减至0;.G命令:多步执行,可以跟地址和...

汇编语言编写单片机程序,怎样实现间隔相同的时间后,执行某一子程序...
用定时器和一个中间变量t t开始为0,定时结束后令其为1,子程序执行的条件为t=1,在子程序的最后加上t=0 关键是执行的条件的设置

若晶振主频为12MHz, 如何用定时器T0来测试频率为0.5MHz左右的方波周期...
8051单片机12M晶振,系统主频为1Mhz。与方波周期0.5MHz同数量级,不能采用简单脉冲宽度测量的方法。最好采用两个定时器,一个对下降沿或上升沿计数,溢出中断;另一个计时。计数溢出TOP可设置为N,设N个脉冲的时间为T。则F=N\/T。

...单元循环显示“0~59(要求定时器T0\/T1中断方式定时1s)汇编语言...
T10:MOV B,#10 DIV AB MOV 31H,A MOV 32H,B T1E:POP ACC RETI ;--- T0ISR:PUSH ACC CLR TR0 MOV TH0,#0F4H MOV TL0,#48H SETB TR0 MOV DPTR,#LEDTAB1 T000:MOV R0,#31H MOV A,SCANLED ADD A,R0 MOV R0,A MOV A,SCANLED JNZ T001 MOV P2,#02H SJMP T0DIS T001:...

求助:51单片机用内部定时器T0在方式1下,从P1.0输出周期为1ms的方波脉 ...
TMOD, #01H MOV IE, #82H ; 开 T0 中断 MOV TH0, #LOW T0MS ; 设置 500 uS 初值 MOV TL0, #HIGH T0MS SETB TR0 ; 开定时器 0 AJMP $ ; 原地等待 END

黄梅县13994295044: T0作定时器控制P1.0,谁帮我解释一下这个汇编程序!? -
隐素美迪: ORG 0000H ;入口定位LJMP MAIN ;转移到主程序ORG 000BH ;T0中断入口定位LJMP TIME0 ;转移到T0中断处理 MAIN: MOV SP,#60H ;置堆践MOV TMOD,#01 ;置T0工作方式MOV TH0,#0FBH ;置T0高倍初值MOVTL0,#90H ;置T...

黄梅县13994295044: 一个汇编语言定时器0控制数码管显示数字加1的程序,6个数码管左三个和右三个分别显示一个数从0开始加.
隐素美迪: #include#define uchar unsigned char sbit wela=p2^7; sbit dula=p2^6; uchar num; void main() { tmod=0x01; th0=(65536-50000)/256; tl0=(65536-50000)%256; ea=1; et0=1; tr0=1; while(1) { if(num==10) //亮 { wela=1; p0=0xfe; wela=0; dula=1; p0=0x4f;...

黄梅县13994295044: 使用单片机定时工作方式二实现秒定时的汇编语言程序? -
隐素美迪: 解:选用定时计数器T1工作与定时方式2,定时250us(fosc=12MHz)机器周期为 1us:定时器初值TC=6 所以:TH1=6,TL1=6 ORG 00H LJMP START ORG 1BH LJMP INT_T1 ORG 0100H START:MOV TMOD,#20H MOV TH1,#6H MOV TL1,#6H SETB ET1 SETB EA MOV R7,#200 MOV R6,#200 SETB TR1 SJMP $ INT_T0:DJNZ R7,T0_END MOV R7,#200 DJNZ R6,T0_END MOV R6,#200 CPL P1.0 ;P1.0每秒变化一次 T0_END:RETI

黄梅县13994295044: 定时器T0 T1控制条形LED 汇编 -
隐素美迪: 查询方式,同样可以做到多任务“并行”的,只是查询的方法要得当, 不要等到这个任务执行完了,才去查询下个任务是否应该执行, 当然各任务优先级别不同的时候例外. 看看下列程序,是否有帮助. ORG 0000HMOV 50H,#9MOV 51H,#...

黄梅县13994295044: 单片机汇编…如何控制定时计数汇编语言怎么表示?
隐素美迪: 单片机是选择“计数”功能,还是选择“定时”功能是由功能选择为C/T决定的,当C/T=1时,是计数功能;C/T=0时.是定时功能,GATE C/T M1 MO GATE C/T M1 MO 共8位,前四位是设置T1,后四位是设置T0,

黄梅县13994295044: 单片机汇编语言的定时器如何定义和调用使用, -
隐素美迪: 以51为例来讲,它有两个16位的定时器T0和T1, 可以通过写入TMOD 定时器/计数器模式控制寄存器数据来修改T0和T1的工作方式.可以通过写入T0,T1 写入初值来修改定时时间长短.定时器溢出后中断响应(要在中断控制寄存器设为允许),把你的中断服务子程序标号放在对应的T0,T1中断入口地址(定时器T0 000BH,定时器T1 001BH)处,用AJMP,JMP,LJMP等跳转指令转入,用RETI指令反回.

黄梅县13994295044: 定时器t0方式0产生占空比3:1方波,需要汇编语言程序 -
隐素美迪: 汇编程序如下: ORG 0000H MOV TMOD, #01H SETB TR0 L0: MOV A, #16 L1: MOV TH0, #HIGH(65536-62500) MOV TL0, #LOW(65536-62500) MOV C, ACC.3 ORL C, ACC.2 MOV P1.0, C JNB TF0, $ CLR TF0 DJNZ A, L1 SJMP L0 END在12MHz的频率,高、低电平:750ms:250ms.

黄梅县13994295044: 汇编语言:定时/计数器T0对外部脉冲计数,每100个脉冲中断,后转定时工作模式 -- 定时时长1ms,定时中断后有转计数模式连续循环/// X(初始值)=? -
隐素美迪: 计数模式:X=2^8-100=156 ;定时模式:X=2^8-(1ms*f/12)=FE0C (H) -----f=6mHZ 程序:ORG 0000HAJMP MAINORG 000BHAJMP IT0P MAIN:mov TMOD,#06H; 程序的初始化(TMOD IE TCON特殊功能寄存器的设置初始化)mov TL0,#...

黄梅县13994295044: 单片机汇编,用定时器产生脉冲 -
隐素美迪: ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-1000) MOV TL0,#LOW(65536-1000) SETB TR0 SETB ET0 SETB EA SJMP $T0...

黄梅县13994295044: 在汇编语言里定时器如何运用 -
隐素美迪: 汇编语言里,有 定时器 吗?楼主是问:软件延时程序 吧? ---------------- 程序,是人编写的,你怎么编,计算机就怎么执行.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网