各位大佬主要看主函數就行
Nixietube_number這個函數就是在數碼管第幾位顯示數字幾
這個代碼運行個位數的時候就沒有問題,把if那段刪了只留else里面的運行兩位數也沒問題,但是使用ifelse的話并不能像我預想中那樣,一位數時只顯示第四個燈,當需要顯示數字為兩位數時再顯示兩個燈
反而在顯示數字為9之后會短暫什么都不顯示,然后第四個燈就開始亂閃
希望大佬能指點一下我為什么用了ifelse顯示就出問題了
單片機源程序如下:
#include <REGX52.H>
void Nixietube_number(int position,int number);
void Delay(long xms);
sbit led1=P1^0;
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
int n=0;
int i=0;
void main()
{
TMOD=0x01;
TH0=(65535-20000)/256;
TL0=(65535-20000)%256;
EA=1;ET0=1;
TR0=1;
while(1)
{
if(0<=n<10)
{
Nixietube_number(4,n);
}
else
{
Nixietube_number(4,n%10);
Nixietube_number(3,n/10);
}
}
}
void Delay(long xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Nixietube_number(int position,int number)
{
unsigned char numberSize[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
switch(position)
{
case 1:
led1=1;led2=0;led3=0;led4=0;break;
case 2:
led1=0;led2=1;led3=0;led4=0;break;
case 3:
led1=0;led2=0;led3=1;led4=0;break;
case 4:
led1=0;led2=0;led3=0;led4=1;break;
}
P2=numberSize[number];
Delay(5);
}
void tiemr0() interrupt 1
{
TH0=(65535-20000)/256;
TL0=(65535-20000)%256;
i++;
if(i==50)
{
i=0;
n=n+1;
}
} |