|
數(shù)碼管延時我用的定時器1,程序是每隔一秒數(shù)碼管加一,LED亮滅一次,如果在主程序內(nèi)調(diào)用數(shù)碼管就能正常工作,放到任意一個定時器內(nèi)調(diào)用都不行,有沒有大神能解解惑,或者我想讓數(shù)碼管全程顯示,后期主程序內(nèi)會有其他循環(huán)程序,如果一次次調(diào)用太麻煩,有沒有什么別的辦法讓數(shù)碼管全程顯示而不影響主程序的方法?(文化水平不高,代碼編的有點菜,望見諒)
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wei=P2^7;//位選,第幾個數(shù)碼管亮
sbit duan=P2^6;
sbit D1=P1^1;
uint xianshu,shi,ge,bai,qian,wan;
uint aa,s,bb;
uchar y;
uchar code smb[]={ //數(shù)碼表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void xshu(uint ge,uint shi,uint bai,uint qian,uint wan);
void delay(uint);//延時子程序聲明
void chushi();//初始化子程序聲明
void main()
{
chushi();
delay(10);
while(1)
{
// xshu(ge,shi,bai,qian,wan);//調(diào)用顯示子程序
if(aa>=10)//定時器進(jìn)入10次中斷
{
D1=1;
if(aa>=19)//定時器進(jìn)入19次中斷
{
D1=0;//點亮LED
aa=0;//定時器進(jìn)入中斷數(shù)清零
s++;//數(shù)碼管顯示的數(shù)字
}
}
}
}
void chushi()//初始化子程序
{
xianshu=0;
TMOD=0x01;
EA=1;//全局中斷總開關(guān)
TH0=(65536-46072)/256;//裝入初值
TL0=(65536-46072)%256;
TR0=1;//打開定時器0
ET0=1;//定時器0允許中斷開關(guān)
TH1=(65536-5072)/256;//裝入初值
TL1=(65536-5072)%256;
TR1=1;//打開定時器1
ET1=1;//定時器0允許中斷開關(guān)
}
void timer0() interrupt 1 //定時器0中斷服務(wù)程序
{
TH0=(65536-46072)/256;//進(jìn)入定時器服務(wù)函數(shù)后,需要重新裝入初值
TL0=(65536-46072)%256;
aa++;
xshu(ge,shi,bai,qian,wan);//調(diào)用數(shù)碼管子程序
}
void timer1() interrupt 3 //定時器1中斷服務(wù)程序
{
TH1=(65536-5072)/256;//進(jìn)入定時器服務(wù)函數(shù)后,需要重新裝入初值
TL1=(65536-5072)%256;
y++;
}
void Delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void xshu(uint ge,uint shi,uint bai,uint qian,uint wan)//數(shù)碼管顯示子程序
{
if(s==65000)//最大65535
{
s=0;//數(shù)碼管顯示清零
}
xianshu=s;//讓數(shù)碼管顯示脈沖s的數(shù)量
wan=xianshu/10000;
qian=xianshu%10000/1000;
bai=xianshu%10000%1000/100;
shi=xianshu%10000%1000%100/10;
ge=xianshu%10;
if(s>=10000)
{
wei=1;
P0=0xfd;
wei=0;
duan=1;
P0=smb[wan];
duan=0;
y=0;//進(jìn)中斷數(shù)清零
while(y<=10);//延時
P0=0xff; //消影
}
if(s>=1000)
{
wei=1;
P0=0xfb;
wei=0;
duan=1;
P0=smb[qian];
duan=0;
y=0;//進(jìn)中斷數(shù)清零
while(y<=10);//延時
P0=0xff; //消影
}
if(s>=100)
{
wei=1;
P0=0xf7;
wei=0;
duan=1;
P0=smb[bai];
duan=0;
y=0;//進(jìn) |
|