在编写动态数码管的时候,重要的是需要参考开发手册中的74hc138编码器的“真值表”.
新手,请各位大佬多多指点,谢谢啦!抱拳
编程一
/*
* 动态数码管编程
*/
/*
#include <reg51.h>
typedef unsigned char u8; //定义别名变量
sbit LSA = P2^0; //定义 位选 管脚
sbit LSB = P2^1;
sbit LSC = P2^2;
u8 s[8] = {0xfd, 0x61, 0xdb, 0xf3, 0x67, 0xb7, 0xbf, 0xe1};
// 0XFF, 0XF7, 0XEF,0XBF, 0X9D, 0X7B, 0X9F,0X8F};
//定义数码管段选数组
void delay(u8 a)
{
while(a--); //定义循环函数 unsigned char范围是0~255
}
void main (void)
{
while(1)
{
u8 i = 0;
for(i=0; i<8; i++)
{
switch(i) // 定义位选循环与选择 8种位选
{
case 0: LSC=0; LSB=0; LSA=0; break;
case 1: LSC=0; LSB=0; LSA=1; break;
case 2: LSC=0; LSB=1; LSA=0; break;
case 3: LSC=0; LSB=1; LSA=1; break;
case 4: LSC=1; LSB=0; LSA=0; break;
case 5: LSC=1; LSB=0; LSA=1; break;
case 6: LSC=1; LSB=1; LSA=0; break;
case 7: LSC=1; LSB=1; LSA=1; break;
}
P0 = s[i]; //定义数码管段选函数
delay(100);
P0 = 0x00; //消隐
}
}
}
*/
编程二
/*
* 利用数组实现动态数码管程序编译
*/
#include <reg51.h>
typedef unsigned char u8; //定义别名变量char类型变量 //定义循环函数 unsigned char范围是0~255
u8 dx[8] = {0xfd, 0x61, 0xdb, 0xf3, 0x67, 0xb7, 0xbf, 0xe1}; //定义数码管段选数组0-7
u8 wx[8] = {0, 1, 2, 3, 4, 5, 6, 7}; //定义数码管位选数组1-8
// {0x00, 0x01, 0x02, ox03, 0x04, 0x05, 0x06, 0x07}
void delay(u8 a)
{
while(a--); //定义延时函数
}
//位选关键在于原理图中的真值表!!!
void main (void)
{
while(1)
{
u8 i = 0;
for(i=0; i<8; i++)
{
P2 = wx[i]; //P2管脚为位选管脚
P0 = dx[i]; //P0管脚为段选管脚
delay(100);
P0 = 0x00; //消隐
}
}
}