蓝桥杯单片机(二) 数码管与按键
数码管的动态扫描使用1ms的定时器扫描,放在中断服务函数中,数码管显示很稳定
例子:数码管后五位显示12345
#include<stc15f2k60s2.h>
typedef unsigned char uchar;
typedef unsigned int uint;
uchar dsp_code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar dsp_show[8]={0xff,0xff,0xff}; //数码管前三位熄灭,后五位显示12345
uint number=12345;
void Timer0Init(void) //中断初始化,1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xCD; //设置定时初值
TH0 = 0xD4; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1; //记得加上这两句
EA=1;
}
void Timer0_Service() interrupt 1 //中断入口
{
static uchar bit_com=0;
P0=0; //消影,使所有数码管熄灭
P2=0xc0;
P2=0;
P0=dsp_show[bit_com]; //段选内容,即要显示的数字
P2=0xe0; //打开锁存器控制数码管段选
P2=0; //关闭锁存器
P0=1<<bit_com; //位选左移一位
P2=0xc0; //打开锁存器控制数码管位选
P2=0;
if(++bit_com==8)
bit_com=0;
}
void main()
{
Timer0Init(); //中断初始化
dsp_show[3]=dsp_code[number/10000];
dsp_show[4]=dsp_code[number/1000%10];
dsp_show[5]=dsp_code[number/100%10];
dsp_show[6]=dsp_code[number/10%10];
dsp_show[7]=dsp_code[number%10];
while(1)
{
;
}
}