我正使用595,给你个程序参考
//MM74HC595 +数码管显示的程序模块,标号按MM74HC595.PDF文件标注 //提供show(showdata)显示接口
#include<reg51.h> #define uchar unsigned char
uchar code seg[10]={0xC0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit SER=P0^4; //595串行数据输入 sbit SCK=P0^5; //595移位时钟 sbit RCK=P0^7; //595数据输出脉冲 sbit SQH=P0^6; //595串行数据输出 sbit gewei=P2^7; //595数码管个位选通 sbit shiwei=P2^6; //595数码管十位选通
void IN595(uchar segdata) //输入一字节数码管数据进595 { uchar i,temp; temp=seg[segdata]; RCK=0; for(i=0;i<8;i++) //循环移入8位数据, { SCK=0; SER=temp&0x80; // 取数码的最高位 temp=temp<<1; SCK=1; //上升沿把一位数据移入595 } //SCK=0; //这3个是因为我电路上设计的不合理后再加的 ,你可以不要 //SER=1; //SCK=1;
RCK=1; //上升沿把8位数据并行输出 }
void show(uchar showdata) { uchar i,j; i=showdata/10; j=showdata%10; IN595(i); //移入十位数据 gewei=1; //关个位 shiwei=0; //选通十位数码管 IN595(j); //移入个位数据 shiwei=1; //关十位 gewei=0; //选通个位数码管
}
void main() //测试。。。。。。。。。。。。。。。。 { while(1) { show(80); } }
|
|