/*
說明:對于數(shù)碼管來說,其本質(zhì)上可以理解為按照一定規(guī)則組合的多個二極管。其使用只需按照特定規(guī)則顯示對應(yīng)的二極管即可。要稍微注意一點的就是多個數(shù)碼管的顯示分為靜態(tài)顯示和動態(tài)顯示。靜態(tài)顯示就是每個二極管顯示的內(nèi)容是一樣的,通過片選信號來決定是哪個二極管該顯示。動態(tài)數(shù)碼管,即利用人眼的視覺停留效果,快速掃描,快速顯示每個數(shù)碼管的內(nèi)容,使得每個數(shù)碼管看起來好像是一起顯示的一樣。
本實驗編寫了幾個數(shù)碼管顯示的簡單程序。在此不做贅述了。
*/
#include
#define uchar unsigned char
//共陽極段碼(a在高位,dp在低位)
uchar code _data[16] = {0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09,
0x11,0xC1,0x63,0x85,0x61,0x71
};
//共陽極段碼(a在低位,dp在高位)
uchar code _data1[16] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,
0x83,0xC6,0xA1,0x86,0x8E
};
void delay_ms(unsigned int n)
{
unsigned int i=0,j=0;
for(i=0;i for(j=0;j<123;j++); } //一位數(shù)碼管循環(huán)顯示0-F(共陽極) void OneNixieTube() { uchar i = 0; while(1) { for(i = 0;i<16;++i) { P2 = _data1[i]; delay_ms(1000); } } } //靜態(tài)數(shù)碼管循環(huán)顯示0-8 void StaticNixieTube() { uchar i = 0,temp = 0; while(1) { for(i = 0;i<16;++i) { //片選部分 if(i%8 == 0) temp = 0x01; else temp = temp<<1; P0 = ~temp; //P0為片選輸出端口,低電平有效 //顯示部分 P2 = ~_data1[i]; //P2為顯示輸出端口 delay_ms(1000); } } } //動態(tài)數(shù)碼管顯示(0-7,8-F,8個數(shù)碼管分兩次顯示) void DynamicNixieTube() { uchar i = 0; unsigned int delay_time = 0; //0-7 8-F每段的延時時間 uchar CS[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //片選碼 while(1) { if(delay_time++ < 250) { //0-7段顯示 for(i = 0;i < 8;++i) { P0 = CS[i]; P2 = ~_data1[i]; delay_ms(1); //延時極小的時間間隔,人眼察覺不出來 } } else if(delay_time++ < 500 ) //???都是循環(huán)250次,為什么0-7段顯示的時間長于8-F段顯示的時間??? { //8-F段顯示 for(i = 0;i < 8;++i) { P0 = CS[i]; P2 = ~_data1[i+8]; delay_ms(1); //延時極小的時間間隔,人眼察覺不出來 } } else delay_time = 0; //重新置零 } } //數(shù)碼管顯示指定時間格式為 HH-MM-SS void DisplayTime(uchar hour,uchar min,uchar sec) { uchar time[8] = {0}; uchar i = 0,j = 0; uchar CS[8] = {0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //片選碼 //獲取時間的每位信息 if(hour >= 0 && hour <=23 ) { time[0] = hour / 10; time[1] = hour % 10; time[2] = ':'; } if(min >= 0 && min <= 59) { time[3] = min /10; time[4] = min % 10; time[5] = ':'; } if(sec >= 0 && sec <= 59) { time[6] = sec / 10; time[7] = sec % 10; } //顯示部分 for(i = 0;i<7;++i) { for(i = 0;i < 8;++i) { P0 = CS[i]; //片選 //顯示時間 if(i != 2 && i != 5) { j = time[i]; P2 = ~_data1[j]; } else //顯示分隔符‘-’ { j = 0xBF; P2 = ~j; } delay_ms(1); //延時極小的時間間隔,人眼察覺不出來 } } } int main() { // OneNixieTube(); // StaticNixieTube(); //DynamicNixieTube() //DisplayTime(12,40,56); return 0; }
上一篇:C51之外部中斷
下一篇:51單片機之按鍵實驗
推薦閱讀
史海拾趣
設(shè)計資源 培訓(xùn) 開發(fā)板 精華推薦
- 孚能科技全固態(tài)電池中試線年底建成,能量密度超400Wh/kg
- 比亞迪新專利:電池尺寸不變,續(xù)航大幅提升
- 豐田子公司37億大連建廠首次在中國生產(chǎn)純電汽車電池
- 博泰車聯(lián)網(wǎng)沖刺港股:上海灘走出的汽車智能化隱形冠軍
- 從自動駕駛到具身智能,激光雷達(dá)緣何一邊被嫌棄,一邊被追捧?
- 軟件定義車輛改變汽車行業(yè)的3種方式
- 混合動力汽車也是超級跑車:強調(diào)性能,而不是里程
- 人形機器人風(fēng)口下,六維力傳感器成為國產(chǎn)廠商“卡位”關(guān)鍵點
- AURIX? TC4x虛擬化技術(shù)詳解
- 從荔枝的“鮮和煎”,看英特爾銳炫Pro B60的AI空間折疊魔術(shù)