写在前面
前面我们已经学习了如何使用定时器来编写精确的延时函数,其实函数的样板是非常容易模仿的。
项目的整合
我们前面我们学习了LED的知识,今天我们往前走一步,数码管了解一下。 其实数码管的原理也是非常简单的。一个数码管代表的是8个长型的LED灯模组。也就代表了8位的二进制数。 所以,通过对8位二进制数编码,我们可以使得指定的LED灯点亮,从而得到指定的形状。 那么,现在我想做什么项目呢? 第一个项目是使用精确的延时函数,使得一个数码管能够按1s的时间间隔来显示十六进制数。
数码管的编码
从宋雪松老师的《手把手教你学51单片机》一书中,我们了解到数码管的编码。
unsigned char LEDchar(16)
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
从上面的代码中,我们主要用到了两个知识点: 1.数组的定义 2.数组的初试赋值 当然可以,这个数组其实我们是可以认为是一个数据库的,我们根据需要从这个数组中调取所要用的元素。具体如何调用,我们之后在说,其实看一遍例程便可以知道了。
编写项目程序
unsigned char LEDchar[16]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
}
void main()
{
unsigned char cnt;
unsigned char sec;
cnt=0;
sec=0;
TMOD=0x01;
TR0=1;
TH0=0xb8;
TL0=0x00;
while(1)
{
if(TF0==1)
{
TF0=0;
cnt++;
TH0=0xb8;
TL0=0x00;
if(cnt>=50)
{
cnt++;
P2=LEDchart(sec);
if(sec>=15)
sec=0;
}
}
}
}
这样的一个函数,应该是可以满足我的需求的。 另外,我们还要提到的是,这个程序我在开发板上是能够成功进行LED点亮的。我们其实还可以,进一步提升需求:利用按键来进行数字的加减运算。 好了,剩下的东西,我可以下午或者明天上午再来说一说。 朋友们再见,欢迎评论我。
|