找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1736|回复: 6
收起左侧

关于单片机C语言全局变量的值 不明白呀,请教了

[复制链接]
ID:64817 发表于 2019-1-27 10:23 | 显示全部楼层 |阅读模式
大神们真心请教,搞不明白,为什么按健数码管显显正常,为什么全局变量b,,进不了 switch(b),,俺的C语言也是个入门级,请教了/




#include <reg51.h>
#define led P2
#define shumaguan P0
#define anjian P1
sbit ls138A= P2^2;
sbit ls138B= P2^3;
sbit ls138C= P2^4;
unsigned char b  ;

unsigned char code shuzu[]={ 0x3f  ,0x06 , 0x5b , 0x4f , 0x66,
0x6d  ,0x7d  , 0x07 , 0x7f , 0x6f } ;// 0--8数字
void ls138shuju()          
{
        ls138A= 0;
    ls138B= 0;
    ls138C= 0;
}
void yanshi (unsigned int u)
{
while(u--)        ;
}

void shuzihanshu()
{
   unsigned char v ;
   shumaguan=shuzu[0];                                                       
   while(1)
   {
         ls138shuju();
        /************* 扫描最右侧一例*************/
         anjian=0XFE; //把1111 1110赋于按键,高4位与低4位组成纵横矩阵
            v=anjian;    //        anjian赋于V
         v=v&0XF0;    //v于1111 0000相&取出高4位,如高4位有0说明有按健按下,
         if(v!=0XF0)         //有按键按下高4位不等于1111会进入if
           {
             yanshi (100);
             v=anjian;   
             v=v&0XF0;          
             if(v!=0XF0)
               {
                 switch(v)
                       {
                             case 0X70 :        b=4; shumaguan=shuzu[b]; break ;
                            case 0XB0 :        b=8; shumaguan=shuzu[b]; break ;          
                       }
                }
         while(v!=0XF0)
              {
                v=anjian;   
                v=v&0XF0;   
              }
         yanshi (100);                     
        }  

   }

}
void main()
{

  while(1)
       {

                shuzihanshu();
             switch(b)  //,为什么全局变量b,,进不了 switch(b),
                      {
                             case (4) : led=0X00; break ;  //LED灯不亮呀,请教了
                               case (8) : led=0X62; break ;
                      }
       
       }
}

回复

使用道具 举报

ID:164602 发表于 2019-1-27 14:05 | 显示全部楼层
不是全局变量的事儿啊。
你的程序中,当执行了void shuzihanshu()这个函数后,就死循环了
void shuzihanshu()
{
   unsigned char v ;
   shumaguan=shuzu[0];                                                        
   while(1)
再也跳不出来,根本没有执行这以后的程序嘛。
程序结构有问题。自己改改吧。
回复

使用道具 举报

ID:393699 发表于 2019-1-27 15:13 | 显示全部楼层
shuzihanshu();这个函数是死循环吗?那当然就不能switch命令咯。
你想同时扫描并显示数字吧,把扫描函数放到主循环里面
回复

使用道具 举报

ID:64817 发表于 2019-2-16 08:57 | 显示全部楼层
HC6800-ES-V2.0 发表于 2019-1-27 14:05
不是全局变量的事儿啊。
你的程序中,当执行了void shuzihanshu()这个函数后,就死循环了
void shuzihans ...

老师,怎么改好呀,,我想不出,给点意见。谢
回复

使用道具 举报

ID:410399 发表于 2019-2-16 09:37 | 显示全部楼层
把shuzihanshu()里面的while(1)去掉吧,你已经把shuzihanshu()放到main里面的while(1)了,那shuzihanshu()就已经无限循环了,你在shuzihanshu()里面加while(1)就在里面无限循环出不来了
回复

使用道具 举报

ID:64817 发表于 2019-2-16 15:31 | 显示全部楼层
mosqu 发表于 2019-2-16 09:37
把shuzihanshu()里面的while(1)去掉吧,你已经把shuzihanshu()放到main里面的while(1)了,那shuzihanshu() ...

谢谢,我试过把while(1)去过,但出现按健显示正常了,好像都从子函数的开始指行了,,我的基础差,想不出如何改呀
回复

使用道具 举报

ID:356526 发表于 2019-2-16 20:00 | 显示全部楼层
shuzihanshu()里面的while(1)是个死循环,你的逻辑有问题。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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