两片74HC595控制六位数码管

来源:互联网 发布:阿里巴巴和淘宝哪个好 编辑:程序博客网 时间:2024/05/04 14:03

74HC595的介绍请点击打开链接

这里实现的是在protues7.5上f仿真使用74hc595控制六位数码管,用于计算公路里程;

代码:

#include <reg52.h>sbit SI  = P2^0;    // 数据线sbit SCK = P2^1;    // 数据输入时钟线,脉冲sbit RCK = P2^2;    // 锁存   unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};  //0 //1   //2 //3   //4//5    //6  //7   //8    //9unsigned char Wei[6] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20};//位选unsigned char Val[6]  = {0}; void Output(void){    RCK = 0;    RCK = 1;}void Write_Byte(unsigned char dat){    unsigned char i = 0;    //每次发送一位数据,8次发送完毕,先发送高位(切记)    for(i=0; i<8; i++)    {        SCK = 0;        SI  = dat & 0x80;        SCK = 1;        dat <<= 1;          }}void Display(unsigned char * p){unsigned char tmp;    unsigned char * pt = Wei;    //注意,先发送位选,因为控制位选的595芯片在控制段选的595芯片下一级    Write_Byte(*(pt+0));// 位选,    Write_Byte(SMG[*(p+0)]);// 段选    Output();//发送到595 输出       Write_Byte(*(pt+1));    Write_Byte(SMG[*(p+1)]);    Output();       Write_Byte(*(pt+2));    Write_Byte(SMG[*(p+2)]);    Output();       Write_Byte(*(pt+3));    tmp=SMG[*(p+3)]&0X7F;   //显示小数点Write_Byte(tmp);    Output();        Write_Byte(*(pt+4));    Write_Byte(SMG[*(p+4)]);    Output();       Write_Byte(*(pt+5));    Write_Byte(SMG[*(p+5)]);    Output();   } int main(void){    unsigned long int time = 0;    unsigned int t = 0;       while(1)    {        t++;               if(100==t)        {            t= 0;            time++;                       Val[0] = time / 100000 % 10;            Val[1] = time / 10000 % 10;            Val[2] = time / 1000 % 10;            Val[3] = time / 100 % 10;            Val[4] = time / 10 % 10;              Val[5] = time % 10 ;          }               Display(Val);    }       return 0;}
仿真电路图

http://download.csdn.net/detail/u012090772/7124281

0 0
原创粉丝点击