搜索
您的当前位置:首页正文

两位计数器编程与设计

来源:六九路网
#include \"reg51.h\"

#define uchar unsigned char #define uint unsigned int

uchar code BitTab[]={0x7F,0xBF,0xDF,0xEF,0xF7,0xFB}; //位驱动码 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; //计数器,显示程序通过它得知现正显示哪个数码管 TH1=(65536-3000)/256;

TL1=(65536-3000)%256; //重置初值 tmp=BitTab[Count]; //取位值 P2=P2|0xfc; //P2与11111100B相或 P2=P2&tmp; //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; //定时器0工作于计数方式1,定时器1工作于定时方式1 TH1=(65536-3000)/256;

TL1=(65536-3000)%256; //定时时间为3000个周期 TR0=1; //计数器0开始运行 TR1=1; EA=1; ET1=1; for(;;)

{ tmp=TL0|(TH0<<8); //取T0中的数值 DispBuf[5]=tmp%10; tmp/=10;

DispBuf[4]=tmp%10; tmp/=10;

DispBuf[3]=tmp%10; tmp/=10;

DispBuf[2]=tmp%10; DispBuf[1]=tmp/10;

DispBuf[0]=0; }}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top