168 lines
5.2 KiB
Plaintext
Executable File
168 lines
5.2 KiB
Plaintext
Executable File
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 <reg51.h>
|
||
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)
|