145 lines
2.2 KiB
C
145 lines
2.2 KiB
C
//第一顆七節碼亮到第六顆七節碼,並一直重複這個過程 ,依序顯示 0 - 9,每個號碼停留 1.5 秒
|
||
|
||
#include <reg51.h>
|
||
|
||
// 宣告 D 型正反器街接腳
|
||
sbit P2_6 = P2^6;
|
||
sbit P2_7 = P2^7;
|
||
|
||
// 宣告延時函式
|
||
void delay_1ms();
|
||
void delay_1500ms();
|
||
|
||
// 宣告七段顯示器函式
|
||
void Slect_Seg(unsigned char number);
|
||
void Display_Seg(unsigned char display);
|
||
|
||
//宣告數字的表示
|
||
char code NUM[10] = {
|
||
0x3F, // 0
|
||
0x06, // 1
|
||
0x5B, // 2
|
||
0x4F, // 3
|
||
0x66, // 4
|
||
0x6D, // 5
|
||
0x7D, // 6
|
||
0x07, // 7
|
||
0x7F, // 8
|
||
0x6F // 9
|
||
};
|
||
|
||
char code POS[6] = {
|
||
~0x01, // 0xfe 就是 11111110
|
||
~0x02, // 0000 0010
|
||
~0x04, // 0000 0100
|
||
~0x08, // 0000 1000
|
||
~0x10, // 0001 0000
|
||
~0x20 // 0010 0000
|
||
};
|
||
|
||
|
||
// 主程式
|
||
int main(){
|
||
|
||
int i = 0, j = 0;
|
||
// 不讓程式結束的無窮迴圈
|
||
while(1) {
|
||
Slect_Seg(POS[i]); // 設定哪顆亮
|
||
Display_Seg(NUM[j]); // 選數字
|
||
delay_1500ms(); // 延時 1.5 秒
|
||
i = (i + 1) % 6;
|
||
j = (j + 1) % 10;
|
||
}
|
||
}
|
||
|
||
void Slect_Seg(unsigned char number) {
|
||
|
||
// 關閉 D 型正反器(預防措施)
|
||
P2_7 = 0;
|
||
|
||
// 指定哪顆亮
|
||
P0 = number;
|
||
|
||
// 開啟控制哪顆亮的 D 型正反器
|
||
P2_7 = 1;
|
||
|
||
// 延時(吃哪顆亮)
|
||
delay_1ms();
|
||
|
||
// 關閉 D 型正反器(讓吃進去的那顆固定亮)
|
||
P2_7 = 0;
|
||
}
|
||
|
||
void Display_Seg(unsigned char display) {
|
||
|
||
// 關閉 D 型正反器(預防措施)
|
||
P2_6 = 0;
|
||
|
||
// 指定號碼
|
||
P0 = display;
|
||
|
||
// 開啟控制哪顆亮的 D 型正反器
|
||
P2_6 = 1;
|
||
|
||
// 延時(吃號碼)
|
||
delay_1ms();
|
||
|
||
// 關閉 D 型正反器(讓吃進去的號碼固定住)
|
||
P2_6 = 0;
|
||
}
|
||
|
||
|
||
// 延遲 1ms
|
||
void delay_1ms(void) {
|
||
//設定為 mode1
|
||
TMOD = 0x10;
|
||
|
||
//設定初始值
|
||
TF1 = 0;
|
||
TR1 = 0;
|
||
TL1 = (65536 - 921) % 256;
|
||
TH1 = (65536 - 921) / 256;
|
||
|
||
//開啟計時器
|
||
TR1 = 1;
|
||
|
||
//當 TF1 沒有溢位
|
||
while(TF1 == 0);
|
||
|
||
//關閉計時器
|
||
TR1 = 0;
|
||
|
||
//將 TF1 歸零
|
||
TF1 = 0;
|
||
}
|
||
|
||
// 延遲 1500ms
|
||
void delay_1500ms(void) {
|
||
//聽說 keil C 只允許把變數宣告放在最前面 QQ
|
||
int k = 0;
|
||
|
||
//設定為 mode1
|
||
TMOD = 0x10;
|
||
|
||
while(k < 150){
|
||
//設定初始值
|
||
TF1 = 0;
|
||
TR1 = 0;
|
||
TL1 = (65536 - 9216) % 256;
|
||
TH1 = (65536 - 9216) / 256;
|
||
|
||
//開啟計時器
|
||
TR1 = 1;
|
||
|
||
//當 TF1 沒有溢位
|
||
while(TF1 == 0);
|
||
k = k + 1;
|
||
}
|
||
|
||
//關閉計時器
|
||
TR1 = 0;
|
||
|
||
//將 TF1 歸零
|
||
TF1 = 0;
|
||
}
|