|
我給你來(lái)個(gè)程序試試
- /*
- 51單片機(jī)74HC164串口控制數(shù)碼管顯示
- 一般數(shù)碼管需要接7個(gè)腳才能顯示,如果用單片機(jī)本身的I/O口,雖然可以但是浪費(fèi)寶貴的i/O口資源。本例用移位寄存器74HC164作為數(shù)碼管驅(qū)動(dòng)進(jìn)行控制。
- 74HC164特性 是一種8位串轉(zhuǎn)并口的控制芯片,用于數(shù)碼管和液晶顯示等.
- 工作電壓2--6V
- 管腳定義:
- 1) A,B管腳:與門(mén)數(shù)據(jù)輸入引腳。
- 2)QA---QH 數(shù)據(jù)并口輸出引腳
- 3) CLR 低電平時(shí),數(shù)據(jù)清零,不能輸入
- 4) CLK 數(shù)據(jù)輸入時(shí)鐘,上升沿讀取串口數(shù)據(jù)
-
- 本51單片機(jī)用的是12MHZ晶振,每條指令最小執(zhí)行時(shí)間1uS》》1ns ,可以根據(jù)時(shí)序圖隨便使用.
- 原理圖:
- */
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- //74HC164 MR Pin9 接5V
- sbit CLK=P1^0; // 低電平到高電平邊沿觸發(fā) 接74HC164 CLK
- sbit MOSI=P1^1; // 數(shù)據(jù)輸入 接74HC164 A、B,
- unsigned char code Tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
- 0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; //共陰數(shù)碼管
- unsigned char DS_data[6];
- /*****************************************************
- 函數(shù)功能:數(shù)碼管掃描延時(shí)子函數(shù)
- 函數(shù)功能:延時(shí)1ms
- ***************************************************/
- void delay1ms()
- {
- unsigned char i,j;
- for(i=0;i<10;i++)
- for(j=0;j<33;j++)
- ;
- }
- void separateData(unsigned long dat) // dat為6位數(shù)
- {
- DS_data[0]=dat%10;
- DS_data[1]=dat/10%10;
- DS_data[2]=dat/100%10;
- DS_data[3]=dat/1000%10;
- DS_data[4]=dat/10000%10;
- DS_data[5]=dat/100000%10;
- }
- void write_164(unsigned char dat)
- {
- unsigned char i;
- for(i=0;i<8;i++)
- {
- CLK=0;
- if(dat&0x80) MOSI=1;
- else MOSI=0;
- CLK=1;
- dat<<=1;
- }
- }
- void display()
- {
- unsigned char i;
- for(i=0;i<6;i++)
- {
- write_164(Tab[DS_data]);
- P2=0x3f&(~(0x01<<i)); //數(shù)碼管位 共陰低電平選中seg1對(duì)應(yīng)P2.5 seg6對(duì)應(yīng)P2.0
- delay1ms();
- P2=0xff; //數(shù)碼管滅
- }
- }
- main()
- {
- separateData(654321);
- while(1)
- {
- display();
- }
- }
復(fù)制代碼 |
|