电工技术基础_电工基础知识_电工之家-电工学习网

欢迎来到电工学习网!

74hc595驱动数码管程序

2017-06-03 15:01分类:电子技术 阅读:

 

数码管的驱动分静态扫描和动态扫描两种,运用最多的是动态扫描,利益是运用较少的MCU的IO口就能驱动较多位数的数码管。数码管动态扫描驱动电路许多,其间最多见的是74HC164驱动数码管,这种电路通常用三极管作位选信号,用74HC164作段选信号,占用的MCU的IO口线随位数添加而添加,通常驱动四位以下数码管。假定要驱动四位以上数码管,用74HC595驱动最经典,只需4根IO口线就能驱动8位数码管,而且不存在消影疑问,闪现功用也很强健,是很有用的数码管驱动电路之一。
电路方案
在WSF-51DB开发板上,用两片74HC595驱动8位共阴极数码管(由两个4位共阴极数码管构成),一片作位选信号,另一片作段选信号。需求留神的是段选芯片与数码管的联接要运用100-200欧姆电阻作限流,不能太大也不能太小,更不能直接联接。

程序方案
/**************************************************************************
*程序称谓:74HC595驱动数码管
*程序功用:数码管闪现字符
*开发东西:WSF-51DB开发板
* MCU类型:AT89S52-24PU
*时钟频率:12MHZ
*程序作者:吴师傅
**************************************************************************/
#i nclude
unsigned char code segmcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7C,0x39,0x5E,0x79,0x71};//共阴极数码管段码0-f
unsigned char code bitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//8位共阴极数码管位码
sbit ser=P2^0; //74HC595串行数据输入
sbit oe=P2^1; //74HC595使能,为0时输出数据,为1时呈高阻态
sbit rclk=P2^2; //74HC595数据锁存
sbit srclk=P2^3;// 74HC595串行时钟
//延时毫秒函数:
void Delayms(unsigned int t)
{
unsigned int x,y;
for(x=t;x>0;x--)
for(y=120;y>0;y--);//延时大概1毫秒
}
//恣意位数码管闪现一个字符函数:
void DTDisplayChar(unsigned char segmd,unsigned char bitd )//数码管段码和数码管位码
{
unsigned char i;
unsigned int dat;
dat=bitd;
dat=dat位码段码兼并为一个int型数据
for(i=0;i位数据从高位顺次移入74HC595
{
ser=(dat&0x8000)?1:0; //差异最高位,为真取1,为假取0
srclk=1; //上升沿送数据
srclk=0;
dat左移取下一位
}
rclk=1; //74HC595锁存数据
rclk=0;
}
//主函数:
int main(void)
{
unsigned char j,k;
oe=0; rclk=0;srclk=0;
DTDisplayChar(0xff,0x00);//数码管全亮
Delayms(2000);//延时2秒,查看数码管是不是有缺画
while(1)
{
for(j=0;j闪现0-f 16个字符
{
DTDisplayChar(segmcode[j],bitcode[j%8]);//从数组取出段码和位码
//要闪现小数点只需在断码上或上0x80即可
for(k=0;k每个字符/闪耀5次
{
oe=0;//翻开闪现
Delayms(200);//延时200毫秒
oe=1;//封闭闪现
Delayms(200);
}
}
/* for(j=0;j字符一同闪现
{
DTDisplayChar(segmcode[j],bitcode[j]);//从数组取出段码和位码
Delayms(1);
} */
}
return 0;
}

上一篇:贴片自康复稳妥丝的选型

下一篇:运算拓宽器的电路符号

相关推荐

电工推荐

    电工技术基础_电工基础知识_电工之家-电工学习网
返回顶部