钻石会员
主题
帖子
积分16832
阅读权限50
注册时间2011-7-28
最后登录1970-1-1
在线时间 小时
|
最近,网上下载了个如题程序,看到注解显示数码管是用的共阴极显示码,但proteus仿真里的数码管选用的是共阳极数码管,这就不明白了,用共阴的反而不行?怎么回事?请看明白了的指点一二。谢谢。顺祝坛友新春快乐!!
#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
#define SH_CP1 P3_0
#define DS P3_1
#define ST_CP1 P3_2
#define OE1 P3_3
#define SH_CP2 P3_4
#define ST_CP2 P3_5
#define OE2 P3_6
uchar code seg_tab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴数码管显示码
uchar code wei_tab[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar dispbuf[8]={0,1,2,3,4,5,6,7};
void SendByte_595_1(uchar dat);
void SendByte_595_2(uchar dat);
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0EC;
TL0 = 0x78;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void display(void)
{
static uchar i;
if(i>=8) i=0;
SendByte_595_2(~0xff);
SendByte_595_1(~seg_tab[dispbuf]);
SendByte_595_2(~wei_tab);
i++;
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x0EC;
TL0 = 0x78;
//add your code here!
display();
}
void main(void)
{
InitTimer0();
while(1)
{
}
}
void SendByte_595_1(uchar dat)
{
uchar i,dat_temp;
OE1=0;//低电平有效
dat_temp=dat;
for(i=0;i<8;i++)
{
DS=0;
if(dat_temp&0x80)
{
DS=1;
}
dat_temp=dat_temp<<1;
SH_CP1=0;
SH_CP1=1;//上升沿发生移位
SH_CP1=0;
}
ST_CP1=0;
ST_CP1=1;//上升沿将将移位寄存器内的数据送到输出锁存器
ST_CP1=0;
}
void SendByte_595_2(uchar dat)
{
uchar i,dat_temp;
OE2=0;//低电平有效
dat_temp=dat;
for(i=0;i<8;i++)
{
DS=0;
if(dat_temp&0x80)
{
DS=1;
}
dat_temp=dat_temp<<1;
SH_CP2=0;
SH_CP2=1;//上升沿发生移位
SH_CP2=0;
}
ST_CP2=0;
ST_CP2=1;//上升沿将将移位寄存器内的数据送到输出锁存器
ST_CP2=0;
}
|
|