久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4582|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)C語言(函數(shù)的嵌套調(diào)用)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:324844 發(fā)表于 2018-6-12 17:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
calc(keyscan());
上面的calc()調(diào)用keyscan()函數(shù),
是不是calc()可以調(diào)用keyscan()函數(shù)里面的所有
變量,求解答
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:330198 發(fā)表于 2018-6-13 08:32 | 只看該作者
keyscan()有個返回值,相當(dāng)于一個數(shù)值,calc()使用的是一個數(shù)值

評分

參與人數(shù) 1黑幣 +5 收起 理由
hedianzi + 5 很給力!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:350952 發(fā)表于 2018-6-13 11:36 | 只看該作者
這個案例里面,calc()只能調(diào)用keyscan()的返回值,如果需要用到keyscan()函數(shù)里的所有變量,需要在函數(shù)返回值里增加所需要的變量。

評分

參與人數(shù) 1黑幣 +5 收起 理由
hedianzi + 5 很給力!

查看全部評分

回復(fù)

使用道具 舉報

地板
ID:324844 發(fā)表于 2018-6-13 13:19 | 只看該作者
zhanghyg 發(fā)表于 2018-6-13 08:32
keyscan()有個返回值,相當(dāng)于一個數(shù)值,calc()使用的是一個數(shù)值

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char//宏替換        //段選和位選
uchar LA[8],j,m;
sbit M=P3^5;           //數(shù)組8位LA
uchar code wetable[]={  
0x80,0x40,0x20,0x10,
0x08,0x04,0x02,0x01};     //數(shù)組編碼(位選從高位向低位逐位送0)(為共陰數(shù)碼管)
uchar code dutable[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90
};
//段選0~9   //段選編碼(0到9)
long int num1,num2,num,numi;
uchar temp;//按鍵需要的中間變量
uchar flag;//標(biāo)記是否為數(shù)字鍵
uchar ch;//保存當(dāng)前按下的符號標(biāo)記按鍵的次數(shù),按下"+-*/"
uchar date,count;//date保存按鍵得到的數(shù)字,count標(biāo)記是第幾個數(shù)字
uchar p;//p為指針,為了消除數(shù)字之前多余的0
uchar mark;
void delay(uint z)      //延遲函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=0;y<=112;y++);
}
void init()        //定義初值{
{
count=0;
flag=0;
mark=0;
num1=0;
num2=0;
num=0;
}
uchar keyscan()//判斷按下那個鍵//掃鍵函數(shù)
{
P2=0xfe;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(20);//消除抖動
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//證明有鍵按下,while語句是為了讓鍵盤松開
{
temp=P2;
switch(temp)
{
case 0xee:flag=1;date=7;
break;
case 0xde:flag=1;date=8;
break;
case 0xbe:flag=1;date=9;
break;
case 0x7e:flag=2;ch='/';
break;
}
if(temp!=0xf0)
{
delay(20);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//等待按鍵松開
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(20);//消除抖動
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//證明有鍵按下,while語句是為了讓鍵盤松開
{
temp=P2;
switch(temp)
{
case 0xed:flag=1;date=4;
break;
case 0xdd:flag=1;date=5;
break;
case 0xbd:flag=1;date=6;
break;
case 0x7d:flag=2;ch='*';
break;
}
if(temp!=0xf0)
{
delay(20);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//等待按鍵松開
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(20);//消除抖動
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//證明有鍵按下,while語句是為了讓鍵盤松開
{
temp=P2;
switch(temp)
{
case 0xeb:flag=1;date=1;
break;
case 0xdb:flag=1;date=2;
break;
case 0xbb:flag=1;date=3;
break;
case 0x7b:flag=2;ch='-';
break;
}
if(temp!=0xf0)
{
delay(20);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//等待按鍵松開
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
P2=0xf7;
temp=P2;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(20);//消除抖動
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//證明有鍵按下,while語句是為了讓鍵盤松開
{
temp=P2;
switch(temp)
{
case 0xe7:flag=4;ch='C';
break;
case 0xd7:flag=1;date=0;
break;
case 0xb7:flag=3;//ch='=';
break;
case 0x77:flag=2;ch='+';
break;
}
if(temp!=0xf0)
{
delay(20);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)//等待按鍵松開
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
return date;
}
void display(long int num)           //(總)顯示函數(shù)(顯示到第一次位的值不為0)(666)(顯示一個完整數(shù))
{
char i;
LA[7]=num%100000000/10000000;
LA[6]=num%10000000/1000000;
LA[5]=num%1000000/100000;
LA[4]=num%100000/10000;
LA[3]=num%10000/1000;
LA[2]=num%1000/100;
LA[1]=num%100/10;
LA[0]=num%10;
if(num==0)
{
P1=wetable[0];
P0=dutable[0];
delay(2);
P0=0xff;
}
else
{
for(i=7;i>=0;i--)
{
if(LA!=0)
{
p=i;
break;
}
}
for(i=0;i<=p;i++)
{
P1=wetable;
P0=dutable[LA];
delay(2);
P0=0xff;
}
}
}
void calc(uchar date)           //得數(shù)轉(zhuǎn)換成數(shù)值
{
   if(flag==1)
    {
     if(count==0)//得到的第一個完整數(shù)字//第一個數(shù)連續(xù)使用count=0以得到數(shù)值;
      {
       num1=num1*10+date;
       flag=0;
       num=num1;
      }
     if(count==1)//得到的第二個完整數(shù)字//第二個數(shù)在使用flag2后開始連續(xù)使用,直至flag3的
      {
       num2=num2*10+date;
       flag=0;
       num=num2;
      }
    }
     if(count>1&&mark==1)
    {
      num1=num;
      flag=0;
      count=1;//講num2置為第二個數(shù)
    }
     display(num);      
     if(flag==2)//如果得到符號位
    {
      count++;
      flag=0;
    }
     if(flag==3)
    {
       num=0;
       switch(ch)
      {
        case '+':num=num1+num2; break;
        case '-':num=num1-num2; break;
        case '*':num=num1*num2; break;
        case '/':num=num1/num2; break;
      }
      num1=0;
      num2=0;
      flag=0;
      mark=1;
      M=0;
      delay(100);
      M=1;
     
    }
   
    if(flag==4)
    {
      num1=0;
      num2=0;
      num=0;
      count=0;
      flag=0;
      mark=0;
    }
}

      
     
void main()
{
  init();
  while(1)
  {
   calc(keyscan());
  }
}
大佬,里面的void calc(uchar date)   函數(shù)為什么能調(diào)用 uchar keyscan()里面除了date以外的其他變量啊,如flag,和字符變量ch,不是只返回了一個date嗎
回復(fù)

使用道具 舉報

5#
ID:324844 發(fā)表于 2018-6-13 13:20 | 只看該作者
chew2018 發(fā)表于 2018-6-13 11:36
這個案例里面,calc()只能調(diào)用keyscan()的返回值,如果需要用到keyscan()函數(shù)里的所有變量,需要在函 ...

受教了,謝謝
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩三级精品 | 日韩精品免费播放 | 国产sm主人调教女m视频 | 在线观看黄色大片 | 国产高清区 | 精品一级 | www成年人视频 | 美女露尿口视频 | 精品久久电影 | 99国内精品久久久久久久 | 日韩中文字幕一区 | 欧美一区二区在线看 | 免费网站国产 | 久久久久成人精品免费播放动漫 | 天天干视频网 | 久久中文视频 | 拍真实国产伦偷精品 | 亚洲精品免费看 | 91天堂| 国产精品美女久久久 | 亚洲区一区二区 | 一区二区三区四区视频 | 亚洲麻豆| 99只有精品| 日韩在线免费视频 | 一区二区三区久久久 | 999观看免费高清www | 香蕉超碰| 日本成人中文字幕 | 二区av| 午夜伦4480yy私人影院 | 国产精品视频网站 | av片免费 | 成人在线视频网址 | 日韩国产黄色片 | 黄网免费看 | 欧美淫 | 国产在线不卡 | 天天天操| 欧美极品少妇xxxxⅹ免费视频 | 九九亚洲精品 |