標(biāo)題:
求問大佬如何將下面的單片機(jī)秒閃爍的顯示不讓它流水式顯示,而讓他同時顯示
[打印本頁]
作者:
攝狐生
時間:
2021-11-11 14:38
標(biāo)題:
求問大佬如何將下面的單片機(jī)秒閃爍的顯示不讓它流水式顯示,而讓他同時顯示
#include "reg51.h"
#define uint unsinged int
#define uchar unsigned char
unsigned char code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰0~9字形碼
unsigned char timer=0,second=0,key=0,c=0;
/*void delay(int s)
{ uchar i,j;
for(i=0;i<s;i++) //延時函數(shù)
for(j=114;j>0;j--);
} */
delay()
{uchar i,j;for(i=0;i<10;i++)for(j=0;j<150;j++);} //void delay(void) {unsigned char i; for(i=0;i<200;i++) }
show ()
{
P2=0x01;P0=~d[second/10]; delay(); //w1=1;w2=0;w3=0;
P2=0x02;P0=~d[second%10]; delay(); //w1=0;w2=1;w3=0;
P2=0x08;P0=~d[c%10]; delay(); } //w1=0;w2=0;w3=1; delay();
void main( )
{
TMOD=0x01;
ET0=1;
EA=1;
second=0;
//show ();
while(1)
//判斷按鍵操作
{if((P3&0x08)==0x00) //判斷按鍵是否按下
{key++;
switch(key)
{case 1:TH0=0xee;TL0=0x00;TR0=1;break;
case 2:TR0=0;break;
case 3:key=0;second=0;break;} // show();
while((P3&0x08)==0x00);}//按鍵消抖
}
}
void int_T0( ) interrupt 1 using 0 //
{TH0=0xee;TL0=0x00;
timer++;
if(timer==200)
{timer=0;second++;show();} //
if(second==59)
{TR0=1;second=0;c++;}
if(c==3)TR0=0;
}
作者:
wyqf
時間:
2021-11-11 16:36
show中的延時函數(shù)的延時時間改短一點,達(dá)到人眼視覺暫留的效果即可
作者:
wulin
時間:
2021-11-12 06:47
樓主這程序好像是3分鐘定時器,為了按鍵不干擾數(shù)碼管顯示,數(shù)碼管掃描要放在中斷中合適位置并且T0不能停,按鍵只控制計數(shù)啟停。改這樣試試。
#include "reg51.h"
#define uint unsinged int
#define uchar unsigned char
unsigned char code d[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰0~9字形碼
unsigned char timer=0,second=0,key=0,c=0,k;
bit sign;
void delay()
{
uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<110;j++);
}
void show ()
{
switch(k)
{
case 0:P2=0x01;P0=~d[second/10];k++;break;
case 1:P2=0x02;P0=~d[second%10];k++;break;
case 2:P2=0x08;P0=~d[c%10];k=0;break;
}
}
void main(void)
{
TMOD=0x01;
TH0=0xee;
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
second=0;
while(1)
{
if((P3&0x08)==0x00) //判斷按鍵是否按下
{
delay();
if((P3&0x08)==0x00) //判斷按鍵是否按下
{
key++;
switch(key)
{
case 1:sign=1;c=0;break;
case 2:sign=0;break;
case 3:key=0;second=0;break;
}
while((P3&0x08)==0x00);
}
}
}
}
void int_T0( ) interrupt 1 using 0
{
TH0=0xee;
TL0=0x00;
if(sign)
{
timer++;
if(timer==200)
{
timer=0;
second++;
}
if(second==60)
{
second=0;
c++;
}
if(c==3)
{
sign=0;
key=0;
}
}
show();
}
復(fù)制代碼
作者:
plb1213
時間:
2021-11-27 18:45
show中的延時函數(shù)的延時時間改短一點,比如100ms
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1