藍橋杯微控制器必備知識-----(1)顯示函式

南岸青梔*發表於2020-11-20

藍橋杯微控制器必備知識---------(1)顯示函式

全域性變數

code unsigned char tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//共陽極斷碼值0~9,10為全滅
uchar dspbuf[8] = {10, 10, 10, 10, 10, 10, 10, 10 };

主函式

void main()
{
	cls_buzz(); 	//關閉buzz
	AUXR = 0x80;	//將定時器0設定為12分頻,定時器時鐘1T模式
	TMOD = 0x30;	//遮蔽定時器1,設定定時器0為定時模式
	TL0 = 0xcd;		//填入初始值,設定時間為1ms
	TH0 = 0xd4;
	TF0 = 0;		//清除TF0標誌
	TR0 = 1;		//定時器0開始計時
	ET0 = 1;		//允許定時器0中斷
	EA = 1;			//開啟CPU總中斷允許
	while(1){};		//死迴圈
}

中斷函式

void time0(void) interrupt 1
{
	display();
}

顯示函式

//顯示函式
void display()
{
	static unsigned char dspcom = 0;
	P2 = (P2 & 0x1f) | 0xe0;	//消影
	P0 = 0xff;
	P2 = 0x1f;

	P2 = (P2 & 0x1f) | 0xc0;	//位選
	P0 = 1 << dspcom;
	P2 = 0x1f;

	P2 = (P2 & 0x1f) | 0xe0;	//顯示
	P0 = tab[dspbuf[dspcom]];
	P2 = 0x1f;

	if (++dspcom == 8) dspcom = 0;

}

測試的時候,可以將dspbuf[]中的值,全部置為1;
以下是測試結果
在這裡插入圖片描述

整個程式碼貼上

#include <stc15f2k60s2.h>

#define uchar unsigned char
#define uint unsigned int

code unsigned char tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//共陽極斷碼值0~9,10為全滅
uchar dspbuf[8] = {10, 10, 10, 10, 10, 10, 10, 10 };

void main()
{
	cls_buzz(); 	//關閉buzz
	AUXR = 0x80;	//將定時器0設定為12分頻,定時器時鐘1T模式
	TMOD = 0x30;	//遮蔽定時器1,設定定時器0為定時模式
	TL0 = 0xcd;		//填入初始值,設定時間為1ms
	TH0 = 0xd4;
	TF0 = 0;		//清除TF0標誌
	TR0 = 1;		//定時器0開始計時
	ET0 = 1;		//允許定時器0中斷
	EA = 1;			//開啟CPU總中斷允許
	while(1){};		//死迴圈
}

void time0(void) interrupt 1
{
	display();
}

void display()
{
	static unsigned char dspcom = 0;
	P2 = (P2 & 0x1f) | 0xe0;	//消影
	P0 = 0xff;
	P2 = 0x1f;

	P2 = (P2 & 0x1f) | 0xc0;	//位選
	P0 = 1 << dspcom;
	P2 = 0x1f;

	P2 = (P2 & 0x1f) | 0xe0;	//顯示
	P0 = tab[dspbuf[dspcom]];
	P2 = 0x1f;

	if (++dspcom == 8) dspcom = 0;

}

AUXR 輔助暫存器

在這裡插入圖片描述

定時器0,1相關暫存器

在這裡插入圖片描述
在這裡插入圖片描述