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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索

求助,單片機(jī)數(shù)碼管顯示出錯(cuò)

查看數(shù): 2696 | 評(píng)論數(shù): 6 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁(yè)<-左 右->
    組圖打開(kāi)中,請(qǐng)稍候......
發(fā)布時(shí)間: 2020-3-22 13:07

正文摘要:

本帖最后由 華夏哈哈哈 于 2020-3-23 14:47 編輯 //問(wèn)題是:當(dāng)key1,key2按下時(shí),數(shù)碼管顯0000(key1按下)/0100(key2按下),可是目前正常顯示沒(méi)問(wèn)題,但是摁下key1,key2數(shù)碼管沒(méi)有如期的運(yùn)行,我想請(qǐng)教各位大神, ...

回復(fù)

ID:698701 發(fā)表于 2020-3-23 12:33
本帖最后由 華夏哈哈哈 于 2020-3-23 14:56 編輯

目前的代碼已修改如下,但是沒(méi)有按鍵按下去以后執(zhí)行的程序,只有打斷,我目前想讓key1按鍵按下時(shí)數(shù)碼管顯示0000,key2按下時(shí)數(shù)碼管顯示0100,希望各位大神給點(diǎn)撥一下


  1. //線性區(qū)間標(biāo)度變換公式:    y=(115-15)/(243-13)*X+15kpa   


  2. #include <AT89X52.h>
  3. #include <intrins.h>
  4. #include <stdio.h>


  5. #define R24C04ADD 0xA1
  6. #define W24C04ADD 0xA0

  7. //ADC0832的引腳
  8. sbit ADCS =P2^2;  //ADC0832 chip seclect
  9. sbit ADDI =P2^4;  //ADC0832 k in
  10. sbit ADDO =P2^4;  //ADC0832 k out
  11. sbit ADCLK =P2^3;  //ADC0832 clock signal

  12. sbit led=P3^7;//led報(bào)警燈
  13. sbit beep=P1^7;//報(bào)警蜂鳴
  14. sbit a1=P1^0;
  15. sbit a2=P1^1;
  16. sbit a3=P1^2;
  17. sbit a4=P1^3;
  18. sbit key1=P3^0;
  19. sbit key2=P3^1;
  20. sbit c1=P0^0;
  21. sbit c2=P0^1;
  22. sbit c3=P0^2;
  23. sbit c4=P0^3;
  24. sbit c5=P0^4;
  25. sbit c6=P0^5;
  26. sbit c7=P0^6;
  27. sbit c8=P0^7;


  28. sbit SDA = P2 ^ 1;                                //數(shù)據(jù)線
  29. sbit SCL = P2 ^ 0;                                //時(shí)鐘線
  30. bit bAck;                                          //應(yīng)答標(biāo)志 當(dāng)bbAck=1是為正確的應(yīng)答

  31. unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};  //位掃描
  32. unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};  //共陽(yáng)數(shù)碼管字段碼
  33. unsigned char dispbuf[4];
  34. unsigned int temp;
  35. unsigned char getdata; //獲取ADC轉(zhuǎn)換回來(lái)的值
  36. unsigned char H_count,L_count;


  37. void delay_us(void)  //12mhz delay 1.01ms
  38. {
  39.    unsigned char x,y,i;
  40.            for(i=0;i<3;i++)  
  41.    x=4;
  42.    while(x--)
  43.   {
  44.        y=30;
  45.        while(y--);
  46.     }
  47. }


  48. void display(void)  //數(shù)碼管顯示函數(shù)
  49. {

  50.   char k;
  51.   for(k=0;k<4;k++)
  52.   {
  53.         P1 = dispbitcode[k];                //【【【【問(wèn)題在這里
  54.   P0 = dispcode[dispbuf[k]];
  55.     if(k==1)          //加上數(shù)碼管的dp小數(shù)點(diǎn)
  56.           P0&=0x7f;
  57.   delay_us();
  58.            }
  59. }          

  60. /************
  61. 讀ADC0832函數(shù)
  62. ************/

  63. //采集并返回
  64. unsigned int Adc0832(unsigned char channel)     //AD轉(zhuǎn)換,返回結(jié)果
  65. {
  66.     unsigned char i=0;
  67.     unsigned char j;
  68.     unsigned int dat=0;
  69.     unsigned char ndat=0;

  70.     if(channel==0)channel=2;
  71.     if(channel==1)channel=3;
  72.     ADDI=1;
  73.     _nop_();
  74.     _nop_();
  75.     ADCS=0;//拉低CS端
  76.     _nop_();
  77.     _nop_();
  78.     ADCLK=1;//拉高CLK端
  79.     _nop_();
  80.     _nop_();
  81.     ADCLK=0;//拉低CLK端,形成下降沿1
  82.     _nop_();
  83.     _nop_();
  84.     ADCLK=1;//拉高CLK端
  85.     ADDI=channel&0x1;
  86.     _nop_();
  87.     _nop_();
  88.     ADCLK=0;//拉低CLK端,形成下降沿2
  89.     _nop_();
  90.     _nop_();
  91.     ADCLK=1;//拉高CLK端
  92.     ADDI=(channel>>1)&0x1;
  93.     _nop_();
  94.     _nop_();
  95.     ADCLK=0;//拉低CLK端,形成下降沿3
  96.     ADDI=1;//控制命令結(jié)束
  97.     _nop_();
  98.     _nop_();
  99.     dat=0;
  100.     for(i=0;i<8;i++)
  101.     {
  102.         dat|=ADDO;//收數(shù)據(jù)
  103.         ADCLK=1;
  104.         _nop_();
  105.         _nop_();
  106.         ADCLK=0;//形成一次時(shí)鐘脈沖
  107.         _nop_();
  108.         _nop_();
  109.         dat<<=1;
  110.         if(i==7)dat|=ADDO;
  111.     }  
  112.     for(i=0;i<8;i++)
  113.     {
  114.         j=0;
  115.         j=j|ADDO;//收數(shù)據(jù)
  116.         ADCLK=1;
  117.         _nop_();
  118.         _nop_();
  119.         ADCLK=0;//形成一次時(shí)鐘脈沖
  120.         _nop_();
  121.         _nop_();
  122.         j=j<<7;
  123.         ndat=ndat|j;
  124.         if(i<7)ndat>>=1;
  125.     }
  126.     ADCS=1;//拉低CS端
  127.     ADCLK=0;//拉低CLK端
  128.     ADDO=1;//拉高數(shù)據(jù)端,回到初始狀態(tài)
  129.     dat<<=8;
  130.     dat|=ndat;
  131.     return(dat);            //return ad k
  132.                
  133. }


  134. //啟動(dòng)I2C總線,即發(fā)送起始條件
  135. void StartI2C()
  136. {
  137.         SDA = 1;                              //發(fā)送起始條件數(shù)據(jù)信號(hào)
  138.         _nop_();
  139.         SCL = 1;
  140.         _nop_();                                    //起始建立時(shí)間大于4.7us
  141.         _nop_();
  142.         _nop_();
  143.         _nop_();
  144.         _nop_();
  145.         SDA = 0;                              //發(fā)送起始信號(hào)
  146.         _nop_();
  147.         _nop_();
  148.         _nop_();
  149.         _nop_();
  150.         _nop_();
  151.         SCL = 0;                                //時(shí)鐘操作
  152.         _nop_();
  153.         _nop_();
  154. }
  155. //結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件
  156. void StopI2C()
  157. {
  158.         SDA = 0;                                //發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)
  159.         _nop_();                                      //發(fā)送結(jié)束條件的時(shí)鐘信號(hào)
  160.         SCL = 1;                                //結(jié)束條件建立時(shí)間大于4us
  161.         _nop_();
  162.         _nop_();
  163.         _nop_();
  164.         _nop_();
  165.         _nop_();
  166.         SDA = 1;                                //發(fā)送I2C總線結(jié)束命令
  167.         _nop_();
  168.         _nop_();
  169.         _nop_();
  170.         _nop_();
  171.         _nop_();       
  172. }
  173. //發(fā)送一個(gè)字節(jié)的數(shù)據(jù)
  174. void        SendByte(unsigned char c)
  175. {
  176.         unsigned char BitCnt;
  177.         for(BitCnt = 0;BitCnt < 8;BitCnt++)                                  //一個(gè)字節(jié)
  178.                 {
  179.                         if((c << BitCnt)& 0x80) SDA = 1;                   //判斷發(fā)送位
  180.                         else        SDA = 0;
  181.                         _nop_();
  182.                         SCL = 1;                              //時(shí)鐘線為高,通知從機(jī)開(kāi)始接收數(shù)據(jù)
  183.                         _nop_();
  184.                         _nop_();
  185.                         _nop_();
  186.                         _nop_();
  187.                         _nop_();
  188.                         SCL = 0;
  189.                 }
  190.         _nop_();
  191.         _nop_();
  192.         SDA = 1;                                                //釋放數(shù)據(jù)線,準(zhǔn)備接受應(yīng)答位
  193.         _nop_();
  194.         _nop_();
  195.         SCL = 1;
  196.         _nop_();
  197.         _nop_();
  198.         _nop_();
  199.         if(SDA == 1) bAck =0;
  200.         else bAck = 1;                                                //判斷是否收到應(yīng)答信號(hào)
  201.         SCL = 0;
  202.         _nop_();
  203.         _nop_();
  204. }
  205. //接收一個(gè)字節(jié)的數(shù)據(jù)
  206. unsigned char RevByte()
  207. {
  208.         unsigned char retc;
  209.         unsigned char BitCnt;
  210.         retc = 0;
  211.         SDA = 1;
  212.         for(BitCnt=0;BitCnt<8;BitCnt++)
  213.         {
  214.                 _nop_();
  215.                 SCL = 0;                                            //置時(shí)鐘線為低,準(zhǔn)備接收
  216.                 _nop_();
  217.                 _nop_();
  218.                 _nop_();
  219.                 _nop_();
  220.                 _nop_();
  221.                 SCL = 1;                                            //置時(shí)鐘線為高使得數(shù)據(jù)有效
  222.                 _nop_();
  223.                 _nop_();
  224.                 retc = retc << 1;                                    //左移補(bǔ)零
  225.                 if (SDA == 1)
  226.                 retc = retc + 1;                                     //當(dāng)數(shù)據(jù)為1則收到的數(shù)據(jù)+1
  227.                 _nop_();
  228.                 _nop_();
  229.         }
  230.         SCL = 0;
  231.         _nop_();
  232.         _nop_();
  233.         return(retc);                                   //返回收到的數(shù)據(jù)
  234.                
  235. }

  236. //WChipAdd:寫器件地址;RChipAdd:讀器件地址;InterAdd:內(nèi)部地址;如寫正確則返回?cái)?shù)據(jù),
  237. //否則返回對(duì)應(yīng)錯(cuò)誤步驟序號(hào)
  238. //向指定器件的內(nèi)部指定地址發(fā)送一個(gè)指定字節(jié)
  239. unsigned char WIICByte(unsigned char WChipAdd,unsigned char InterAdd,unsigned char WIICData)
  240. {
  241.         StartI2C();                                                                                      //啟動(dòng)總線
  242.         SendByte(WChipAdd);                                                        //發(fā)送器件地址以及命令
  243.         if (bAck==1)                                                                                          //收到應(yīng)答
  244.         {
  245.                 SendByte(InterAdd);                                                                //發(fā)送內(nèi)部子地址
  246.                 if (bAck ==1)
  247.                 {
  248.                         SendByte(WIICData);                                                        //發(fā)送數(shù)據(jù)
  249.                         if(bAck == 1)
  250.                         {
  251.                                 StopI2C();                    //停止總線
  252.                                 return(0xff);
  253.                         }
  254.                         else
  255.                         {
  256.                                 return(0x03);
  257.                         }                       
  258.                 }
  259.                 else
  260.                 {
  261.                         return(0x02);
  262.                 }
  263.         }
  264.         return(0x01);
  265. }
  266. //讀取指定器件的內(nèi)部指定地址一個(gè)字節(jié)數(shù)據(jù)
  267. unsigned char RIICByte(unsigned char WChipAdd,unsigned char RChipAdd,unsigned char InterDataAdd)
  268. {
  269.         unsigned char TempData;       
  270.         TempData = 0;
  271.         StartI2C();                                                                        //啟動(dòng)
  272.         SendByte(WChipAdd);                                                    //發(fā)送器件地址以及讀命令
  273.         if (bAck==1)                                                                            //收到應(yīng)答
  274.         {
  275.                 SendByte(InterDataAdd);                                        //發(fā)送內(nèi)部子地址
  276.                 if (bAck ==1)
  277.                 {
  278.                         StartI2C();
  279.                         SendByte(RChipAdd);       
  280.                         if(bAck == 1)
  281.                         {
  282.                                 TempData = RevByte();       //接收數(shù)據(jù)
  283.                                 StopI2C();                  //停止I2C總線
  284.                                 return(TempData);           //返回?cái)?shù)據(jù)
  285.                         }
  286.                         else
  287.                         {
  288.                                 return(0x03);
  289.                         }       
  290.                 }
  291.                 else
  292.                 {
  293.                         return(0x02);
  294.                 }
  295.         }
  296.         else
  297.         {
  298.                 return(0x01);
  299.         }
  300. }
  301. //報(bào)警子函數(shù)
  302. void alarm(void)
  303. {
  304.           
  305.          if(getdata>=208.611252)                 //如果當(dāng)前壓力值大于100kpa,
  306.          {
  307.           led=0;
  308.           beep=0;                                                   //則啟動(dòng)報(bào)警
  309.          }                          
  310.                         
  311.                
  312.           else
  313.          {
  314.                  led=1;
  315.                  beep=1;
  316.                   
  317. }                        //關(guān)閉報(bào)警
  318. }
  319.        
  320.        


  321. void main(void) //主程序
  322. {
  323.   unsigned int OverCounter = 0;
  324.   unsigned char i;
  325.   bit OverFlg = 0;
  326.   unsigned int temp,ppress = 0;
  327.   float  press;

  328.   while(1)
  329.          
  330.   {

  331.           display( );
  332.           if((key1==0)||(key2==0))break;   //////////////此處為加的打斷
  333.           if
  334.             if(getdata>=208.611252);
  335.        TR0=1;          
  336.           getdata=Adc0832(0);
  337.           alarm();
  338.           for(i=0;i<25;i++)
  339.           if(14<getdata<243)                                       //當(dāng)壓力值介于15kpa到115kpa之間時(shí),遵循線性變換
  340.                  {                            
  341.                   int vary=getdata;                                                //y=(115-15)/(243-13)*X+15kpa                       
  342.                         press=((10.0/23.0)*vary)+9.5;                        //測(cè)試時(shí)補(bǔ)償值為9.3                                                                                                          
  343.                         temp=(int)(press*10);                  //放大10倍,便于后面的計(jì)算
  344.       if(temp != ppress)
  345.       {
  346.         ppress = temp;
  347.         OverFlg = 1;
  348.       }                                                                                           
  349.                         dispbuf[3]=temp/1000;                                     //取壓力值百位
  350.                         dispbuf[2]=(temp%1000)/100;                            //取壓力值十位
  351.                         dispbuf[1]=((temp%1000)%100)/10;                    //取壓力值個(gè)位
  352.                         dispbuf[0]=((temp%1000)%100)%10;                        //取壓力值十分位
  353.                         display();
  354.           }
  355.           }
  356.               }
  357.          

  358.                    
  359.   void Time0(void) interrupt 1 using 0          //中斷,改變蜂鳴器聲音
  360. {
  361.                  if(getdata>=208.611252);
  362.         beep=~beep;           //蜂鳴器狀態(tài)改變
  363.         if( L_count!=0x00 )
  364.         {
  365.            L_count--;           //初值減小
  366.            TH0=H_count;    //高位賦初值
  367.        TL0=L_count;           //低位賦初值
  368.        return;                   //返回主函數(shù)
  369.      }else  H_count--;
  370.                
  371.         if( H_count!=0xfc )           //H_count從0xff降到0Xfc,周期結(jié)束
  372.         {
  373.            L_count--;
  374.            TH0=H_count;
  375.        TL0=L_count;
  376.        return;
  377.         }
  378.         else
  379.      {
  380.          if(led==0);
  381.         H_count=0xff;
  382.         L_count=0xa0;
  383.         TH0=H_count;
  384.         TL0=L_count;
  385.         beep=1;                          //關(guān)閉蜂鳴器
  386.         TR0=0;                         //關(guān)閉定時(shí)器
  387.      }   
  388. }       
