找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2040|回复: 15
打印 上一主题 下一主题
收起左侧

老师们帮我看看这个程序哪里有问题啊?

[复制链接]
跳转到指定楼层
楼主
ID:399179 发表于 2021-12-12 20:23 来自触屏版 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
S2按下后显示正常数值也能增加,就是不能储存,S5和S6按下后都能正常显示和储存。这是什么情况啊?望知道的老师指导一下,谢谢!


void main(){            init();        //初始化24C02    led=1;        led3=0;        led1=read24c02(2);         if(!s4)           write24c02(2,1);           num1=read24c02(0);        //用地址0单元存储num十六进制表示时的低两位        num2=read24c02(1);        //用地址0单元存储num十六进制表示时的高两位        num=num2*256+num1;        num++;        num2=num/256;        num1=num%256;        write24c02(0,num1);        write24c02(1,num2);                if(!s3)                {  led1=0;                   write24c02(2,0);                         num=0;                                num2=num/256;        num1=num%256;        write24c02(0,num1);        write24c02(1,num2);                        }           num1a=read24c02(3);        //用地址0单元存储num十六进制表示时的低两位        num2a=read24c02(4);        //用地址0单元存储num十六进制表示时的高两位        numa=num2a*256+num1a;                num2a=numa/256;        num1a=numa%256;        write24c02(3,num1a);        write24c02(4,num2a);        if(num>numa)        {led2=0;        led3=1;}        while(num>numa);                  while(1)        {                        /*                          if(num>300)                led=0;                else                led=1;        */          while(num>numa);                if(!s5)                {                numa++;        num2a=numa/256;        num1a=numa%256;        write24c02(3,num1a);        write24c02(4,num2a);        }                 if(!s2)                {        num++;        num2=num/256;        num1=num%256;        write24c02(0,num1);        write24c02(1,num2);                }                    if(!s6)                {                numa--;        num2a=numa/256;        num1a=numa%256;        write24c02(3,num1a);        write24c02(4,num2a);        }                 display(num);                display1(numa);        }        }

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:592807 发表于 2021-12-13 08:37 | 只看该作者
太乱了,不看。
回复

使用道具 举报

板凳
ID:399179 发表于 2021-12-14 12:18 来自触屏版 | 只看该作者
黄youhui 发表于 2021-12-13 08:37
太乱了,不看。

不知道怎么回事,复制过来就这样了。
回复

使用道具 举报

地板
ID:624769 发表于 2021-12-14 13:33 | 只看该作者
快乐眼泪 发表于 2021-12-14 12:18
不知道怎么回事,复制过来就这样了。

在Keil 里打开后,再贴过来
回复

使用道具 举报

5#
ID:992178 发表于 2021-12-14 13:54 | 只看该作者
太乱了,建议在keil打开后再看
回复

使用道具 举报

6#
ID:908826 发表于 2021-12-14 13:58 | 只看该作者
你调一下格式再问吧,你这样问看的发懵。
回复

使用道具 举报

7#
ID:399179 发表于 2021-12-14 21:40 来自触屏版 | 只看该作者
不好意思啊!用手机发的,等回家了用电脑贴过来试试,谢谢大家了!
回复

使用道具 举报

8#
ID:399179 发表于 2021-12-15 19:04 | 只看该作者
void main()
{       

    init();        //初始化24C02
    led=1;
        led3=0;
        led1=read24c02(2);
         if(!s4)

           write24c02(2,1);   
        num1=read24c02(0);        //用地址0单元存储num十六进制表示时的低两位
        num2=read24c02(1);        //用地址0单元存储num十六进制表示时的高两位
        num=num2*256+num1;
        num++;

        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
                if(!s3)
                {  led1=0;
                   write24c02(2,0);
                        num=0;
                       
        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
       
                }
           num1a=read24c02(3);        //用地址0单元存储num十六进制表示时的低两位
        num2a=read24c02(4);        //用地址0单元存储num十六进制表示时的高两位
        numa=num2a*256+num1a;
       

        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        if(num>numa)
        {led2=0;
        led3=1;}
        while(num>numa);
          
        while(1)
        {       
       
       
/*          
                if(num>300)
                led=0;

                else
                led=1;        */
          while(num>numa);
                if(!s5)
                {
                numa++;
        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        }
                if(!s2)
                {

        num++;
        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
                }
   

                 if(!s6)
                {
                numa--;
        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        }
                display(num);
                display1(numa);
        }
       
}
回复

使用道具 举报

9#
ID:399179 发表于 2021-12-15 19:06 | 只看该作者
void main()
{       

    init();        //初始化24C02
    led=1;
        led3=0;
        led1=read24c02(2);
         if(!s4)

           write24c02(2,1);   
        num1=read24c02(0);        //用地址0单元存储num十六进制表示时的低两位
        num2=read24c02(1);        //用地址0单元存储num十六进制表示时的高两位
        num=num2*256+num1;
        num++;

        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
                if(!s3)
                {  led1=0;
                   write24c02(2,0);
                        num=0;
                       
        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
       
                }
           num1a=read24c02(3);        //用地址0单元存储num十六进制表示时的低两位
        num2a=read24c02(4);        //用地址0单元存储num十六进制表示时的高两位
        numa=num2a*256+num1a;
       

        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        if(num>numa)
        {led2=0;
        led3=1;}
        while(num>numa);
          
        while(1)
        {       
       
       
/*          
                if(num>300)
                led=0;

                else
                led=1;        */
          while(num>numa);
                if(!s5)
                {
                numa++;
        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        }
                if(!s2)
                {

        num++;
        num2=num/256;
        num1=num%256;
        write24c02(0,num1);
        write24c02(1,num2);
                }
   

                 if(!s6)
                {
                numa--;
        num2a=numa/256;
        num1a=numa%256;
        write24c02(3,num1a);
        write24c02(4,num2a);
        }
                display(num);
                display1(numa);
        }
       
}


现在这个还乱吗
回复

使用道具 举报

10#
ID:624769 发表于 2021-12-15 19:44 | 只看该作者
         while(num>numa);

num > numa  就 停在这里不动了
那么 你按了 S2  num++ 之后, 大于了 numa  自然就停在上面的位置不动了。 者有什么问题么?
回复

使用道具 举报

11#
ID:992889 发表于 2021-12-15 20:25 | 只看该作者
while(num>numa);
回复

使用道具 举报

12#
ID:399179 发表于 2021-12-15 21:46 来自触屏版 | 只看该作者
188610329 发表于 2021-12-15 19:44
while(num>numa);

num > numa  就 停在这里不动了

是的,但是在num<numa时按S2num++但不能储存
回复

使用道具 举报

13#
ID:624769 发表于 2021-12-15 22:10 | 只看该作者

关键是,  只要 num > numa  之后,程序就再也不会动了, 除非重启动。
回复

使用道具 举报

14#
ID:592807 发表于 2021-12-16 09:10 | 只看该作者

根据你的描述,我觉得你要存储的数据超过0XFF,或者不是unsigned char类型的数据
回复

使用道具 举报

15#
ID:161164 发表于 2021-12-16 09:57 | 只看该作者
不知道你说的"不能储存"是什么意思
定位void main()为第1行
第8行的if(!s4)只能控制第10行的write24c02(2,1);
从第11行到第19行都会在每次开机时无条件直接运行
经过第14行num++;
num永远比上一次关机时多了一
回复

使用道具 举报

16#
ID:399179 发表于 2021-12-16 19:51 来自触屏版 | 只看该作者
lkc8210 发表于 2021-12-16 09:57
不知道你说的"不能储存"是什么意思
定位void main()为第1行
第8行的if(!s4)只能控制第10行的write24c02(2 ...

这是一个可预置开机次数限制程序,到了预设的开机次数就不能工作了,等再回家了都贴上来大家看看
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表