單片機計數器C語(yǔ)言練習
該部分的硬件電路如圖所示,U1的P0口和P2口的部份引腳構成了6位LED數碼管驅動(dòng)電路,數碼管采用共陽(yáng)型,使用PNP型三極管作為片選端的驅動(dòng),所有三極管的發(fā)射極連在一起,接到正電源端,它們的基極則分別連到P2.0…P2.5,當P2.0…P2.5中某引腳輸是低電平時(shí),三極管導通,給相應的數碼管供電,該位數碼管點(diǎn)亮哪些筆段,則取決于筆段引腳是高或低電平。圖中看出,所有6位數碼管的筆段連在一起,通過(guò)限流電阻后接到P0口,因此,哪些筆段亮就取決于P0口的8根線(xiàn)的狀態(tài)。
編寫(xiě)程序時(shí),首先根據硬件連線(xiàn)寫(xiě)出LED數碼管的字形碼、位驅動(dòng)碼,然后編寫(xiě)程序如下:
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驅動(dòng)碼
uchar code DispTab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,
0x83,0xC6,0xA1,0x86,0x8E,0xFF}; //字形碼
uchar DispBuf[6]; //顯示緩沖區
void Timer1() interrupt 3
{ uchar tmp;
uchar Count; //計數器,顯示程序通過(guò)它得知現正顯示哪個(gè)數碼管
TH1=(65536-3000)/256;
TL1=(65536-3000)%256; //重置初值
tmp=BitTab[Count]; //取位值
P2=P2|0xfc; //P2與11111100B相或
P2=P2tmp; //P2與取出的位值相與
tmp=DispBuf[Count];//取出待顯示的數
tmp=DispTab[tmp]; //取字形碼
P0=tmp;
Count++;
if(Count==6)
Count=0;
}
void main()
{ uint tmp;
P1=0xff;
P0=0xff;
TMOD=0x15; //定時(shí)器0工作于計數方式1,定時(shí)器1工作于定時(shí)方式1
TH1=(65536-3000)/256;
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
評論