七節顯示器實驗案例程序分享
大小:0.1 MB 人氣: 2017-09-06 需要積分:0
1、4個七節顯示器跑馬燈實驗
/* ch05-4-3.c - 4個七節顯示器跑馬燈實驗,P1.0~3 為掃描信號 P2接七節顯示器 *///==聲明區==================================
#include?
#define?SCANP?P1??// 定義掃瞄碼由Port 1輸出?
#define?SEG7P?P2??// 定義七節顯示碼由Port 2輸出?
char code TAB[11]={?0xc0, 0xf9, 0xa4, 0xb0, 0x99,???// 數字0-4
???? ??0x92, 0x83, 0xf8, 0x80, 0x98, 0xbf };?// 數字5-9,-
#define? counts? 6??// 聲明字組數量?
char disp[counts+7]={10,10,10,10,1,2,3,4,5,6,10,10,10};??//----123456---?
void delay1ms(int);??// 聲明延遲函數?
void scanner(char);??// 掃瞄函數?
//==主程序===================================
main()?????// 主程序開始?
{?char i;????// 聲明變數i
?while(1)???// 無窮循環,程序一直跑?
??for(i=0;i
}??????// 主程序結束?
//==子程序====================================
/* 延遲函數,延遲約x*1ms */
void delay1ms(int x)?// 延遲函數開始?
{?int i,j;???// 聲明整數變數i,j?
?for (i=0;i
}??????// 延遲函數結束?
/* 掃瞄字組函數,顯示第x組數字 */
void scanner(char x)?// 掃瞄字組函數開始?
{?char i,j,BCD,scan;?// 聲明變數?
?for (i=0;i<30;i++)?// 掃瞄30次i循環?
?{?scan=0xf7;??// 掃瞄信號初值1111 0111
??for (j=0;j<4;j++)?// 掃瞄4個數字j循環?
??{?SEG7P=0xff;?// 關閉七段顯示器(防止閃動)
???SCANP=scan;?// 輸出掃瞄信號(低4位元)
???BCD=disp[x+j];?// 讀取第x組第j個數字之BCD碼?
???SEG7P=TAB[BCD];?// 輸出至七節顯示器?
???delay1ms(4);?// 延遲4ms
???scan>>=1;?// 產生下個掃瞄信號?
??}????// 結束掃瞄4個數字j循環?
?}?????// 結束掃瞄30次i循環?
}??????//?scanner函數結束?
?
2、直接驅動4位七節顯示器實驗
/* ch05-4-2.c - 直接驅動4位七節顯示器實驗,P1.0~3為掃描信號 P2接七節顯示器 *///==聲明區====================================
#include?
#define?SCANP?P1???// 定義掃瞄碼由Port 1輸出?
#define?SEG7P?P2???// 定義七節顯示碼由Port 2輸出?
char code TAB[10]={?0xc0, 0xf9, 0xa4, 0xb0, 0x99,?//數字0-4
????? ?0x92, 0x83, 0xf8, 0x80, 0x98 };?//數字5-9
char code disp[2][4]={?{2,0,0,8},?// 顯示資料(第0組)
??????{0,3,1,5}}; // 顯示資料(第1組)
void delay1ms(int);????// 聲明延遲函數?
void scanner(char);????// 掃瞄函數?
//==主程序====================================
main()???????//?主程序開始?
{?char i,j;?????//?聲明變數i,j
?while(1)?????//?無窮循環,程序一直跑?
?{?for(i=0;i<2;i++)??//?顯示第0,1行字組,for循環(字組i)開始?
???for(j=0;j<3;j++)?//?閃爍三次?
???{?scanner(i);??//?掃瞄第i行字組?
????SCANP=0xff;??//?全滅?
????delay1ms(480);?//?延遲480 1m=0.48s
???}
?}???????//?while循環結束?
}????????//?主程序結束?
//==子程序====================================
/* 延遲函數,延遲約x 1ms */
void delay1ms(int x)???// 延遲函數開始?
{?int i,j;?????// 聲明整數變數i,j?
?for (i=0;i
}????????// 延遲函數結束?
/* 掃瞄字組函數,顯示第x組數字 */
void scanner(char x)???// 掃瞄字組函數開始
{?char i,j,BCD,scan;???// 聲明變數?
?for (i=0;i<30;i++)???// 掃瞄30次i循環?
?{?scan=0xf7;????// 掃瞄信號初值1111 0111
??for (j=0;j<4;j++)??// 掃瞄4個數字j循環?
??{?SEG7P=0xff;???// 關閉七段顯示器(防止閃動)
???SCANP=scan;???// 輸出掃瞄信號(低4位元)
???BCD=disp[x][j];??// 讀取第x組第j個數字之BCD碼?
???SEG7P=TAB[BCD];??// 輸出至七節顯示器?
???delay1ms(4);??// 延遲4ms
???scan>>=1;???// 產生下個掃瞄信號?
??}??????// 結束掃瞄4個數字j循環?
?}???????// 結束掃瞄30次i循環?
}????????//?scanner函數結束?
?
3、7447解碼之4位數七節顯示器實驗
/* ch05-4-1.c -7447解碼之4位數七節顯示器實驗,P1.3~0為掃描信號,P1.7~4接7447 *///==聲明區=================================
#include?
#define?SCANP? P1????//?定義掃瞄信號由P1輸出?
char code disp[2][4]={?{2,0,0,8},?//?顯示資料(第0組)
??????{0,3,1,5}}; //?顯示資料(第1組)
void delay1ms(int);????//?聲明延遲函數?
void scanner(char);????//?掃瞄函數?
//==主程序=================================
main()???????//?主程序開始?
{?char i,j;?????//?聲明變數i,j
?while(1)?????//?無窮循環,程序一直跑?
?{?for(i=0;i<2;i++)??//?顯示第0,1列字組,for循環(字組i)開始?
???for(j=0;j<3;j++)?//?閃爍三次?
???{?scanner(i);??//?掃瞄第i列字組?
????SCANP=0xff;??//?全滅?
????delay1ms(480);?//?延遲480 1m=0.48s
???}
?}???????//?while循環結束?
}????????//?主程序結束?
//==子程序====================================
/* 延遲函數,延遲約x 1ms */
void delay1ms(int x)???//?延遲函數開始?
{?int i,j;?????//?聲明整數變數i,j?
?for (i=0;i
}????????//?延遲函數結束?
/* 掃瞄字組函數,顯示第x組數字 */
void scanner(char x)???//?掃瞄字組函數開始
{?char i,j,BCD,scan;???//?聲明變數?
?for (i=0;i<30;i++)???//?掃瞄30次i循環?
?{?scan=0xf7;????//?掃瞄信號初值1111 0111
??for (j=0;j<4;j++)??//?掃瞄4個數字j循環?
??{?BCD=disp[x][j];??//?讀取第x組第j個數字之BCD碼?
???SCANP=(BCD<<4)|(scan&0x0f);
???// 輸出BCD碼(高4位元)與掃瞄信號(低4位元)
???delay1ms(4);??//?延遲4ms
???scan>>=1;???//?產生下個掃瞄信號?
??}??????//?結束掃瞄4個數字j循環?
?}???????//?結束掃瞄30次i循環?
}????????//?scanner函數結束?
?
?
?
4、七節顯示器實驗程序
/* ch03-3-4.c - 七節顯示器實驗程序? *///==聲明區=====================================
#include?
#define?SEG?P0??//?定義七節顯示器接至Port 0
/* 聲明七節顯示器驅動信號陣列(共陽) */
char code TAB[10]={?0xc0, 0xf9, 0xa4, 0xb0, 0x99,?// 數字0-4
?????0x92, 0x83, 0xf8, 0x80, 0x98 };?// 數字5-9
void delay(int);??//?聲明延遲函數?
//==主程序=====================================
main()?????//?主程序開始?
{?unsigned char i;?//?聲明無號數字元變數i
?while(1)???//?無窮循環,程序一直跑?
??for(i=0;i<10;i++)?//?顯示0-9,共10次?
?{?SEG=TAB[i];??//?顯示數字?
???delay(500);?//?延遲500 1m=0.5秒?
??}????//?for循環結束?
}??????//?主程序結束?
//==子程序=====================================
/* 延遲函數,延遲約x 1ms */
void delay(int x)??//?延遲函數開始?
{?int i,j;???//?聲明整數變數i,j?
?for (i=0;i
}??????//?延遲函數結束?
?
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%