這段程序如果位選數組沒有weinum-1,數碼管的第一位就不會亮,但是我設置的weinum是從零開始的變量,就是對應的第0位數碼管,請問為什么不減一就不亮呢?
#include<reg52.h> //52系列單片機頭文件
typedef unsigned char u8;
typedef unsigned int u16;
sbit dula=P2^6;
sbit wela=P2^7;
u8 a;
u8 duannum,weinum;
u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //數碼管段選值編碼
u8 code smgwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
void display()
{
P0=smgduan[duannum];
dula=1;
dula=0;
P0=smgwei[weinum-1]; //位選變量都是從1開始的,weinu這個值是1,但是在燒錄時相當于從第0位取
wela=1;
wela=0;
}
void main() //主函數
{
TMOD=0x10; //設置定時器1為工作方式1
TH1=(65536-50000)/256; //給定時器1裝初值,12M晶振定時時間為50ms
TL1=(65536-50000)%256;
EA=1; //開總中斷
ET1=1; //開定時器1分開關
TR1=1; //啟動定時器1
while(1)
{
if(a==10)
{a=0;
if(duannum==16)
{
duannum=0;
}
if(weinum==6)
{
weinum=0;
}
duannum++;
weinum++;
display();
}
}
}
void timer1() interrupt 3 //中斷服務程序,其中"3"是定時器1的入口序號
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
a++;
}
|