这篇主要带大家了解一下如何对蓝桥杯单片机开发板的数码管进行基本操作,大家可以看一下电路图,这里不再对74HC138译码器和74HC573锁存器做讲解,可以参考蓝桥杯单片机----LED指示灯的基本控制里面的内容。
设计内容:
1.数码管从左到右依次点亮;
2.数码管全部点亮后,从左到右依次熄灭。
#include<stc15f2k60s2.h>
#define uchar unsigned char //定义无符号字符类型uchar
#define uint unsigned int //定义无符号整型类型uint
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//数字0~9,“-”,“关”
uchar yi,er,san,si,wu,liu,qi,ba; //定义字符型变量yi,er,san,si,wu,liu,qi,ba,当作数码管显示控制变量
void delayms(int ms); //延时函数
void allinit(); //初始化函数
void display1(uchar yi,uchar er); //第一、二段数码管函数
void display2(uchar san,uchar si); //第三、四段数码管函数
void display3(uchar wu,uchar liu); //第五、六段数码管函数
void display4(uchar qi,uchar ba); //第七、八段数码管函数
void SMG_init(); //数码管显示程序
void main()//主函数
{
allinit(); //初始化函数
yi=11;er=11;san=11;si=11;wu=11;liu=11;qi=11;ba=11;//上电让数码全部熄灭
while(1)
{
SMG_init();
display1(yi,er); //第一、二段数码管函数
display2(san,si); //第三、四段数码管函数
display3(wu,liu); //第五、六段数码管函数
display4(qi,ba); //第七、八段数码管函数
}
}
void SMG_init() //数码管显示程序
{
uchar k; //定义无符号字符型变量k
for(k=0;k<8;k++)
{
P2=0xC0;P0=~(0xFE<<k);P2=0xFF;P0=0x00;delayms(500); //段选全部点亮状态下,让数码管位选移位选中,延时0.5秒
}
for(k=0;k<8;k++)
{
P2=0xC0;P0=(0xFE<<k);P2=0xFF;P0=0x00;delayms(500); //段选全部点亮状态下,让数码管位选移位关闭,延时0.5秒
}
}
void delayms(int ms)//延时函数
{
uint i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
void allinit()//初始化函数
{
P2=0xA0;P0=0x00; //关闭蜂鸣器继电器
P2=0x80;P0=0xFF; //关闭所有LED灯
P2=0xC0;P0=0xFF; //选中所有数码管段选
P2=0xFF;P0=0xFF; //关闭所有数码管
}
void display1(uchar yi,uchar er)//第一、二段数码管函数
{
P2=0xC0;P0=0x01; //选中第一个数码管段选
P2=0xFF;P0=tab[yi]; //让第一个数码管显示yi指向的值
delayms(1); //延时1ms
P2=0xC0;P0=0x02; //选中第二个数码管段选
P2=0xFF;P0=tab[er]; //让第一个数码管显示er指向的值
delayms(1); //延时1ms
}
void display2(uchar san,uchar si)//第三、四段数码管函数
{
P2=0xC0;P0=0x04; //选中第s三个数码管段选
P2=0xFF;P0=tab[san]; //让第一个数码管显示san指向的值
delayms(1); //延时1ms
P2=0xC0;P0=0x08; //选中第四个数码管段选
P2=0xFF;P0=tab[si]; //让第一个数码管显示si指向的值
delayms(1); //延时1ms
}
void display3(uchar wu,uchar liu)//第五、六段数码管函数
{
P2=0xC0;P0=0x10; //选中第五个数码管段选
P2=0xFF;P0=tab[wu]; //让第一个数码管显示wu指向的值
delayms(1); //延时1ms
P2=0xC0;P0=0x20; //选中第六个数码管段选
P2=0xFF;P0=tab[liu]; //让第一个数码管显示liu指向的值
delayms(1); //延时1ms
}
void display4(uchar qi,uchar ba)//第七、八段数码管函数
{
P2=0xC0;P0=0x40; //选中第七个数码管段选
P2=0xFF;P0=tab[qi]; //让第一个数码管显示qi指向的值
delayms(1); //延时1ms
P2=0xC0;P0=0x80; //选中第八个数码管段选
P2=0xFF;P0=tab[ba]; //让第一个数码管显示ba指向的值
delayms(1); //延时1ms
P2=0xC0;P0=0x80; //选中第八个数码管段选
P2=0xFF;P0=0xFF; // 熄灭数码管
}
数码管的基本操作