怎么才能把这个状态机数码管动态扫描改成共阴极的?

2020-01-25 15:37发布

#include <REGX52.H>
#define   LED_PORT P1
unsigned int g_u8LedDisplayBuffer[8]={0}; //显示缓冲区
code unsigned int g_u8LedDisplayCode[]=
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40
};
sbit io_led_seg_cs=P2^0;
sbit io_led_bit_cs=P2^1;
bit  g_bSystemTime2Ms=0; // 2msLED 动态扫描时标消息

static void SendLedSegData(unsigned int dat)
{
LED_PORT=dat;
io_led_seg_cs=1; //开段码锁存,送段码数据
io_led_seg_cs=0 ;
}
static void SendLedBitData(unsigned int dat)
{
unsigned int temp;
temp=(0xfe<<dat); //根据要选通的位计算出位码
LED_PORT=temp;
io_led_bit_cs=1; //开位码锁存,送位码数据       
io_led_bit_cs=0;
}
void LedDisplay(unsigned int *pBuffer)
{
static unsigned int s_LedDisPos=0;
if(g_bSystemTime2Ms)
{
g_bSystemTime2Ms=0;
SendLedBitData(8); //消隐,只需要设置位选不为0~7 即可
if(pBuffer[s_LedDisPos]== '-') //显示'-'号
{
SendLedSegData(g_u8LedDisplayCode[16]) ;
}
else
{
SendLedSegData(g_u8LedDisplayCode[pBuffer[s_LedDisPos]]) ;
}
SendLedBitData(s_LedDisPos);
if(++s_LedDisPos >7)
{
s_LedDisPos=0;
}
}
}

void Timer0Init( )
{
TMOD=0xf0;
TMOD=0x01; //定时器0 工作方式1
TH0=0xf8; //定时器初始值
TL0=0xcc;
TR0=1;
ET0=1;
}
void Time0Isr( ) interrupt 1
{
TH0=0xf8; //定时器重新赋初值
TL0=0xcc;
g_bSystemTime2Ms=1; //2MS 时标标志位置位
}
压缩包里包含了仿真文件,请高手帮看下 状态机动态显示.rar (58.87 KB, 下载次数: 10) 2013-11-21 22:03 上传 点击文件名下载附件
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
HadesHe
1楼-- · 2020-01-25 15:41
把那个数组里的数字取反 然后片选翻过来
4758866
2楼-- · 2020-01-25 16:11
数码管编码已经按照共阴极的重新编了,位选和段选调换?
HadesHe
3楼-- · 2020-01-25 21:28
 精彩回答 2  元偷偷看……
heyuncun
4楼-- · 2020-01-25 22:55
弄好了没有?
4758866
5楼-- · 2020-01-26 04:01
heyuncun 发表于 2013-11-21 22:54
弄好了没有?

没有啊。。。。。。。。。。。
proteldxp
6楼-- · 2020-01-26 07:40
code unsigned int g_u8LedDisplayCode[]=
{
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x40
}; 这个取反,然后位选也要取反。

一周热门 更多>