當前位置:編程學習大全網 - 編程語言 - 單片機數碼管動態顯示

單片機數碼管動態顯示

下面是用段選和位選的數碼管動態顯示程序,可以參照下寫法

#include <AT89X51.H>

unsigned char dispbitcnt; //數碼管位碼掃描變量

unsigned char second;

//秒變量

unsigned char minite;

//分變量

unsigned char hour;

//時變量

unsigned char tcnt;

//秒信號產生變量

unsigned char mstcnt;

//掃描時間變量

const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};

//0123456789段碼

const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};

//123456位碼

unsigned char dispbuf[6]={0,0,0,0,0,0};

//緩沖數組

//**************TMR0中斷數碼管掃描程序*********************

void Timer0() interrupt 1

{

P2=dispcode[dispbuf[dispbitcnt]];//段碼

P1=dispbitcode[dispbitcnt];//位碼

dispbitcnt++;

if(dispbitcnt==6)

{dispbitcnt=0;<br> }

tcnt++;

//中斷產生秒信號

if(tcnt==244)

{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }

}

}

dispbuf[4]=second%10;

dispbuf[5]=second/10;

dispbuf[2]=minite%10;

dispbuf[3]=minite/10;

dispbuf[0]=hour%10;

dispbuf[1]=hour/10;

}

TMOD=0x01;

TL0=0x10;

TH0=0xf0;

}

///****************1ms延時程序******************

void delay_1ms(unsigned char i)

{

unsigned char j;

for(i=0;i<144;i++)

for(j=0;j<144;j++);

}

//*************主程序********************

void main(void)

{

TMOD=0x01;

TL0=0x10;

TH0=0xf0;

while(1)

{

dispbitcnt=0;

P1=0x00;

//開段碼

P2=0x00;

//開位碼

delay_1ms(200);

//延時

delay_1ms(200);

//延時

delay_1ms(200);

//延時

delay_1ms(200);

//延時

P2=0xff;

//關位碼

EA=1;

ET0=1;

TR0=1;

while(1);

}

}

  • 上一篇:小車交通違章扣分罰款細則
  • 下一篇:初入職場如何從“學生思維”轉變為“職場思維”
  • copyright 2024編程學習大全網