电子常识
本设计使用了一个4位的数码管,为共阳型,为了节省单片机的IO口,使用了两片74HC595作为数码管的驱动芯片,共占用3个IO口。74HC595部分电路图如下:
与单片机相连接的三个脚分别为: HC_DAT,HC_RCK,HC_CLK。两片595采用级联方式,即U2的第9脚接到U3的第14引脚。
74HC595是8位的移位寄存器,串入并出,并具有锁存功能,被广泛的用于数码管、点阵的驱动电路中。其管脚介绍如下:
15: 数据输出A-接数码管数据A段;
l: 数据输出B-接数码管数据B段;
2: 数据输出C-接数码管数据C段;
3: 数据输出D-接数码管数据D段;
4: 数据输出E-接数码管数据E段;
5: 数据输出F-接数码管数据F段;
6: 数据输出G-接数码管数据G段;
7: 数据输出H-接数码管数据H段;
16: 电源正脚-接电源正;
8: 电源负脚=接电源负;
14: 数据输入脚-接单片机管脚;
12: 数据锁存时钟-接单片机管脚;
11: 数据输入时钟-接单片机管脚;
13: 使能输出脚-低电平有效,接低电平;
10 :数据清零-不清零,接高电平;
9:数据级联输出-接下一片595的数据输入脚
通过时序可以看出:
SCK是上升沿的时候要把数据写入;
RCK是上升沿的时候数据才能锁存显示;
有数据操作的过程中RESET必须是高电平;
EN必须是低电平,595才能工作;
知道了以上4点就可以写程序了。其中3、4条是硬件连接上的事情(也可以用单片机的IO口来连接,这样的话可以随时控制74HC595的工作与否情况)。写程序主要靠1、2条。下面具体操作。
//MCU:AT89S52
//晶振:11.0592M.
//采用4位共阳极数码管
#include 《regx51.h》
//#include 《INTRINS.H》
#define uint unsigned int
#define uchar unsigned char
#define nop() _nop_();_nop_();
sbit CLK=P2^0;
sbit DAT=P2^1;
sbit RCLK=P2^2;
sbit CS1=P2^3;
sbit CS2=P2^4;
sbit CS3=P2^5;
sbit CS4=P2^6;
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0};//0-9,-,全灭,全亮——共阳极数码管
void write595(unsigned char word)
{
uchar num,c;
num=tab[word];
for(c=0;c《8;c++)
{
CLK=0;
DAT=num&0x80;
num=num《《1;
CLK=1;
}
RCLK=0;
// nop();
// nop();
RCLK=1;
}
void select1(void)
{
CS1=0;
CS2=1;
CS3=1;
CS4=1;
}
void select2(void)
{
CS1=1;
CS2=0;
CS3=1;
CS4=1;
}
void select3(void)
{
CS1=1;
CS2=1;
CS3=0;
CS4=1;
}
void select4(void)
{
CS1=1;
CS2=1;
CS3=1;
CS4=0;
}
int main(void)
{
//unsigned char i;
while(1)
{
write595(12);
select1();
//for(i=0;i《10;i++) _nop_();
write595(2);
select2();
//for(i=0;i《10;i++) _nop_();
write595(3);
select3();
//for(i=0;i《10;i++) _nop_();
write595(4);
select4();
//for(i=0;i《10;i++) _nop_();
}
}
全部0条评论
快来发表一下你的评论吧 !