2片74HC595驱动4位数码管,怎么不成功
答案:1 悬赏:30
解决时间 2021-01-28 22:00
- 提问者网友:箛茗
- 2021-01-28 18:04
2片74HC595驱动4位数码管,怎么不成功
最佳答案
- 二级知识专家网友:廢物販賣機
- 2021-01-28 19:17
那是你的电路连接的有误,或者程序有问题。
下面是仿真的实例,并附有程序
//两片74HC595,驱动4位共阴数码管
#include
#include
sbit sclk=P2^0; //定义HC595第11脚,串行时钟输入端
sbit cpla=P2^1; //定义HC595第12脚,输出锁存脉冲输入端
sbit sdat=P2^2; //定义HC595第14脚,串行数据输入端
unsigned char led_ram[]={1,2,3,4}; //显示缓冲区
unsigned char code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
0x27,0x7F,0x6F}; //共阴数码管0-9段码
//
void delay()
{
unsigned int i;
for (i=400;i>0;i--);
}
//
void hc595(unsigned char byte)
{
unsigned char i;
for (i=8;i>0;i--) //循环8次
{
sclk=0;
sdat=0x80&byte; //从最高位开始串行输出
byte<<=1; //向高位移一位,即向左移一位
sclk=1; //上升沿推进一位
}
}
//
void display()
{
unsigned char j,ledbit=0xfe; //ledbit位码,指向LED4位,最右位
for (j=0;j<4;j++) //循环显示4位
{
hc595(segment[led_ram[j]]); //先串行输出段码
hc595(ledbit); //后串行输出位码
cpla=1; //cpla上升沿输出端锁存
cpla=0;
ledbit=_crol_(ledbit,1); //位码向左移一位
delay();
}
}
//主程序//
void main()
{
while(1)
{
display(); //调显示子程序
}
}
下面是仿真的实例,并附有程序
//两片74HC595,驱动4位共阴数码管
#include
#include
sbit sclk=P2^0; //定义HC595第11脚,串行时钟输入端
sbit cpla=P2^1; //定义HC595第12脚,输出锁存脉冲输入端
sbit sdat=P2^2; //定义HC595第14脚,串行数据输入端
unsigned char led_ram[]={1,2,3,4}; //显示缓冲区
unsigned char code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
0x27,0x7F,0x6F}; //共阴数码管0-9段码
//
void delay()
{
unsigned int i;
for (i=400;i>0;i--);
}
//
void hc595(unsigned char byte)
{
unsigned char i;
for (i=8;i>0;i--) //循环8次
{
sclk=0;
sdat=0x80&byte; //从最高位开始串行输出
byte<<=1; //向高位移一位,即向左移一位
sclk=1; //上升沿推进一位
}
}
//
void display()
{
unsigned char j,ledbit=0xfe; //ledbit位码,指向LED4位,最右位
for (j=0;j<4;j++) //循环显示4位
{
hc595(segment[led_ram[j]]); //先串行输出段码
hc595(ledbit); //后串行输出位码
cpla=1; //cpla上升沿输出端锁存
cpla=0;
ledbit=_crol_(ledbit,1); //位码向左移一位
delay();
}
}
//主程序//
void main()
{
while(1)
{
display(); //调显示子程序
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