这段程序如果位选数组没有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++;
}
|