//該子程序為74HC595發送字符的程序,該程序是先發送的是最低位!
//芯片74HC595的時鐘引腳為第11腳
//芯片74HC595的數據引腳為第14腳
//芯片74HC595的鎖存引腳為第12腳
//當有多片74HC595串聯時,只有當所有數據都發送完成后,再鎖存信號!
//同樣74hc164與51單片機連接也可以由這個程序來驅動
#include#define uchar unsigned char #define uint unsigned int sbit clk=P3^5; sbit dat=P3^6; sbit shuo_cun=P3^7; uchar volatile e,f; uchar code tab[]={ 0x03,/*0*/ 0x9F,/*1*/ 0x25,/*2*/ 0x0D,/*3*/ 0x99,/*4*/ 0x49,/*5*/ 0x41,/*6*/ 0x1F,/*7*/ 0x01,/*8*/ 0x09,/*9*/ }; void fa_shon(uchar k) // { uchar i; //定義循環變量 for(i=0;i<8;i++) //因為是1字節是8位,所以循環8次 { dat=k&0x01; //將要發送的數據與上0X01送到數據引腳 clk=0; //時鐘引腳加低電平 clk=1; //時鐘引腳加高電平 k>>=1; //將發送的數據右移1位 } } void main() { TMOD=0x01; TH0=15535/256; TL0=15535%256; EA=1; ET0=1; TR0=1; while(1) { uchar a; for(a=0;a<3;a++) { fa_shon(tab[e%10]); fa_shon(tab[e%100/10]); fa_shon(tab[e/100]); } shuo_cun=0; //鎖存為低電平 shuo_cun=1; //鎖存為高電平 } } void tt()interrupt 1 { TH0=15535/256; TL0=15535%256; f++; if(f>10) { f=0; e++; if(e>250)e=0; } }