這個程式主要部分是我改寫的,程式把看門狗當做普通定時器使用,在看門狗中斷中進行數位管掃描,另外我加入了顯示的緩沖區,想在數位管上顯示什麼數字隻需要對緩沖數組中的值進行操作即可。最後加入了小數點的操作,可以很友善的加入小數點,程式如下:
/**********************************************
程式功能:在八位數位管上顯示任意數字
-----------------------------------------------
撥碼開關設定:将SMG位撥至ON,其餘撥至OFF
測試說明:觀察數位管顯示
***********************************************/
#include <msp430x14x.h>
typedef unsigned char uchar;
//數位管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};//将端口的片選信号編碼
uchar disbuf[8] = {8,8,1,3,1,9,4,2};//存放要顯示的資料
//記錄顯示位數的全局變量
uchar cnt = 0;//用來掃描計數
uchar dotn = 2;//用來選擇第幾位後面顯示小數點
/********************主函數********************/
void main(void)
{
/*下面六行程式關閉所有的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;
//這裡面看門狗用作普通的定時器,要來對數位管進行動态掃描,如果看門狗有其他作用
//可以用定時器代替
WDTCTL = WDT_ADLY_1_9; // 設定内部看門狗工作在定時器模式,1.9ms中斷一次
//可以去看頭檔案中具體的配置,這裡使用的手表晶振64分頻計算可得是1.9ms
IE1 |= WDTIE; // 使能看門狗中斷
P6DIR |= BIT2;P6OUT |= BIT2; //關閉電平轉換
P5DIR = 0xff; //設定P4,P5的IO方向為輸出
P4DIR = 0xff;
P5OUT = 0x00; //設定P4,P5的輸出初值
P4OUT = 0xff;
_BIS_SR(LPM3_bits + GIE); //CPU進入LPM3低功耗模式,同時打開全局中斷
//這個地方要注意LPM3低功耗模式下其他時鐘源是關閉的,隻能使用ACLK時鐘源
}
/*******************************************
函數名稱:watchdog_timer
功 能:看門狗中斷服務函數,在這裡輸出數位管的
段選和位選信号
參 數:無
傳回值 :無
********************************************/
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
uchar temp;
if(cnt == (dotn-1))//判斷要不要顯示小數點
{
temp = scandata[disbuf[cnt]]&0x7F;//如果要顯示的就将要顯示的段碼先進行一步運算
P5OUT = temp;
}
else
P5OUT = scandata[disbuf[cnt]]; //輸出段選信号
P4OUT ^= dispbitcode[7-cnt]; //輸出位選信号由于用了三極管驅動,實際是低電平選通是以翻一下。
//發現顯示的順序是倒着的,減一下把順序正過來
cnt++; //位計數變量在0~8之間循環
if(cnt == 8) cnt = 0;
本文轉自emouse部落格園部落格,原文連結:http://www.cnblogs.com/emouse/archive/2010/07/22/2198219.html,如需轉載請自行聯系原作者