暑假从实验室借了一块stc8的开发板,简单的记录下自己学习的过程。
我不知道咋分类的,因为我是物联网工程专业的,就分类到物联网把。
刚开始首先得要把最基础的数码管点亮吧,我们这块板子用的是两片595芯片控制8位阳码数码管显示,下图是具体的电路图。
从电路图可以看出我们用到了单片机的P3.4、P3.5、P3.7的IO口控制数码管的驱动,要想驱动数码管得先了解595芯片是怎样工作的,具体的得去看595芯片的数据手册,从数据手册我们可以看出,595芯片是串入并出的工作方式,我们一次让595芯片发送一比特数据,也就是8位,下面是驱动595芯片发送一比特数据的函数。
sbit SH_CP = P3^5;
sbit ST_CP = P3^4;
sbit DS = P3^7;
void send_byte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
SH_CP = 0;
DS = dat & 0x80;
SH_CP = 1;
dat <<= 1;
}
}
考虑到数码管的点亮在以后的项目中用的会很多,我们不如把它给封装起来,到时候用的时候,直接加个头文件进去,方便以后的移植。具体的实现过程就不演示了。
数码管一共8位,要每时每刻都在刷新数码管,我们可以把扫描数码管显示的函数放进while()循环中,让数码管不停的进行刷新,设置一个数据缓存区改变要显示的值。
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//数码管段选位
unsigned char code weixuan[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选
unsigned char Digbuff[] = {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff}; //数据缓存区
void SetDigOData(unsigned char seat,unsigned char num)// 设置一位数码管显示
{
if (seat > 7)
return;
if (num > 15)
num = 16;
Digbuff[seat] = table[num];
}
void DigDisplay() // 数码管动态扫描
{
unsigned char i;
for(i=0;i<8;i++)
{
send_byte(weixuan[i]);
send_byte(Digbuff[i]);
ST_CP = 1;
ST_CP = 0;
}
}
我们这样就基本算完成了,那么要想显示两位数码管呢?
只需要调用显示一位数码管的函数就可以了,以此论推。
void SetDigTData(unsigned char seat,unsigned char num)// 设置两位数码管显示
{
SetDigOData(seat, num / 10);
SetDigOData(seat+1, num % 10);
}
把以上的函数全部封装到一起,我们只需要在主函数中调用它就可以了。
#include
#include //数码管显示的头文件
void init_guanjiao() // 配置引脚
{
P3M0 = 0x00;
P3M1 = 0x00;
}
void main()
{
init_guanjiao();
SetDigOData(0,15);// 设置数码管显示
SetDigTData(3,0);
while(1)
{
DigDisplay(); // 数码管动态扫描
}
}
点亮个数码管,我觉得是学习单片机的第一步,就跟学习C语言,刚开始要学习个
Hello Word! ,这是基础吧。