“寫寫關于數碼管的一些知識筆記”
01段碼
1.共陰數碼管
2.共陽數碼管
02仿真圖
元件有:80C51、button、7SEG-MPX6-CC(共陰數碼管)
數碼管:cc是共陰、ca是共陽
03代碼結構
晶振頻率設置為12MHZ,一條指令的執行時間為10μs。
//*****引入頭文件
#include < reg51.h >
//*****聲明函數和變量、引腳的定義
#define u8 unsigned char //8位無符號數
#define u16 unsigned int //16位無符號數
//*****延時函數的聲明
void Delay();
//*****主函數
void main(){
while(1){
}
}
//*****延時函數:1s
void Delay(){
u16 i,j;
for(i = 0; i < 1000; i++)
for(j = 0; j < 100; j++);
}
04寫入keil的代碼
一、共陰數碼管顯示0~15。
代碼如下:
//*****引入頭文件
#include < reg51.h >
//*****聲明函數和變量、引腳的定義
#define u8 unsigned char
#define u16 unsigned int
sbit button = P1^4; //定義引腳P1^4為按鈕的控制引腳
//******裝有字形碼的數組table_cc --這個是共陰極的
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
//*****延時函數的聲明
void Delay();
//*****主函數
void main(){
u8 i;
P3 = 0x00; //因為是共陰極數碼管,P3連接的是數碼管的陰極,得置低電平,共陰數碼管才能其效果
while(1){
for( i = 0 ; i< 16 ; i++){
P2 = Table_cc[i];
Delay();
}
}
}
//*****延時函數
void Delay(){
u16 i,j;
for(i = 0; i < 1000; i++)
for(j = 0; j < 100; j++);
}
二、用陽極數碼管的字形碼通過共陰的數碼管顯示數字。
【PS:可以將共陰數碼管換成共陽數碼管,我只是偷懶,不想更換,如果更換了數碼管,直接將字形碼全部替換掉就行,不用去修改主函數的內容,共陽的主函數和共陰的主函數是一樣的】
修改字形碼
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
更換為
u8 Table_ca[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};
完整代碼如下:
#include < reg51.h >
#define u8 unsigned char
#define u16 unsigned int
//*****裝有字形碼的數組table_ca --這個是共陽極的
u8 Table_ca[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e
};
void Delay();
void main(){
u8 i;
P3 = 0x00;
while(1){
for( i = 0 ; i< 16 ; i++){
P2 = ~Table_ca[i]; //這里改變了,因為是共陰數碼管,使用共陽字形碼需要將字形碼取反
Delay();
}
}
}
void Delay(){
u16 i,j;
for(i = 0; i < 1000; i++)
for(j = 0; j < 100; j++);
}
05加入按鍵button控制
由圖可知,P1^0和P1^4是線與的關系,只有當P1^0與P1^4都為高電平時,結果才為高電平,如果其中有一個為低電平,結果就為低電平。
那么我們怎么樣才能判斷按鍵是否按下呢?
答案是:我們將其中一個引腳置為低電平,另外一個置為高電平,如果按鍵按下了,置為高電平的引腳會輸出低電平。
//在初始化前,得先定義控制引腳
sbit Key = P1^4;
首先是將P1^0置為低電平,P1^4置為高電平
// 在main函數里面加上這句話
P1 = 0x10; //按鍵控制初始化
完整代碼如下:
#include < reg51.h >
#define u8 unsigned char
#define u16 unsigned int
sbit Key = P1^4;
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void main(){
P3 = 0x00;
P1 = 0x10;
while(1){
if(Key == 0){
P2=Table_cc[1];
}
}
}
未按下按鍵前 ,運行效果如下:
為什么我們沒有運行前,它就已經有數字顯示了呢,因為我們沒有初始化,將P2置為低電平。
將主函數修改為:
void main(){
P3 = 0x00; //片選
P1 = 0x10; //按鍵初始化
P2 = 0x00; //黑屏
while(1){
if(Key == 0){
P2=Table_cc[1];
}
}
}
未按下按鍵前 ,運行效果如下:
按下按鍵后 ,效果如下:
06題外話
之前的案例是建立在我們的P1端口是沒有運行的,是剛剛使用的,剛初始化的,所以我們可以直接將P1賦值為0x10;
但是如果當我們這個P1端口已經在使用中了,我們要在修改P1^0和P1^4的基礎下,不變動P1端口的其它引腳的值,那我們應該這樣做:
P1 = P1 & 0xfe | 0x10;
& 0xfe 是為了將P1^0置為0,使其它引腳電平不變,而 | 0x10 是為了將P1^4 置為 1,使其它引腳電平不變,由此,P1這樣賦值。
-
數碼管
+關注
關注
32文章
1876瀏覽量
90970 -
函數
+關注
關注
3文章
4308瀏覽量
62444 -
keil
+關注
關注
68文章
1212瀏覽量
166701 -
代碼
+關注
關注
30文章
4753瀏覽量
68368 -
共陰數碼管
+關注
關注
0文章
11瀏覽量
7803
發布評論請先 登錄
相關推薦
評論