蓝桥杯单片机(二) 数码管与按键

蓝桥杯单片机(二) 数码管与按键

数码管的动态扫描使用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)
	{
		;
	}
}
上一篇:56.深度解密五十六:详解DSP营销推广及实战中的相关问题


下一篇:IDEA使用自带Http Client替换Postman校验接口