题目:在CT107D单片机综合训练平台上,8个数码管分别单独依次显示0~9的值,然后所有数码管一起同时显示0~F的值,如此往复。
- 延时函数
- 分析LED
- 首先实现8个数码管单独依次显示0~9的数字
- 所有数码管一起同时显示0~F的值,如此往复。
- 初始化蜂鸣器继电器
- 固定模板
- 总代码
延时函数
void Delay(unisgned int t)
{
while(t–);
while(t–);
}
分析LED
由图可知,LED的段码Y7C,位码来连接Y6C,分别与或非门和138译码器上
首先实现8个数码管单独依次显示0~9的数字
先要知道各个数字的16进制编码
#include <REGX52.H>
void char code SMG_duanma=
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
//通道的选择
void InitSystem(unsigned char n)
{
switch(n)
{
case 4:
P2=(P2 & 0x1f) | 0x80 ;
break;
case 5:
P2=(P2 & 0x1f) | 0xa0 ;
break;
case 6:
P2=(P2 & 0x1f) | 0xc0 ;
break;
case 7:
P2=(P2 & 0x1f) | 0xe0 ;
break;
}
}
void showSMG_Bit(unsigned char dat,unsigned char pos) //显示内容,显示位置
{
InitSystem(6); //Y6低电平,控制位置,位码 数码管的位置
P0=0x01<<pos;
InitSystem(7); //Y7低电平,控制数字,断码 数码管的内容
P0=dat;
}
//数码管显示
void SMG_Static()
{
unsigned char i,j;
for(i=0;i<8;i++)
{
for(j=0;j<10;j++)
{
showSMG_Bit(SMG_duanma[j],i);
Delay(60000);
Delay(60000);
}
}
所有数码管一起同时显示0~F的值,如此往复。
for(j=0;j<16;j++)
{
InitSystem(6);
P0=0xff;
InitSystem(7);
P0=SMG_duanma[j];
Delay(60000);
Delay(60000);
}
}
初始化蜂鸣器继电器
void Init()
{
InitSystem(5);
P0=0x00;
}
固定模板
void main(1)
{
Init();
while()
{
SMG_Static();
}
}