51單片機100例實例之07例
//項目名稱:8位數(shù)碼管上同時顯示多個不同字符
//項目再創(chuàng)作者:科技小宅神
//完成時間:2021/01/19

//項目備注:
//1、本例實現(xiàn)在8位數(shù)碼管上同時顯示多個不同字符。
//2、本例使用了8只集成式7段共陽數(shù)碼管(pruteus中元件標(biāo)識為7seg-mpx8-ca-blu,共陽為ca,共陰為cc),
//? ?所有8個數(shù)碼管的段碼引腳a,b,c,d,e,f,g,dp都是分別并聯(lián)在一起,任何時候發(fā)送的段碼均會傳送到所有數(shù)碼管上,所有的數(shù)碼管的共陽極是獨立的,
//? ?本例中個數(shù)碼管的共陽極分別與8只NPN三極管射極相連,程序運行時,任意時刻僅允許一只數(shù)碼管的共陽極連接+5V,當(dāng)向連接段碼的端口發(fā)送段碼值時,相應(yīng)數(shù)字只會顯示在某一只數(shù)碼管上。
//3、為了使不同數(shù)碼管顯示不同字符,本例使用的是集成式多位數(shù)碼管常用的動態(tài)掃描顯示技術(shù),他利用了人的視覺暫留特征,選通第一只數(shù)碼管時,發(fā)送1的段碼;選通第二只數(shù)碼管時,發(fā)送2的段碼,...
//? ?每次僅選通一只數(shù)碼管,發(fā)送相應(yīng)的段碼,每次切換選通下一數(shù)碼管并發(fā)送相應(yīng)段碼的時間間隔非常短,視覺惰性使人感覺不到字符是一個接一個顯示在不同的數(shù)碼管上的,而會覺得所有的字符很穩(wěn)定的同時顯示在不同數(shù)碼管上。
//? ?在控制兩位數(shù)碼管選通的時間間隔時,要注意全屏的掃描頻率要高于視覺暫留頻率16-20Hz。對于程序中的點亮一位數(shù)碼管的延時時間,我們可以嘗試將延時時間改為其他數(shù)值,觀察會出現(xiàn)什么樣的效果
#include <reg52.h>
#include <intrins.h>//C51內(nèi)部移位函數(shù)
#define uchar unsigned char
#define uint? unsigned int
//7-seg數(shù)碼管數(shù)組
uchar code DSY_CODE[11]=
{
? 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff
};//顯示012345678
//1毫秒延時子程序
void DelayMS(uint x)
{
? uchar i;
while(x--)
{
for(i=120;i>0;i--);
}
}
//主程序
void main()
{?
uchar i,k=0x80; //常量定義
P3 = 0xff;? ? ? ?//先關(guān)閉數(shù)碼管
P2 = 0x00;? ? ? ?
while(1)//死循環(huán)
{
for(i=0;i<8;i++)
{
P2=0x00;//關(guān)閉顯示
k=_crol_(k,1);//逐次循環(huán)左移
P2=k; //發(fā)送位碼
P3=DSY_CODE[i+1];//發(fā)送數(shù)字段碼
DelayMS(2); //延時
}
}
}