1. 程式人生 > >51單片機-定時器數碼管

51單片機-定時器數碼管

lsb 工作方式 初始化 實現 特殊 數碼 char 個數 不想

 1 /**************************************************************************************
 2 *                      定時器秒表(查詢方式)實驗                                                  *
 3 實現現象:下載程序後數碼管最後兩位實現秒表功能。
 4 註意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。                                                                                  
5 ***************************************************************************************/ 6 7 #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器 8 9 typedef unsigned int u16; //對數據類型進行聲明定義 10 typedef unsigned char u8; 11 12 sbit LSA=P2^2; 13 sbit LSB=P2^3; 14 sbit LSC=P2^4; 15 16
u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 17 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值 18 u16 s; 19 u8 sec,mb[2]; 20 21 /******************************************************************************* 22 * 函 數 名 : Timer0Init 23 * 函數功能 : 定時器0初始化 24 * 輸 入 : 無
25 * 輸 出 : 無 26 *******************************************************************************/ 27 void Timer0Init() 28 { 29 TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。 30 TH0=0XFC; //給定時器賦初值,定時1ms 31 TL0=0X18; 32 TR0=1;//打開定時器 33 } 34 35 /******************************************************************************* 36 * 函 數 名 : delay 37 * 函數功能 : 延時函數,i=1時,大約延時10us 38 *******************************************************************************/ 39 void delay(u16 i) 40 { 41 while(i--); 42 } 43 44 45 /******************************************************************************* 46 * 函 數 名 : DigDisplay 47 * 函數功能 : 數碼管動態掃描函數,循環掃描2個數碼管顯示 48 *******************************************************************************/ 49 void DigDisplay() 50 { 51 u8 i; 52 for(i=0;i<2;i++) 53 { 54 switch(i) //位選,選擇點亮的數碼管, 55 { 56 case(0): 57 LSA=0;LSB=0;LSC=0; break;//顯示第0位 58 case(1): 59 LSA=1;LSB=0;LSC=0; break;//顯示第1位 60 } 61 P0=smgduan[mb[i]];//發送段碼 62 delay(1); //間隔一段時間掃描 63 P0=0x00;//消隱 64 } 65 } 66 67 68 /******************************************************************************* 69 * 函 數 名 : main 70 * 函數功能 : 主函數 71 * 輸 入 : 無 72 * 輸 出 : 無 73 *******************************************************************************/ 74 void main() 75 { 76 Timer0Init(); 77 while(1) 78 { 79 if(TF0==1) 80 { 81 TF0=0; 82 TH0=0XFC; //給定時器賦初值,定時1ms 83 TL0=0X18; 84 s++; 85 } 86 if(s==1000) //到達1s時間 87 { 88 s=0; 89 sec++; 90 if(sec==100)sec=0; //計時到100秒後重新開始 91 } 92 mb[0]=sec%10; //秒表個位 93 mb[1]=sec/10; //秒表十位 94 DigDisplay(); 95 } 96 }

51單片機-定時器數碼管