MSP430学习笔记6-动态数码管的显示
這個(gè)程序主要部分是我改寫的,程序把看門狗當(dāng)做普通定時(shí)器使用,在看門狗中斷中進(jìn)行數(shù)碼管掃描,另外我加入了顯示的緩沖區(qū),想在數(shù)碼管上顯示什么數(shù)字只需要對(duì)緩沖數(shù)組中的值進(jìn)行操作即可。最后加入了小數(shù)點(diǎn)的操作,可以很方便的加入小數(shù)點(diǎn),程序如下:
/********************************************** 程序功能:在八位數(shù)碼管上顯示任意數(shù)字 ----------------------------------------------- 撥碼開關(guān)設(shè)置:將SMG位撥至ON,其余撥至OFF 測(cè)試說(shuō)明:觀察數(shù)碼管顯示 ***********************************************/ #include <msp430x14x.h> typedef unsigned char uchar; //數(shù)碼管7位段碼:0--f uchar scandata[16] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//段碼 uchar dispbitcode[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//將端口的片選信號(hào)編碼 uchar disbuf[8] = {8,8,1,3,1,9,4,2};//存放要顯示的數(shù)據(jù) //記錄顯示位數(shù)的全局變量 uchar cnt = 0;//用來(lái)掃描計(jì)數(shù) uchar dotn = 2;//用來(lái)選擇第幾位后面顯示小數(shù)點(diǎn) /********************主函數(shù)********************/ void main(void) { /*下面六行程序關(guān)閉所有的IO口*/ P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P6OUT = 0XFF; //這里面看門狗用作普通的定時(shí)器,要來(lái)對(duì)數(shù)碼管進(jìn)行動(dòng)態(tài)掃描,如果看門狗有其他作用 //可以用定時(shí)器代替 WDTCTL = WDT_ADLY_1_9; // 設(shè)置內(nèi)部看門狗工作在定時(shí)器模式,1.9ms中斷一次 //可以去看頭文件中具體的配置,這里使用的手表晶振64分頻計(jì)算可得是1.9ms IE1 |= WDTIE; // 使能看門狗中斷 P6DIR |= BIT2;P6OUT |= BIT2; //關(guān)閉電平轉(zhuǎn)換 P5DIR = 0xff; //設(shè)置P4,P5的IO方向?yàn)檩敵?P4DIR = 0xff; P5OUT = 0x00; //設(shè)置P4,P5的輸出初值 P4OUT = 0xff; _BIS_SR(LPM3_bits + GIE); //CPU進(jìn)入LPM3低功耗模式,同時(shí)打開全局中斷 //這個(gè)地方要注意LPM3低功耗模式下其他時(shí)鐘源是關(guān)閉的,只能使用ACLK時(shí)鐘源 } /******************************************* 函數(shù)名稱:watchdog_timer 功 能:看門狗中斷服務(wù)函數(shù),在這里輸出數(shù)碼管的 段選和位選信號(hào) 參 數(shù):無(wú) 返回值 :無(wú) ********************************************/ #pragma vector=WDT_VECTOR __interrupt void watchdog_timer(void) { P4OUT = 0xff; uchar temp; if(cnt == (dotn-1))//判斷要不要顯示小數(shù)點(diǎn) { temp = scandata[disbuf[cnt]]&0x7F;//如果要顯示的就將要顯示的段碼先進(jìn)行一步運(yùn)算 P5OUT = temp; } else P5OUT = scandata[disbuf[cnt]]; //輸出段選信號(hào) P4OUT ^= dispbitcode[7-cnt]; //輸出位選信號(hào)由于用了三極管驅(qū)動(dòng),實(shí)際是低電平選通因此翻一下。 //發(fā)現(xiàn)顯示的順序是倒著的,減一下把順序正過(guò)來(lái) cnt++; //位計(jì)數(shù)變量在0~8之間循環(huán) if(cnt == 8) cnt = 0; }
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的MSP430学习笔记6-动态数码管的显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: WORD中怎么把文字转换成表格
- 下一篇: 软考资料免费下载