數(shù)碼管顯示在51單片機(jī)里面也是很經(jīng)典的歷程。因?yàn)镮O口有限,所以數(shù)碼管的數(shù)據(jù)端口與選通端口使用了同樣的IO端口,防止數(shù)據(jù)與選通信號(hào)混亂,這里使用了兩個(gè)鎖存器,用于區(qū)分選通信號(hào)與數(shù)據(jù)信號(hào)。在實(shí)際工程開發(fā)中,IO復(fù)用的情況還是很常見的,所以掌握復(fù)用IO的控制過程就顯得很重要了。 原理圖:
本文引用地址:http://m.butianyuan.cn/article/201611/321307.htm
代碼如下:詳細(xì)說明見注釋。
//在6個(gè)數(shù)碼管上面顯示數(shù)字0-6,時(shí)間間隔是1s。數(shù)碼管1顯示1,1S關(guān)閉,數(shù)碼管2顯示2,1S關(guān)閉~~~~~~~~~~
#include //頭文件
#define uint unsigned int //定義宏--無符號(hào)整型
#define uchar unsigned char //定義宏--無符號(hào)字符型
sbit duanxuan=P2^6; //聲明P2.6端口為段選端
sbit pianxuan=P2^7; //聲明P2.7端口為片(位)選端
void delay_1s(uint); //聲明延時(shí)函數(shù)--延時(shí)一秒
uint xs; //延時(shí)函數(shù)用
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71}; //C語言編碼定義
void main() //主函數(shù)入口
{
xs=20; //參數(shù)越小,就可以實(shí)現(xiàn)6個(gè)數(shù)碼管一起顯示數(shù)字
while(1)
{
pianxuan=1; //打開片選鎖存器
P0=0xfe; //執(zhí)行片選,選擇第1個(gè)數(shù)碼管
pianxuan=0; //關(guān)閉鎖存器,鎖存器輸出端保持不變
P0=0x00;
duanxuan=1; //打開段選端
P0=table[1]; //顯示數(shù)字1
duanxuan=0; //關(guān)閉段選端,數(shù)字保持
delay_1s(xs); //延時(shí)xS
pianxuan=1;
P0=0xfd; //選擇第2個(gè)數(shù)碼管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[2]; //顯示數(shù)字2
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xfb; //選擇第3個(gè)數(shù)碼管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[3]; //顯示數(shù)字3
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xf7; //選擇第4個(gè)數(shù)碼管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[4]; //顯示數(shù)字5
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xef; //選擇第5個(gè)數(shù)碼管
pianxuan=0;
P0=0x00;
duanxuan=1;
P0=table[5]; //顯示數(shù)字5
duanxuan=0;
delay_1s(xs);
pianxuan=1;
P0=0xdf; //選擇第6個(gè)數(shù)碼管
pianxuan=0;
P0=0x00;
delay_1s(xs);
duanxuan=1;
P0=table[6]; //顯示數(shù)字6
duanxuan=0;
delay_1s(xs);
}
}
void delay_1s(uint xs) //延時(shí)函數(shù)主體
{
uint i,j;
for(i=xs;i>0;i--)
{
for(j=10;j>0;j--)
{
}
}
}
以上,數(shù)碼管顯示結(jié)束。
評(píng)論