51单片机加74hc595驱动多个数码管静态显示的程序设计
2020-01-15 广告
本人是菜鸟级别的,能否帮忙提供一个程序示例。
给一个仿真图,给出的程序是在这个仿真图上测试通过的,与你显示电路很相似,所以,显示子程序可以移植的,但是HC595的引脚需要重新定义的。
程序:
#include <reg52.h>
#include <INTRINS.H>
sbit sclk=P1^7; //HC595第11脚,串行时钟输入端
sbit sdat=P1^6; //HC595第14脚,串行数据输入端
sbit cpla=P1^5; //HC595第12脚,输出锁存脉冲输入端
sbit ins1=P3^2; //外接按钮
unsigned char dis[]={0,1,2,3,4}; //定义显示缓冲区4个单元
unsigned char code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
0x27,0x7F,0x6F}; //定义共阴数码管段码
//*串行输出一个字节子函数
void hc595(unsigned char word)
{
unsigned char i;
for (i=8;i>0;i--)
{
sclk=0;
sdat=0x80&word;
word=_crol_(word,1);
sclk=1;
_nop_();
}
}
//**显示子函数**//
void display()
{
unsigned char j;
for (j=4;j>0;j--)
{
hc595(segment[dis[j]]);
}
cpla=1;
_nop_();
cpla=0;
}
//****主函数****//
void main()
{
unsigned char j;
cpla=0;
while (1)
{
display(); //调用显示子程序
if(ins1==0) //按一次键,每位显示数加1
{
for(j=1;j<4;j++)
dis[j]=dis[j+1];
dis[4]++;
if(dis[4]>9)dis[4]=0;
while(ins1==0);
}
}
}
其中的主函数你不用,其余两个子函数是可以移植的。