📄 51
字号:
#include <reg51.h> // 引用标准库的头文件
#define uchar unsigned char
#define uint unsigned int
#define DIGPORT P2 // 定义字位口
#define WORDPORT P0 // 定义字型口
#define fosc 12 // 晶振频率
#define time0 2000 // 定时2000us
uchar digbit; // 字位
uchar buf[4]; // 字型码缓冲区
uint idata time0_0; // 临时变量,用于计算定时
void disp(void); // 显示函数
const uchar tab[]={ /* 根据共阳极字型编码表获取0~9,A~B字型代码 */
0xc0,0xf9,0x24,0x30,//0~3
0x19,0x12,0x02,0x78,//4~7
0x00,0x18,0x08,0x03,//8~b
0x46,0x21,0x06,0x0e,//c~f
0xff//mie
};
/* 4位8段数码管分别动态显示“0123”, */
void main()
{
uchar k;
DIGPORT=0xff; // 关闭显示
TMOD=0x01; // T0工作方式1
/* 2ms 定时设置 */
time0_0 = 65536-time0*fosc/12;
TH0=(time0_0/256);
TL0=(time0_0%256);
TR0=1;
ET0=1;
EA=1;
digbit=0xfe; // 从第一位数码管开始
for(k=0;k<=3;k++)
{
buf[k]=k;
}
for(;;);
}
/* 定时器0中断服务子程序,定时动态扫描显示 */
void time0_int(void) interrupt 1
{
TH0=(time0_0/256);
TL0=(time0_0%256);
disp();
}
/* 显示函数 */
void disp(void)
{
uchar i;
switch (digbit)
{
case 0xfe: i=0;break;
case 0xfd: i=1;break;
case 0xfb: i=2;break;
case 0xf7: i=3;break;
default: break;
}
DIGPORT=0xff; // 关闭显示
WORDPORT=tab[buf[i]]|0x80; // 送字型码
DIGPORT=digbit; // 送字位码
if (digbit>0xf7)
digbit=(digbit<<1)|0x01;
else
digbit=0xfe;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -