为什么它提示我少了一个分号 ;我是按这别人程序打的,会不会是我的keli有点问题啊(过几天就要交了)
谢谢,我解决了,是我创建工程的时候“Copy 'STARTUP.A51'to project folder and add file to project”的时候选择了是,应该要选择否
第四行 unnsigned int是什么东西?unit又是什么东西?
viod又是什么东西???
天啊,你学过C语言吗?
为什么数码管滚动?
因为两个位选之间有延时,延时大了,人眼可分辨出来,其实只能控制一个数码管,上一个亮了然后消影,延时后刚好下一个亮。
发现诀窍:重要、重要、重要
静态数码管几个数码管共同点亮,这是利用人眼分辨率低,其实这些数码管已经经历了亮灭,这个亮然后灭,下一个再亮,延时太低,就会导致以为数码管都一直亮着。
数码管亮度控制,当段选后需要一个延时然后消影。然后在一个延时,下一个点亮(位选确定),这两个延时就导致数码管亮度变化。第一个延时长,第二个短,表示数码管亮的时间长,灭队时间短,有占空比理解,则亮度高,反之亮度很低。详细代码见程序二。
先执行Nixie()函数
Nixie(i,i);
执行Nixie()函数延时200毫秒。段选后有延时,点亮200毫秒
P0=Nixie_Value[number];
Delay(200);//延时时间要灵活,这是一个变化的值
P0=0X00;
两个位选之间100毫秒延时,其实是熄灭100毫秒
Nixie(i,i);
Delay(100);
这两个延时就控制了数码管亮度,亮200灭100
程序一、数码管显示1-8不滚动
因此若想数码管都亮着则需要延时很短,可以消影和位选间没有延时。下面这个程序实现数码管显示1-8
#include <regx52.h>
sbit LS_A=P2^2;
sbit LS_B=P2^3;
sbit LS_C=P2^4;
unsigned code Nixie_Value[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char location,unsigned char number)
{ switch(location)
{
case 1: LS_A=0;LS_B=0;LS_C=0; break;
case 2: LS_A=1;LS_B=0;LS_C=0; break;
case 3: LS_A=0;LS_B=1;LS_C=0; break;
case 4: LS_A=1;LS_B=1;LS_C=0; break;
case 5: LS_A=0;LS_B=0;LS_C=1; break;
case 6: LS_A=1;LS_B=0;LS_C=1; break;
case 7: LS_A=0;LS_B=1;LS_C=1; break;
case 8: LS_A=1;LS_B=1;LS_C=1; break;
}
P0=Nixie_Value[number];
Delay(2);//延时时间要灵活,这是一个变化的值
P0=0X00;
}
int main()
{
unsigned char i=0;
while(1)
{
for(i=1;i<=8;i++)
{
Nixie(i,i);
}
}
}
注意段选和消影之间必须有延时,否则不会亮。
P0=Nixie_Value[number];
Delay(2);//延时时间要灵活,这是一个变化的值
P0=0X00;
程序二、当延时长时,人眼可观察到,就实现了数码管滚动。逐个显示1-8
其实只是在程序一基础上改了延时,就可以实现滚动和亮度控制
#include <regx52.h>
sbit LS_A=P2^2;
sbit LS_B=P2^3;
sbit LS_C=P2^4;
unsigned code Nixie_Value[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char location,unsigned char number)
{ switch(location)
{
case 1: LS_A=0;LS_B=0;LS_C=0; break;
case 2: LS_A=1;LS_B=0;LS_C=0; break;
case 3: LS_A=0;LS_B=1;LS_C=0; break;
case 4: LS_A=1;LS_B=1;LS_C=0; break;
case 5: LS_A=0;LS_B=0;LS_C=1; break;
case 6: LS_A=1;LS_B=0;LS_C=1; break;
case 7: LS_A=0;LS_B=1;LS_C=1; break;
case 8: LS_A=1;LS_B=1;LS_C=1; break;
}
P0=Nixie_Value[number];
Delay(200);//延时时间要灵活,这是一个变化的值
P0=0X00;
}
int main()
{
unsigned char i=0;
while(1)
{
for(i=1;i<=8;i++)
{
Nixie(i,i);
Delay(100);
}
}
}
对于少了分号的问题,请仔细检查代码,找到缺失分号的位置并添加分号即可解决问题。具体步骤如下: 1. 仔细审核代码,找到报错的行。 2. 找到该行的上一行和下一行,并检查是否有漏写分号的情况。 3. 如果有,添加分号并保存文件,再次编译运行程序。
如果以上方法无法解决问题,则需要检查开发板连接是否正常,并检查单片机程序是否编写正确。如果仍然存在问题,请寻求其他IT专家的帮助。