admin 管理员组文章数量: 1184232
2024年1月26日发(作者:伦勃朗光是什么测光)
1.要求:使用两个数码管,并从01开始,每隔1s数码管加1,一直显示到60.
C语言:
#include <>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6; //段选,申明锁存器1的锁存端
sbit wela=P2^7; //位选,申明锁存器2的锁存端
uchar code table[]= //共阴极数码管编码
{ 0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f } ;
void delayms(uint xms) //延时xms
{ uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar,uchar);
uchar num,num1=1,shi,ge=1; //赋初值
void main()
{TMOD=0x10; //设定时器1方式1定时50ms,循环20次实现1s延时
TH1=(65536-50000)/256; //装初值
TL1=(65536-50000)%256;
EA=1; //开总中断
ET1=1; //开定时器1中断
TR1=1; //启动定时器1
while(1) //在这里不停的对数码管动态扫描等待中断发生
{display(shi,ge);
}
}
void display(uchar shi,uchar ge) //显示子函数
{ dula=1;
P0=table[shi]; //送段选数据
dula=0;
P0=0xff; //消影,送位选数据前关闭所有显示,防止打开位选锁存时
wela=1; //原来段选数据通过位选锁存器造成混乱
P0=0xfe; //送位选数据
wela=0;
delayms(5); //延时
dula=1;
P0=table[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
}
void T1_time()interrupt 3
{
TH1=(65536-50000)/256; //重装初值
TL1=(65536-50000)%256;
num++;
if(num==20) //20次循环,50ms20次=1s
{ num=0; //到20次以后清零重新再计数20次
}
汇编: ORG 0000H
AJMP
AJMP
Main
//定时器0的中断入口地址
ZD
R4,#20
//循环20次来实现1s延时
//表头地址送给DPTR
ORG 000BH
ORG 0030H
MOV
MOV
MOV
MOV
MOV
SETB
SETB
SETB
num1++; //数码管显示加1
if(num1==61) //数码管显示到60后又从01开始
num1=1;
}
shi=num1/10; //把两位数分离后分别送数码管显示十位和个位
ge=num1%10;
Main:MOV R0,#1 //初始值从01开始
DPTR,#TABLE
TMOD,#01H //定时器0方式1定时50ms
TH0,#03CH //赋初值
TL0,#0B0H
EA
ET0
TR0
//开总中断
//开定时器0中断
//启动定时器0中断
LP1:MOV A,R0
MOV B,#10
DIV AB //A为整数B为余数
MOVC A,@A+DPTR
SETB //数码管显示十位
MOV P0,#0FEH
CLR
SETB
MOV P0,A
CLR
ACALL DELAY5MS
MOV A,B //数码管显示个位
MOVC A,@A+DPTR
SETB
MOV P0,#0FDH
CLR
SETB
MOV P0,A
CLR
ACALL
AJMP
DELAY5MS
LP1
//重新赋初值
//是否循环20次
ZD: MOV TH0,#03CH
MOV TL0,#0B0H
DJNZ R4,LP2
MOV R4,#20
INC R0
CJNE R0,#61,LP2
MOV R0,#01
LP2: RETI //中断返回
DELAY5MS: MOV R6,#5
LOP1: MOV R5,#250
LOP2: NOP
NOP
DJNZ R5,LOP2
DJNZ R6,LOP1
RET
TABLE:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //共阴极数码管编码
END
//延时5ms
版权声明:本文标题:数码管动态显示C语言和汇编程序 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1706202443a503958.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论