74HC595最早應用于點陣顯示,后來STC推廣在IO端口擴展上,并取得良好的效果。現在將IO擴展應用 于數碼管掃描顯示上,并循序漸進的學習,讓學習者一步一步掌握IO端口擴展。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include"reg51.h"
- #include"595IO.h"
- #define uchar unsigned char
- #define uint unsigned int
- void delay(uchar i);
- void distime(uchar up,uchar time);
- uchar segcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar digcode[]={0xef,0xdf,0xbf,0x7f};
- struct time
- {
- uchar hour;
- uchar min;
- uchar sec;
- uchar secc;
- }time1={12,0,0,0};
- void main(void)
- {
- IE=0x82;TMOD=1;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- while(1)
- {
- distime(0,time1.hour);
- distime(2,time1.min);
- }
- }
- void delay(uchar i)
- {
- uchar j;
- do
- {
- for(j=0;j<250;j++);
- }while(i--);
- }
- void distime(uchar up,uchar time)
- {
- wr595(digcode[up],segcode[time/10]);
- delay(4);
- wr595(digcode[up],0);
- if(up==0&&time1.sec%2==0)
- wr595(digcode[up+1],segcode[time%10]|0x80);
- else
- wr595(digcode[up+1],segcode[time%10]);
- delay(4);
- wr595(digcode[up+1],0);
- }
- void tt0(void) interrupt 1 using 0
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- time1.secc++;
- if(time1.secc==20)
- {
- time1.secc=0;
- time1.sec++;
- if(time1.sec==60)
- {
- time1.sec=0;
- time1.min++;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
595IO.RAR
(70.12 KB, 下載次數: 43)
2017-10-30 08:16 上傳
點擊文件名下載附件
|