51单片机程序错误,提示少了一个;

为什么它提示我少了一个分号 ;我是按这别人程序打的,会不会是我的keli有点问题啊(过几天就要交了)

img

谢谢,我解决了,是我创建工程的时候“Copy 'STARTUP.A51'to project folder and add file to project”的时候选择了是,应该要选择否

第四行 unnsigned int是什么东西?unit又是什么东西?
viod又是什么东西???
天啊,你学过C语言吗?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7687415
  • 这篇博客你也可以参考下:51单片机入门之五:数码管显示(动态),单片机驱动数码
  • 除此之外, 这篇博客: 51单片机按键值显示在数码管上,数码管亮度控制,数码管显示原理中的 遇到的几个问题,个人体会 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    为什么数码管滚动?
    因为两个位选之间有延时,延时大了,人眼可分辨出来,其实只能控制一个数码管,上一个亮了然后消影,延时后刚好下一个亮。
    发现诀窍:重要、重要、重要
    静态数码管几个数码管共同点亮,这是利用人眼分辨率低,其实这些数码管已经经历了亮灭,这个亮然后灭,下一个再亮,延时太低,就会导致以为数码管都一直亮着。
    数码管亮度控制,当段选后需要一个延时然后消影。然后在一个延时,下一个点亮(位选确定),这两个延时就导致数码管亮度变化。第一个延时长,第二个短,表示数码管亮的时间长,灭队时间短,有占空比理解,则亮度高,反之亮度很低。详细代码见程序二。
    先执行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);
    		}
    	}
    }
    
  • 以下回答来自chatgpt:

    对于少了分号的问题,请仔细检查代码,找到缺失分号的位置并添加分号即可解决问题。具体步骤如下: 1. 仔细审核代码,找到报错的行。 2. 找到该行的上一行和下一行,并检查是否有漏写分号的情况。 3. 如果有,添加分号并保存文件,再次编译运行程序。

    如果以上方法无法解决问题,则需要检查开发板连接是否正常,并检查单片机程序是否编写正确。如果仍然存在问题,请寻求其他IT专家的帮助。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^