如果把LED()放在while1里,按鍵之前波形和數碼管正常顯示,按鍵之后沒有波形和數碼管也不正常顯示;如果把LED()放在定時器中斷函式里數碼管能隨著按鍵正常顯示,但是一直沒有波形。求助大佬是數碼管顯示函式有問題,還是什么。PS:不加LED()時功能都是正常的。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
float fosc=33000000;
uchar duanma1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //不帶小數點的共陽極段碼
uchar duanma2[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; //帶小數點的共陽極段碼
uchar weima[]={0x01,0x02,0x10,0x20};
sbit KEY1=P1^0;
sbit KEY2=P1^1;
sbit KEY3=P1^2;
sbit KEY4=P1^3;
sbit OUT=P3^0;
sbit OUTBAR=P3^1;
sbit P3_2=P3^2;
uchar zkb;
uint freq;
uint TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;
void delay(uchar n)
{
uchar i;
while(n--)
{for(i=255;i>0;i--)
{}
}}
void chushihua(void)
{
P1=0x0f;
freq=5000;
zkb=50;
P3_2=1;
TIMER0_L=0xda;
TIMER0_H=0xfd;
TIMER1_L=0xed;
TIMER1_H=0xfe;
TL0=0xda;
TH0=0xfd;
TL1=0xed;
TH1=0xfe;
TMOD=0x11;
IT0=1;
EX0=1;
ET0=1;
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
void LED()
{
uint m;
for(m=1;m<=4;m++)
{
P2=weima[m-1];
switch (m)
{
case 1:P0=duanma2[freq/1000];break;
case 2:P0=duanma1[freq/100%10];break;
case 3:P0=duanma2[0];break;
case 4:P0=duanma1[zkb/10];break;
}
delay(10);
}
}
void main(void)
{
chushihua();
while(1)
{
LED();
}
}
void Timer0_freq() interrupt 1
{
TL0=TIMER0_L;
TH0=TIMER0_H;
OUT=1;
OUTBAR=0;
TR1=1;
}
void Timer1_zkb() interrupt 3
{
TL1=TIMER1_L;
TH1=TIMER1_H;
TR1=0;
OUT=0;
OUTBAR=1;
}
void keyscan() interrupt 0 using 1
{
float TF0,TZ1;
EX0=0;
delay(10);
if(P1!=0x0f)
{
if(KEY1==0) freq+=500;
if(KEY2==0) freq-=500;
if(freq>9500) freq=9500;
if(freq<500) freq=500;
if(KEY3==0) zkb+=10;
if(KEY4==0) zkb-=10;
if(zkb>90) zkb=90;
if(zkb<10) zkb=10;
TF0=(65536-fosc/(12.0*freq));
TZ1=(65536-(fosc*zkb)/(12.0*100*freq));
TIMER0_H=(uint)TF0/256;
TIMER0_L=(uint)TF0%256;
TIMER1_H=(uint)TZ1/256;
TIMER1_L=(uint)TZ1%256;
}
P1=0x0f;
EX0=1;
TR0=1;
TR1=1;
P3_2=1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/9917.html
標籤:單片機/工控
上一篇:有沒有大哥啊幫忙看看這怎么解決啊
