|
- #include "reg52.h" //定義51單片機特殊功能寄存器
- #include "intrins.h"
- // 0 1 2 3 4 5 6 7 8 9
- code unsigned char duantab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- code unsigned char weitab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- unsigned char i= 0;
- void display(void);
- sbit a = P2^5;
- sbit b = P2^6;
- sbit c = P2^7;
- void wei_clock();
- void duan_clock();
- //主函數(shù)
- void main(void)
- {
- TMOD = 0x01; //配置定時器工作模式
- TH0 = (65536-2000)/256;
- TL0 = (65536-2000)%256;
- EA = 1;
- ET0 = 1; //打開定時器中斷
- TR0 = 1; //啟動定時器
- while(1)
- {
- }
- }
- void display()
- {
- //先送位選
- P0 = weitab[ i];
- wei_clock();
- //再送段選
- P0 = duantab[ i];
- duan_clock();
- i++;
- if(i>=8)
- i=0;
- }
- //定時器中斷服務(wù)函數(shù)
- void isr_timer_0(void) interrupt 1 //默認中斷優(yōu)先級 1
- {
- TH0 = (65536-2000)/256;
- TL0 = (65536-2000)%256; //定時器重載
- display(); //2ms執(zhí)行一次
- }
- //段碼鎖存 Y7C 1變?yōu)?
- //即74HC138的Y7輸出 0變?yōu)?
- void duan_clock()
- {
- //74HC138 的Y7 為0
- // a = 1;
- // b = 1;
- // c = 1;
- P2 = 0xff; //1111 1111
- _nop_();
- _nop_();
- //74HC138 的Y7 為1
- // a = 0;
- // b = 1;
- // c = 0;
- P2 = 0x5f; //0101 1111
- }
- //位碼鎖存 Y6C 1變?yōu)?
- //即74HC138的Y6輸出 0變?yōu)?
- void wei_clock()
- {
- //74HC138 的Y6 為0
- //a = 0;
- //b = 1;
- //c = 1;
- P2 = 0xdf; //1101 1111
- _nop_();
- _nop_();
- //74HC138 的Y6 為1
- // a = 0;
- // b = 1;
- // c = 0;
- P2 = 0x5f; //0101 1111
- }
復(fù)制代碼
|
|