位选 |
关键锁存器 |
按键(消抖)区 |
小灯泡D1用于指示SW1是否被检测到按下(计数器设置为1次就溢出,在中断中计数num+1的同时对小灯泡连接的端口取反用于指示)。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define SEGPORT P2 //显示字形
#define BITPORT P0 //控制位选
sbit LED = P1^7;
sbit en = P3^0; //控制74LS373使能位,用于打开/关闭锁存。
unsigned int num = 0;
unsigned char code ledTab[]=
{
0x3F,0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
}; //共阴极的字码
void Delay_Us(unsigned int us)
{
unsigned char i;
while(us--)
{
for(i=0;i<100;i++);
}
} //延时函数
void DynamicLed(unsigned char Ligh) //已定最高显示三位数,设置为数码管右边三位亮
{
Delay_Us(Ligh);
SEGPORT = 0x00;
BITPORT = 0Xfe;
SEGPORT = ledTab[num%10]; //显示个位
en = 0; //关闭锁存
Delay_Us(Ligh); //延时,否则失效,数码管会闪烁并且数值会交替变化(非故障)
en = 1; //打开锁存
Delay_Us(Ligh);
BITPORT = 0Xfd;
SEGPORT = ledTab[num/10%10]; //显示十位
Delay_Us(Ligh);
BITPORT = 0Xfb;
SEGPORT = ledTab[num/100%10]; //显示百位
}
void main()
{
unsigned char Counter = 0;
TMOD = 0X60;
TH1 = 255;
TL1 = 255;
LED = 0;
EA = 1;
ET1 = 1;
TR1 = 1;
while(1)
{
DynamicLed(1);
}
}
void timer1() interrupt 3
{
LED = ~LED;
num = num + 1;
}
标签:BLUE,char,CC,MPX8,Ligh,unsigned,Us,Delay,num From: https://www.cnblogs.com/stysan/p/17448622.html