在上次51單片機課程中老師布置了一個小作業
作業要求:
四位數碼管閃爍顯示H66S,且要求中間數字為66倒計時,
代碼思路類似于兩位倒計時,只不過第一位和第四位固定顯示而已,
參考代碼分享給小伙伴:
#include <reg52.h>
sbit LSA=P1^5;
sbit LSB=P1^6;
sbit LSC=P1^7;
unsigned int cnt=0;
signed char sec;
signed char sec_all=66;
signed char count=0;
unsigned char smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90,0x89};
void timer10ms()
{
TMOD = 0x00; //????T0??????
TMOD = 0x01; //éè??T0?£ê??a01
TL0 = -9216%256; //??êy?μ×°??
TH0 = -9216/256;
ET0 = 1; //ê1?üT0?D??
}
void EXINT0() interrupt 0
{
count++;
}
void Timer0() interrupt 1
{
TH0 = -9216/256;
TL0 = -9216%256;
cnt++; //?D??′?êy?óò?
if (cnt >= 100) //?D??50′?=1s
{
cnt = 0;
sec--;
if (sec < 0) //μ±??ê?êy?μμ?0ê±£?éá??
{
sec = 0;
}
}
}
void ledscan(unsigned char wei,unsigned char display)
{
unsigned char i;
for(i=0;i<=wei;i++)
{
P0=display;
switch(wei) //????
{
case(0):
LSA=1;LSB=0;LSC=0; break; //??ê?μú0??
case(1):
LSA=0;LSB=1;LSC=0; break; //??ê?μú1??
case(2):
LSA=1;LSB=1;LSC=0; break; //??ê?μú2??
case(3):
LSA=0;LSB=0;LSC=1; break; //??ê?μú3??
}
P0=0xff;LSA=1;LSB=1;LSC=1;//??òt
}
}
void delayms(unsigned int xms)
{
int i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main(void)
{
LSA = 0;
LSB = 0;
LSC = 0;
cnt = 0;
sec = sec_all;
timer10ms();
EA=1;
IT0=1;
EX0=1;
TR0=1;
while(1)
{
if(count%2==0)
{
TR0 = 1;
}
else
{
TR0 = 0;
}
if((cnt>50))
{
ledscan(0,0xff); //??ê?????
ledscan(1,0xff); //??ê?ê???
ledscan(2,0xff);
ledscan(3,0xff);
}
else
{
ledscan(0,smgduan[5]);
ledscan(1,smgduan[sec%10]); //??ê?????
ledscan(2,smgduan[sec/10]); //??ê?ê???
ledscan(3,smgduan[10]);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224869.html
標籤:其他
上一篇:CVPR2020 Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector論文翻譯
下一篇:2020-11-18
