C51 COMPILER V9.54 TIMERDELAY_2 05/05/2018 23:54:22 PAGE 1 C51 COMPILER V9.54, COMPILATION OF MODULE TIMERDELAY_2 OBJECT MODULE PLACED IN .\Objects\TimerDelay_2.obj COMPILER INVOKED BY: C:\Keil_v5\C51\BIN\C51.EXE TimerDelay_2.c OPTIMIZE(8,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(.\Listi -ngs\TimerDelay_2.lst) TABS(2) OBJECT(.\Objects\TimerDelay_2.obj) line level source 1 //第一顆七節碼亮到第六顆七節碼,並一直重複這個過程 ,依序顯示 0 - 9,每個號碼停留 1.5 秒 2 3 #include 4 5 // 宣告 D 型正反器街接腳 6 sbit P2_6 = P2^6; 7 sbit P2_7 = P2^7; 8 9 // 宣告延時函式 10 void delay_1ms(); 11 void delay_1500ms(); 12 13 // 宣告七段顯示器函式 14 void Slect_Seg(unsigned char number); 15 void Display_Seg(unsigned char display); 16 17 //宣告數字的表示 18 char code NUM[10] = { 19 0x3F, // 0 20 0x06, // 1 21 0x5B, // 2 22 0x4F, // 3 23 0x66, // 4 24 0x6D, // 5 25 0x7D, // 6 26 0x07, // 7 27 0x7F, // 8 28 0x6F // 9 29 }; 30 31 char code POS[6] = { 32 ~0x01, // 0xfe 就是 11111110 33 ~0x02, // 0000 0010 34 ~0x04, // 0000 0100 35 ~0x08, // 0000 1000 36 ~0x10, // 0001 0000 37 ~0x20 // 0010 0000 38 }; 39 40 41 // 主程式 42 int main(){ 43 1 44 1 int i, j = 0; 45 1 // 不讓程式結束的無窮迴圈 46 1 while(1) { 47 2 Slect_Seg(POS[i]); // 設定哪顆亮 48 2 Display_Seg(NUM[j]); // 選數字 49 2 delay_1500ms(); // 延時 1.5 秒 50 2 i = (i + 1) % 6; 51 2 j = (j + 1) % 10; 52 2 } 53 1 } 54 C51 COMPILER V9.54 TIMERDELAY_2 05/05/2018 23:54:22 PAGE 2 55 void Slect_Seg(unsigned char number) { 56 1 57 1 // 關閉 D 型正反器(預防措施) 58 1 P2_7 = 0; 59 1 60 1 // 指定哪顆亮 61 1 P0 = number; 62 1 63 1 // 開啟控制哪顆亮的 D 型正反器 64 1 P2_7 = 1; 65 1 66 1 // 延時(吃哪顆亮) 67 1 delay_1ms(); 68 1 69 1 // 關閉 D 型正反器(讓吃進去的那顆固定亮) 70 1 P2_7 = 0; 71 1 } 72 73 void Display_Seg(unsigned char display) { 74 1 75 1 // 關閉 D 型正反器(預防措施) 76 1 P2_6 = 0; 77 1 78 1 // 指定號碼 79 1 P0 = display; 80 1 81 1 // 開啟控制哪顆亮的 D 型正反器 82 1 P2_6 = 1; 83 1 84 1 // 延時(吃號碼) 85 1 delay_1ms(); 86 1 87 1 // 關閉 D 型正反器(讓吃進去的號碼固定住) 88 1 P2_6 = 0; 89 1 } 90 91 92 // 延遲 1ms 93 void delay_1ms(void) { 94 1 //設定為 mode1 95 1 TMOD = 0x10; 96 1 97 1 //設定初始值 98 1 TF1 = 0; 99 1 TR1 = 0; 100 1 TL1 = (65536 - 9) % 256; 101 1 TH1 = (65536 - 9) / 256; 102 1 103 1 //開啟計時器 104 1 TR1 = 1; 105 1 106 1 //當 TF1 沒有溢位 107 1 while(TF1 == 0); 108 1 109 1 //關閉計時器 110 1 TR1 = 0; 111 1 112 1 //將 TF1 歸零 113 1 TF1 = 0; 114 1 } 115 116 // 延遲 1500ms C51 COMPILER V9.54 TIMERDELAY_2 05/05/2018 23:54:22 PAGE 3 117 void delay_1500ms(void) { 118 1 //設定為 mode1 119 1 TMOD = 0x10; 120 1 121 1 //設定初始值 122 1 TF1 = 0; 123 1 TR1 = 0; 124 1 TL1 = (65536 - 13824) % 256; 125 1 TH1 = (65536 - 13824) / 256; 126 1 127 1 //開啟計時器 128 1 TR1 = 1; 129 1 130 1 //當 TF1 沒有溢位 131 1 while(TF1 == 0); 132 1 133 1 //關閉計時器 134 1 TR1 = 0; 135 1 136 1 //將 TF1 歸零 137 1 TF1 = 0; 138 1 139 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 156 ---- CONSTANT SIZE = 16 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 4 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)