📄 dled.c
字号:
/**************************************************************
定时中断实现显示的程序
前面各位始终显示0,最后一位显示在0-9之间循环
***************************************************************/
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB};
uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,
0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};
uchar DispBuf[6]; //6字节的显示缓冲区
void Timer0() interrupt 1
{ uchar tmp;
static uchar Count; //计数器,显示程序通过它得知现正显示哪个数码管
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;//定时时间为3000个周期
tmp=BitTab[Count]; //根据当前的计数值取位值
P2=P2|0xfc; //P2与11111100B相或,将高6位置1
P2=P2&tmp; //P2与取出的位值相与,将某一位清零
tmp=DispBuf[Count]; //根据当前的计数值取显示缓冲待显示值
tmp=DispTab[tmp]; //取字形码
P0=tmp; //送出字形码
Count++; //计数值加1
if(Count==6) //如果计数值等于6,则让其回0
Count=0;
}
/*延时程序*/
void mDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
{;}
}
}
void main()
{ uchar Counter=0;
P1=0xff;
P0=0xff;
TMOD=0x01;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256; //定时时间为3000个周期
TR0=1; //T0开始运行
EA=1; //总中断允许
ET0=1; //T0中断允许
DispBuf[0]=0;
DispBuf[1]=0;
DispBuf[2]=0;
DispBuf[3]=0;
DispBuf[4]=0; //显示器前5位均为0
for(;;)
{ DispBuf[5]=Counter;
Counter++; //计数
if(Counter==10)
Counter=0;
mDelay(1000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -