欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 求大神幫調(diào)試51單片機簡易計算器程序,功能基本正確,只有一個問題,求大神幫... [打印本頁]

作者: 一半借我做衣衫    時間: 2020-4-26 00:26
標題: 求大神幫調(diào)試51單片機簡易計算器程序,功能基本正確,只有一個問題,求大神幫...
本帖最后由 一半借我做衣衫 于 2020-4-26 00:40 編輯

問題如下:
輸入被減數(shù)“321”按下“-”符號后,它顯示為“32-”
繼續(xù)輸入減數(shù)“36”后,它顯示為“32-36”
按下“=”鍵后,顯示為“32-36=29”
其問題在于,被減數(shù)個位上的數(shù)“1”被“-”覆蓋未顯示,且被減數(shù)和減數(shù)的最后一位都沒參加運算,即我輸入 的是321-36,單片機實際計算的是32-3=28
下面是項目文件,C文件也在里面

改.zip

47.25 KB, 下載次數(shù): 17


作者: hantu    時間: 2020-4-26 02:15
你的按鍵處理和顯示處理都搞得很不好,框架比較差不易維護。

矩陣按鍵掃描做成一個函數(shù)就只返回鍵值就行了,用數(shù)組做個簡單的鍵盤映射,用一條語句就能查表取得按鍵對應(yīng)的數(shù)字或功能了,不用搞一大堆的switch-case 。
作者: LiUCONG520    時間: 2020-4-26 12:47
我覺得只是顯示的問題,分開顯示試一下。else if(xx!=0&&xf==1)xf=0,bei=0,LCDWriteCommand(0x01),LCDWriteData(xx);  //剛選擇完運算符號,被加減乘除的數(shù)已經(jīng)輸入完
                        else if(xx!=0&&xf==0)LCDWriteCommand(0x01),LCDWriteData(shu);         //        符號已選,正在輸入加減乘除的數(shù)
作者: 黃youhui    時間: 2020-4-26 13:46
你這是顯示覆蓋問題,很好解決的,方法很多,舉例2種1 弄個全局變量標記數(shù)字坐標,顯示完第一個數(shù)字(字符)后坐標自
2弄個數(shù)組 比如 a[10],然后賦值 a[i++] = 輸入字符;最后從頭到尾顯示數(shù)組內(nèi)容

作者: 黃youhui    時間: 2020-4-26 14:11
抱歉,我太年輕了,看了一下你的問題沒看全就會貼了,重看了一下你的代碼,發(fā)現(xiàn)是這樣的。1  switch函數(shù)沒有帶default語柄                         這問題不大

2  按鍵‘=’使用了四個if判斷加減乘除還用abcd指代,如果我按完 加號(a = 1)再按減號(b= 1)會怎么樣
           case(14):if(a==1)
                           {result=temp+result;a=0;key=0;}
                        if(b==1)
                           {result=temp-result;b=0;key=0;}
                        if(c==1)
                           {result=temp*result;c=0;key=0;}
                        if(d==1)
                           {
                              if(result==0) {error=1;result=0;d=0;key=0;}
                               else{result=temp/result;d=0;key=0;}
                           }


3  你在while(1)里面定義變量是認真的嗎?看到這里可以十分肯定告訴你你的錯誤99%出現(xiàn)在這
void main()
{
        LCD_Init();         
    while(1)
        {
             static long key=0,result=0,temp=0,a=0,b=0,c=0,d=0;  
             unsigned char i=0;




作者: 黃youhui    時間: 2020-4-26 14:12
hantu 發(fā)表于 2020-4-26 02:15
你的按鍵處理和顯示處理都搞得很不好,框架比較差不易維護。

矩陣按鍵掃描做成一個函數(shù)就只返回鍵值就行 ...

void main()
{
        LCD_Init();            
    while(1)
        {
static long key=0,result=0,temp=0,a=0,b=0,c=0,d=0;   
unsigned char i=0;


看看他在while(1)里面做了啥,定義變量,
作者: 一半借我做衣衫    時間: 2020-4-26 16:37
黃youhui 發(fā)表于 2020-4-26 14:11
抱歉,我太年輕了,看了一下你的問題沒看全就會貼了,重看了一下你的代碼,發(fā)現(xiàn)是這樣的。1  switch函數(shù)沒 ...

非常感謝你給我指出的問題 ,我是新手,你提出的3個問題,第1個我已加了default:break;,第2個我還沒想好怎么弄。第3個我把變量第一在了為了外面?墒乾F(xiàn)在問題更嚴重了...按一下1會出現(xiàn)一排1了,計算功能也紊亂了,大神能講一下解決辦法嗎,改了好幾天了,不是專業(yè)學(xué)這個的,知識有限,希望大神施以援手,小弟感激不盡
作者: 一半借我做衣衫    時間: 2020-4-26 16:38
LiUCONG520 發(fā)表于 2020-4-26 12:47
我覺得只是顯示的問題,分開顯示試一下。else if(xx!=0&&xf==1)xf=0,bei=0,LCDWriteCommand(0x01),LCDWrite ...

您說的分開顯示是什么意思,在下菜鳥入門,沒明白大神的意思
作者: 黃youhui    時間: 2020-4-26 20:52
想幫你改代碼,但是想想還是算了,世界上最難的兩件事之一就是把自己的思想放進別人的大腦里,想法上的偏差可能讓我寫的代碼你看不懂,
再加上我不熟悉你這LCD不清楚指令 。


你說的第二種其實
加法 A = 1
減法A=2
乘法A=3
除法A=4
沒輸入A=0
就好了


至于第三種一直輸出1你是你的變量shu='1',這個標志一直在沒清空所以一直打印1。
另外你輸入運算符號后result清空了嗎
  for(i=i-1;i=>0;i--)
  {
    LCDWriteData(n[i]+48);
  }









作者: LiUCONG520    時間: 2020-4-27 09:59
一半借我做衣衫 發(fā)表于 2020-4-26 16:38
您說的分開顯示是什么意思,在下菜鳥入門,沒明白大神的意思

我的意思是 當你輸入321再輸入‘-’ 時, 把321清除  只顯示一個 ‘-’,再輸入數(shù)字36時,把‘-’也清除掉。就像一般的計算機 這樣就不會顯示覆蓋,如果你一定想把整個算式都顯示出來,樓下的那個辦法可以。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1