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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1836|回復: 9
打印 上一主題 下一主題
收起左側

我這段單片機程序寫的有問題嗎?為什么編譯不通過

[復制鏈接]
跳轉到指定樓層
樓主
if(heavy1<100)                 {LED0=0;LED1=0;LED2=0;LED3=0;}
        if((heavy1>=100)&&(heavy1<200)){LED0=1;LED1=0;LED2=0;LED3=0;}
                if((heavy1>=200)&&(heavy1<300)){LED0=0;LED1=1;LED2=0;LED3=0;}
                if((heavy1>=300)&&(heavy1<400)){LED0=0;LED1=0;LED2=1;LED3=0;}
                if((heavy1>=400)&&(heavy1<500)){LED0=0;LED1=0;LED2=0;LED3=1;}
                if(heavy1>=500)                {LED0=1;LED1=1;LED2=1;LED3=1;}        
這是我寫的,看起來沒什么問題啊,為什么編譯通過?完整程序如下:

  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include <intrins.h>
  5. #define KeyPort P1
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. #define DataPort P0

  9. sbit ADDO = P3^2;
  10. sbit ADSK = P3^3;
  11. unsigned int num;
  12. unsigned int dnf;
  13. float i;
  14. unsigned int priceV;
  15. sbit LED0 = P3^4;
  16. sbit LED1 = P3^5;
  17. sbit LED2 = P3^6;
  18. sbit LED3 = P3^7;

  19. /*-----------------------------------------------
  20.   LCD12864引腳接口
  21. ------------------------------------------------*/
  22. sbit RS = P2^4;
  23. sbit RW = P2^5;
  24. sbit E  = P2^6;
  25. sbit RES = P2^3;
  26. sbit PSB = P2^1;
  27. sbit PAUSE = P3^0;
  28. unsigned char temp[16];
  29. unsigned char lol[16];
  30. void DelayUs2x(unsigned char t)
  31. {   
  32. while(--t);
  33. }
  34. void DelayMs(unsigned char t)
  35. {

  36. while(t--)
  37. {
  38.      //大致延時1mS
  39.      DelayUs2x(245);
  40.          DelayUs2x(245);
  41. }
  42. }
  43. /*------------------------------------------------
  44.                     檢測忙位
  45. ------------------------------------------------*/
  46. void Check_Busy()
  47. {  
  48.     RS=0;
  49.     RW=1;
  50.     E=1;
  51.     DataPort=0xff;
  52.     while((DataPort&0x80)==0x80);//忙則等待
  53.     E=0;
  54. }
  55. /*------------------------------------------------
  56.                    寫命令
  57. ------------------------------------------------*/
  58. void Write_Cmd(unsigned char Cmd)
  59. {
  60.         Check_Busy();
  61.         RS=0;
  62.         RW=0;
  63.         E=1;
  64.         DataPort=Cmd;
  65.         DelayUs2x(5);
  66.         E=0;
  67.         DelayUs2x(5);
  68. }
  69. /*------------------------------------------------
  70.                     寫數據
  71. ------------------------------------------------*/
  72. void Write_Data(unsigned char Data)
  73. {
  74.         Check_Busy();
  75.         RS=1;
  76.         RW=0;
  77.         E=1;
  78.         DataPort=Data;
  79.         DelayUs2x(5);
  80.         E=0;
  81.         DelayUs2x(5);
  82. }
  83. /*------------------------------------------------
  84.                    液晶屏初始化
  85. ------------------------------------------------*/
  86. void Init_ST7920()
  87. {  
  88.    DelayMs(40);           //大于40MS的延時程序
  89.    PSB=1;                 //設置為8BIT并口工作模式
  90.    DelayMs(1);            //延時
  91.    RES=0;                 //復位
  92.    DelayMs(1);            //延時
  93.    RES=1;                 //復位置高
  94.    DelayMs(10);
  95.    Write_Cmd(0x30);       //選擇基本指令集
  96.    DelayUs2x(50);         //延時大于100us
  97.    Write_Cmd(0x30);       //選擇8bit數據流
  98.    DelayUs2x(20);         //延時大于37us
  99.    Write_Cmd(0x0c);       //開顯示(無游標、不反白)
  100.    DelayUs2x(50);         //延時大于100us
  101.    Write_Cmd(0x01);       //清除顯示,并且設定地址指針為00H
  102.    DelayMs(15);           //延時大于10ms
  103.    Write_Cmd(0x06);       //指定在資料的讀取及寫入時,設定游標的移動方向及指定顯示的移位,光標從右向左加1位移動
  104.    DelayUs2x(50);         //延時大于100us
  105. }


  106. /*------------------------------------------------
  107.                    顯示字符串
  108. x:橫坐標值,范圍0~8
  109. y:縱坐標值,范圍1~4
  110. ------------------------------------------------*/
  111. void LCD_PutString(unsigned char x,unsigned char y,unsigned char *s)
  112. {
  113. switch(y)
  114.      {
  115.           case 1: Write_Cmd(0x80+x);break;
  116.           case 2: Write_Cmd(0x90+x);break;
  117.           case 3: Write_Cmd(0x88+x);break;
  118.           case 4: Write_Cmd(0x98+x);break;
  119.       default:break;
  120.          }
  121. while(*s>0)
  122.    {
  123.       Write_Data(*s);
  124.       s++;
  125.       DelayUs2x(50);
  126.    }
  127. }
  128. /*------------------------------------------------
  129.                       清屏
  130. ------------------------------------------------*/
  131. void ClrScreen()
  132. {
  133.    Write_Cmd(0x01);
  134.    DelayMs(15);
  135. }
  136. /*------------------------------------------------
  137.                    延時函數
  138. ------------------------------------------------*/
  139. void delay(uchar z)
  140. {
  141.         uchar x;
  142.         for(;z>0;z--)
  143.                 for(x=22;x>0;x--);
  144. }
  145.                   
  146. unsigned long ReadCount(void)
  147. {
  148. unsigned long Count; unsigned char i;
  149. ADSK=0;        //使能AD(PD_SCK 置低)
  150. Count=0;
  151. while(ADDO);        //AD轉換未結束則等待,否則開始讀取
  152. for (i=0;i<24;i++)
  153. {
  154. ADSK=1;        //PD_SCK 置 高 ( 發 送 脈 沖 )
  155. Count=Count<<1; //下降沿來時變量Count左移一位,右側補零
  156. ADSK=0;        //PD_SCK 置低
  157. if(ADDO) Count++;
  158. }
  159. ADSK=1;
  160. Count=Count^0x800000;//第25個脈沖下降沿來時,轉換數據
  161. ADSK=0;
  162. return(Count);
  163. }
  164. ///////////////////////////////////////////////////////////////// //////////////////////
  165. /*------------------------------------------------
  166. 按鍵掃描函數,返回掃描鍵值
  167. ------------------------------------------------*/
  168. unsigned char KeyScan(void)  //鍵盤掃描函數,使用行列反轉掃描法
  169. {
  170. unsigned char cord_h,cord_l;//行列值中間變量
  171. KeyPort=0x0f;            //行線輸出全為0
  172. cord_h=KeyPort&0x0f;     //讀入列線值
  173. if(cord_h!=0x0f)    //先檢測有無按鍵按下
  174. {
  175.   DelayMs(10);        //去抖
  176.   if((KeyPort&0x0f)!=0x0f)
  177.   {
  178.     cord_h=KeyPort&0x0f;  //讀入列線值
  179.     KeyPort=cord_h|0xf0;  //輸出當前列線值
  180.     cord_l=KeyPort&0xf0;  //讀入行線值

  181.     while((KeyPort&0xf0)!=0xf0);//等待松開并輸出

  182.     return(cord_h+cord_l);//鍵盤最后組合碼值
  183.    }
  184.   }return(0xff);     //返回該值
  185. }
  186. /*------------------------------------------------
  187.           按鍵值處理函數,返回掃鍵值
  188.            可以根據需要改變返回值

  189.                           | 1 | 2 | 3 | + |  
  190.                           | 4 | 5 | 6 | - |  
  191.                           | 7 | 8 | 9 | * |  
  192.                           | 0 | . | = | / |
  193. ------------------------------------------------*/
  194. unsigned char KeyPro(void)
  195. {
  196. switch(KeyScan())
  197. {

  198.         case 0x77:return  1  ;break;//1
  199.         case 0x7b:return  2  ;break;//2
  200.         case 0x7d:return  3  ;break;//3                 
  201.         case 0xb7:return  4  ;break;//4
  202.         case 0xbb:return  5  ;break;//5
  203.     case 0xbd:return  6  ;break;//6
  204.     case 0xd7:return  7  ;break;//7
  205.         case 0xdb:return  8  ;break;//8
  206.     case 0xdd:return  9  ;break;//9         
  207.     case 0xe7:return 10 ;break;//*
  208.     case 0x7e:return 11;break;//A  設置單價                                    
  209.     case 0xbe:return 12 ;break;//B         去皮                             
  210.     case 0xde:return 13 ;break;//C  附加功能                                                   
  211.     case 0xee:return 14 ;break;//D    重置                                   
  212.         case 0xed:return 15 ;break;//#
  213.     case 0xeb:return 16  ;break;//0                                                                     
  214.   default:return 0;break;

  215. }
  216. }


  217. /*------------------------------------------------
  218.               主程序
  219. ------------------------------------------------*/
  220. main()
  221. {

  222. int priceV;
  223. char v=0;
  224. unsigned long   weight   ;
  225. unsigned long   heavy  ;
  226. float                     heavy1 ;
  227. float           poi;
  228. int d1,d2;
  229. int LED0=0;
  230. int LED1=0;
  231. int LED2=0;
  232. int LED3=0;
  233.         ClrScreen();
  234.     Init_ST7920();   //初始化
  235. heavy= ReadCount();        DelayMs(100);
  236. heavy= ReadCount();        DelayMs(100);
  237. heavy= ReadCount();        DelayMs(100);
  238. while (1)
  239. {
  240. for( v=0;v<2;v++)
  241.   {        weight += ReadCount();     }         
  242.   weight =weight/3;
  243. heavy1= weight-heavy  ;
  244. heavy1= (float)heavy1/1900;
  245.         DelayMs(150);        DelayMs(150);
  246. if(heavy1>10000)heavy1=0;
  247. d1 = weight / 1000;        d2 = weight % 1000;
  248. num=KeyPro();      
  249. poi=priceV*heavy1*10;            
  250.                 LCD_PutString(0,1,"重量:");
  251.                 LCD_PutString(0,2,"單價:");
  252.                 LCD_PutString(0,3,"總價:");
  253.                    LCD_PutString(0,4,"共計:");
  254.                 LCD_PutString(7,2,"元");
  255.                 LCD_PutString(7,3,"元");
  256.                 LCD_PutString(7,4,"元");
  257.         switch(num)
  258.         {
  259.         case 1:        priceV*=10; priceV+=1;            break;                // 1
  260.         case 2:        priceV*=10; priceV+=2;                break;                 // 2
  261.         case 3:        priceV*=10; priceV+=3;                break;                 // 3
  262.         case 4:        priceV*=10; priceV+=4;                break;                 // 4
  263.         case 5:        priceV*=10; priceV+=5;                break;                 // 5
  264.         case 6:        priceV*=10; priceV+=6;                break;                 // 6
  265.         case 7:        priceV*=10; priceV+=7;                break;                 // 7
  266.         case 8: priceV*=10; priceV+=8;                break;                 // 8
  267.         case 9: priceV*=10; priceV+=9;                break;                 // 9
  268. //        case 10: priceV='.';                        break;                 // 9
  269.         case 11: heavy= ReadCount();        break;
  270.         case 12: i+=poi;                    break;
  271.     case 13: i=0;                       break;
  272.         case 14: ClrScreen();               break;
  273.         case 15: priceV=0;                        break;                  // 0
  274.         case 16: priceV*=10;                         break;
  275.       
  276.         }
  277.                 sprintf(temp,"%5.2fg " ,heavy1);
  278.                LCD_PutString(3,1, temp);
  279.                 sprintf(lol,"%4d",priceV);
  280.                 LCD_PutString(3,2,lol);
  281.                 sprintf(lol,"%4.1f ",poi/10);                           
  282.                 LCD_PutString(3,3,lol);
  283.                 sprintf(lol,"%4.1f",i/10);
  284.             LCD_PutString(3,4,lol);
  285.         DelayMs(200);               
  286. //                sprintf(temp," %4d%-d          ",d1,d2);
  287. //            LCD_PutString(0,4, temp);
  288.                 DelayMs(200);      
  289. //if(heavy1>503)
  290. //   {
  291. //   ClrScreen();
  292. //   sprintf(lol,"警告警告警告警告");
  293. //            LCD_PutString(0,1, lol);
  294. //                 sprintf(lol,"警告警告警告警告");
  295. //            LCD_PutString(0,2, lol);
  296. //                 sprintf(lol,"警告警告警告警告");
  297. //            LCD_PutString(0,3, lol);
  298. //                 sprintf(lol,"警告警告警告警告");
  299. //            LCD_PutString(0,4, lol);
  300. //                DelayMs(200);                 DelayMs(200);
  301. //                ClrScreen();
  302. //   }
  303. }
  304. }
  305. // switch(heavy1)
  306. // {
  307. //  case 100:led0=1;led1=0;led2=0;led3=0;                                                 break;
  308. //  case 200:led0=0;led1=1;led2=0;led3=0;                                                 break;
  309. //  case 300:led0=0;led1=0;led2=1;led3=0;                                                 break;
  310. //  case 400:led0=0;led1=0;led2=0;led3=1;                                                 break;
  311. //  case 500:led0=1;led1=1;led2=1;led3=1;                                                 break;
  312. // }
  313.         if(heavy1<100)                 {LED0=0;LED1=0;LED2=0;LED3=0;}
  314.         if((heavy1>=100)&&(heavy1<200)){LED0=1;LED1=0;LED2=0;LED3=0;}
  315.                 if((heavy1>=200)&&(heavy1<300)){LED0=0;LED1=1;LED2=0;LED3=0;}
  316.                 if((heavy1>=300)&&(heavy1<400)){LED0=0;LED1=0;LED2=1;LED3=0;}
  317.                 if((heavy1>=400)&&(heavy1<500)){LED0=0;LED1=0;LED2=0;LED3=1;}
  318.                 if(heavy1>=500)                {LED0=1;LED1=1;LED2=1;LED3=1;}      
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:387733 發表于 2018-8-27 09:19 | 只看該作者
函數大括號不匹配吧,最后這段程序是哪個函數里面的呢?

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