復(fù)制代碼


ID:698701 發(fā)表于 2020-3-23 12:30
zhouchuantao 發(fā)表于 2020-3-23 00:22
思路:按下后跳轉(zhuǎn)獨(dú)立程序,在這個(gè)程序中循環(huán)顯示。

具體的應(yīng)該怎么寫呀?我目前就是困在這一步,c語(yǔ)言學(xué)的不扎實(shí),需要一個(gè)師傅點(diǎn)撥一下
ID:477107 發(fā)表于 2020-3-23 09:01
你最好放一張?jiān)韴D,別人看起來(lái)也方便
ID:255377 發(fā)表于 2020-3-23 00:22
思路:按下后跳轉(zhuǎn)獨(dú)立程序,在這個(gè)程序中循環(huán)顯示。
ID:592477 發(fā)表于 2020-3-22 21:05
你們寫程序能不能搞成模塊化設(shè)計(jì)呢?這么長(zhǎng)一段你讓人怎么看?

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久爽爽爽麻豆色哟哟 | 一区二区高清在线观看 | 日本涩涩网 | 视频一区中文字幕 | 精品婷婷 | 亚洲精品在线视频 | 国产一区| 成人在线视频网 | 成人水多啪啪片 | 男人的天堂一级片 | va在线 | 久久美女视频 | 福利视频网站 | 国产高清视频在线观看 | 伊人网91| 国产一区91在线 | 正在播放国产精品 | 中文字幕视频在线 | 成人av在线播放 | 国产精品夜间视频香蕉 | 亚洲精品一区二区三区在线观看 | 成人网av | 日韩视频一区二区三区 | 99热99| 国产探花在线精品一区二区 | 国产视频日韩 | 亚洲高清av在线 | 国产视频1区2区 | 秋霞a级毛片在线看 | 精品国产乱码久久久久久果冻传媒 | 在线亚州 | 2019天天干天天操 | 成人h视频在线观看 | 瑟瑟激情| 天天综合网91 | 人人鲁人人莫人人爱精品 | 亚洲男人网 | av黄色网 | 国产亚洲精品久久久久久牛牛 | 欧美欧美欧美 | 一区二区国产精品 |