8位數(shù)碼管顯示(譯碼器-595方式)

此種方式與595連級(jí)都采用讀表方式(讀取數(shù)組中的段碼表和位選表)進(jìn)行數(shù)據(jù)讀取。
在這里譯碼器做位選器,595做段選器,兩者分別配有“段碼表”和“位選表”;
兩者根據(jù)顯示函數(shù)的內(nèi)容,從表中讀取數(shù)據(jù)后傳輸至數(shù)碼管進(jìn)行顯示。



附件“主程序代碼附注”
*********************************************************************************************************
#include<STCXXXX.H>
u8 a,b,c,d,e,f,g,i,j;
u32 num,HG,HS,FG,FS,MG,MS;?
sbit SCK = P3^2; //數(shù)據(jù)時(shí)鐘
sbit RCK = P3^5; //鎖存時(shí)鐘
sbit SI? = P3^4; ? ? ? ? //數(shù)據(jù)信號(hào)
sbit A0 = P4^0;
sbit A1 = P5^5;
sbit A2 = P4^4;
code Data1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};? //段碼數(shù)據(jù)發(fā)送給595
code Data2[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};? ? ? ? ? ? ? ? ? ? ? //位選數(shù)據(jù)發(fā)送給38譯碼器(時(shí)-分-秒)
void Gun(u8 c) ? ? ? ?//驅(qū)動(dòng)595硬件? ? ? ? ?
{ ?
? ? a = Data1[c];? ? ? ? ? ? ? ? ?
? ? for(b=0;b<8;b++)? //參數(shù)已用:a,b,c
? ? {
? ? ? ? SI = a&0x80;??
? ? ? ? SCK = 0;
? ? ? ? SCK = 1; ? ? ?
? ? ? ? a=a << 1; //595拉栓炮,拉for栓裝彈,彈容量8發(fā) ? ??
? ? }? ? ?
? ? RCK=0;? ? ? ? ? ? ? //鎖存器扳機(jī),并行炮,一炮射八發(fā)
? ? RCK=1;? ? ? ? ? ??
}
void YMQ138(u8 e)? ? //驅(qū)動(dòng)38譯碼器硬件??
{
? d=Data2[e];? ? ? ? ?
? A0 = d&0x01;? ? ? ? //參數(shù)已用:d,e
? A1 = (d&0x02)>>1;
? A2 = (d&0x04)>>2;? //38讀表機(jī)
}
void Delay5ms() ? //延時(shí)
{
_nop_();
i = 32;
j = 40;
do
{
while (--j);
} while (--i);
}
void main()
{? ?
? P0M0=0X00;P0M1=0X00;? ? ? //配置I/O口,做初始化,模式:“雙向口”
P1M0=0X00;P1M1=0X00;
P2M0=0X00;P2M1=0X00;
P3M0=0X00;P3M1=0X00;
P4M0=0X00;P4M1=0X00;
? ??
? ? TMOD=0X01;? ? ? ? ? ? ? ? //定時(shí)器初始化
? ? TH0=(65535-50000)/256;? ??
? ? TL0=(65535-50000)%256;
? ? EA=1;
? ? ET0=1;
? ? TR0=1;? ? ? ? ? ? ? ? ? ? //此刻,定時(shí)器已開啟!
?
? while(1)? ? ? ? //while循環(huán)-展示數(shù)碼管動(dòng)態(tài)掃描
? {?
? ? ??
? ? YMQ138(0);? ? ?//38譯碼器的數(shù)組控制函數(shù)(控位選)??
? ? Gun(MG);? ? ? ?//595的數(shù)組段選控制函數(shù)(控段選)
? ? Delay5ms();? ? //延時(shí)函數(shù)給予顯示延時(shí)
? ? Gun(10);? ? ? ?//595鎖存數(shù)據(jù)清空
? ??
? ? YMQ138(1);
? ? Gun(MS);
? ? Delay5ms();
? ? Gun(10);
? ? ??
? ? YMQ138(2);
? ? Gun(11);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? YMQ138(3);
? ? Gun(FG);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? YMQ138(4);
? ? Gun(FS);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? YMQ138(5);
? ? Gun(11);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? YMQ138(6);
? ? Gun(HG);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? YMQ138(7);
? ? Gun(HS);
? ? Delay5ms();
? ? Gun(10);
? ??
? ? HS=num/3600%24/10;//? ?"num"定時(shí)器參數(shù)-鏈接顯示與定時(shí)器
? ? HG=num/3600%24%10;//時(shí)
? ? FS=num%3600/60/10;
? ? FG=num%3600/60%10;//分
? ? MS=num%60/10;
? ? MG=num%60%10;? ? ?//秒
? ??
? ? }
? ? ??
}
void T0_time() interrupt 1 //中斷
{
? ? TH0=(65535-50000)/256;
? ? TL0=(65535-50000)%256;? ??
? ? f++;
? ? if(f==20)
? ? {
? ? ? ?f=0;? ? ? ? ?//已用參數(shù)f
? ? ? ? num++;
? ? }
}