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次循环,50ms20次=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


本文标签: 数码管 显示 位选 中断