板凳
ID:164602 發表于 2018-8-27 09:37 | 只看該作者
你的程序中這些語句是沒有問題的。
問題在于:你注釋掉一些語句又新寫一些時,將大括號的}沒有移動到相應位置。
我移動到最后(兩個),編譯也不能過,是其它的系統錯誤了,沒有語句錯誤。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

地板
ID:384109 發表于 2018-8-27 10:24 | 只看該作者
應該把編譯時的錯誤提示貼出來,另外主程序的大括號好像配對不完整

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

5#
ID:308437 發表于 2018-8-27 10:29 | 只看該作者
把你編譯結果發來看下,看提示
回復

使用道具 舉報

6#
ID:386561 發表于 2018-8-27 10:41 | 只看該作者
嗯,不用想了,這判斷就是放的位置有問題,自己沒留意到,本身沒有任何問題
回復

使用道具 舉報

7#
ID:387733 發表于 2018-8-27 12:58 | 只看該作者
      我把最后的大括號移到末尾,提示DATA變量地址空間溢出,把某個數組的變量屬性由 DATA 改成 IDATA 就通過了。
      看別人的程序是一件很累的事,特別是不完整的程序。而自己調試,糾錯應該是我們這一行必須具備的能力,所以碰到問題應該盡可能的自己解決。
      

評分

參與人數 1黑幣 +40 收起 理由
admin + 40 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

8#
ID:386561 發表于 2018-8-27 21:12 | 只看該作者
sxhwdz 發表于 2018-8-27 12:58
我把最后的大括號移到末尾,提示DATA變量地址空間溢出,把某個數組的變量屬性由 DATA 改成 IDATA 就 ...

懂你的意思,只是自己找不到的時候還是希望求助他人了,
回復

使用道具 舉報

9#
ID:390775 發表于 2018-8-31 16:28 | 只看該作者
這兩個函數沒有在main中  編譯時你的語法通過不了
如果你想把這兩個函數放到  while(1)中則 你需要 把函數放到倒數第二個  } 中




如果是main中則是  倒數第一個}中


希望對你有幫助

回復

使用道具 舉報

10#
ID:392076 發表于 2018-8-31 17:08 | 只看該作者
感覺應該是括號的問題  換一行試試
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久99视频| 久久国产亚洲精品 | www.操.com | 九九久久精品视频 | 国产在线二区 | 日韩在线不卡 | 免费在线观看一区二区三区 | 91av视频在线观看 | 国产精品一区二区免费 | 久久久久国产一区二区三区 | a黄在线观看 | 狼色网 | a视频在线观看 | 国产一在线观看 | 91精品在线播放 | 免费一区二区三区 | 日韩一区二区av | 国产精品自产拍在线观看蜜 | 国产精品视频久久 | 日韩中文一区二区三区 | 在线免费观看成年人视频 | 国产一区二区在线播放 | 欧美日韩高清在线一区 | 国产精品国产成人国产三级 | 国产精品久久av | 色天天综合 | 91精品一区二区三区久久久久久 | 99久视频| 亚洲黄色一级毛片 | 久久久久国产精品www | 6996成人影院网在线播放 | 91在线视频免费观看 | 看av电影| 国产成人免费视频 | 天天天天天天天干 | 国产第一页在线播放 | 综合九九 | 国产视频导航 | 日韩三区在线 | 妞干网av| 久久精品成人 |