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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

單片機+aip650做一個孵化器的溫控,按鍵響應不知怎么搞求助

查看數: 4725 | 評論數: 24 | 收藏 2
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-11-2 21:05

正文摘要:

aip650做一個孵化器的溫控,溫度顯示搞定了,按鍵響應不知怎么搞。有會的嗎?請高手指點下。 單片機源程序如下: #include <absacc.h> #include <intrins.h> #include <STC89C5xRC.H> //定義常量 #d ...

回復

ID:680729 發表于 2022-11-16 07:17
不懂啊,跟棒錘差不了多少。
ID:213173 發表于 2022-11-16 06:32
jzcjz 發表于 2022-11-15 21:45
跟這爛芯片杠上了,重新把代碼手工輸了一遍。但還是不行。請各位高人指點迷津。

這么多警告不解決,你還想正常運行?


ID:680729 發表于 2022-11-15 21:45
跟這爛芯片杠上了,重新把代碼手工輸了一遍。但還是不行。請各位高人指點迷津。
  1. /**********************************手工輸入********
  2. 名稱:aip650的驅動
  3. 時間:2022-11-13
  4. 版本:

  5. **************************************************/
  6. //頭文件
  7. #include <STC89X52RC.H>
  8. #include <absacc.h>
  9. #include  <intrins.h>

  10. /*************************************************
  11.              常量、變量定義區


  12. ***************************************************/
  13. //常量定義
  14. #define true 1
  15. #define  false 0
  16. #define  uchar unsigned char
  17. #define  uint unsigned int

  18. //數組定義
  19. uchar Display_Code[13]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0x08,0x02,0x00};
  20.          //共陰數碼管段碼 0,   1,  2,  3,  4 , 5,   6,  7,  8,  9,  .,   -,  不亮
  21. uchar  Display_16Code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0xe7,0xb6,0xf0,0x37,0xf2,0xe2};
  22. //16進 制段碼(用于顯示鍵值)0,   1,   2,  3,  4,  5,   6, 7,  8,   9,  a,   b,   c,   d,   e,   f
  23. uchar Dig_Bit_Code[4]={0x6a,0x6e,0x6c,0x68};//650位碼
  24. uchar Light_Level_Code[8]={0x11,0x21,0x31,0x41,0x51,0x61,0x71,0x01};//亮度調節

  25. uchar keyvalue;
  26. uint wendu;//用于存儲溫度值

  27. uint h;//溫度計算使用
  28. uint temp;//溫度返回值
  29. /***************************溫度小數部分用查表法*****************/
  30. uchar ditab[16]=
  31. {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  32. uchar temp_data[2]={0x00,0x00};//讀出溫度暫存
  33. uchar display[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數據,共4個數據和一個運算暫用

  34. //定義IO口
  35. sbit   SDA=P3^7;
  36. sbit   SCL=P3^6;

  37. sbit    DQ=P1^0;      //ds18b20溫度輸入口
  38. sbit    DIN=P1^1;     //LED小數點控制

  39. /**********************************函數定義區************************************/
  40. //I2C相關
  41. /*******************************************************************************
  42. 功能:I2CWait
  43. 描述:I2C延時
  44. 參數:
  45. 返回:
  46. *******************************************************************************/
  47. void I2CWait(void)
  48. {_nop_();_nop_();_nop_();_nop_();
  49. }




  50. /*******************************************************************************
  51. 功能:I2CStart
  52. 描述:開啟I2C總線
  53. 參數:
  54. 返回:位變量,1=I2C總線可用,0=不可用
  55. *******************************************************************************/
  56. bit I2CStart(void)
  57. {   
  58.         SDA=1;
  59.         SCL=1;
  60.         I2CWait();
  61. if(!SDA)
  62.         return false;//SDA線為低電平則總線忙,退出
  63.                 SDA=0;
  64.         I2CWait();
  65.         while(SDA)
  66.                 return false;//SDA線為高電平則總線出錯,退出
  67.         SCL=0;
  68.         I2CWait();
  69.         return true;

  70. }

  71. /*******************************************************************************
  72. 功能:I2CStop(void)
  73. 描述:關閉I2C總線
  74. 參數:
  75. 返回:
  76. *******************************************************************************/
  77. void I2CStop(void)
  78. {
  79.   SDA=0;
  80.         SCL=0;
  81.         I2CWait();
  82.         SCL=1;
  83.         I2CWait();
  84.         SDA=1;

  85. }


  86. /*******************************************************************************
  87. 功能:I2CSendAck
  88. 描述:發送ACK信號
  89. 參數:
  90. 返回:
  91. *******************************************************************************/
  92. void I2CSendAck(void)
  93. {
  94.         SDA=0;
  95.         SCL=0;
  96.         I2CWait();
  97.         SCL=1;
  98.         I2CWait();
  99.         SCL=0;
  100. }


  101. /*******************************************************************************
  102. 功能:I2CSendNoAck
  103. 描述:發送  No Ack
  104. 參數:
  105. 返回:
  106. *******************************************************************************/
  107. void I2CSendNoAck(void)
  108. {   
  109.         SDA=1;
  110.         SCL=0;
  111.         I2CWait();
  112.         SCL=1;
  113.         I2CWait();
  114.         SCL=0;        
  115.         
  116. }

  117. /*******************************************************************************
  118. 功能:I2CWaitAck
  119. 描述:讀取ACK信號
  120. 參數:
  121. 返回:位變量, 1=有ACK,0=無ACK
  122. *******************************************************************************/
  123. bit I2CWaitAck(void)
  124. {
  125.      uchar errtime=255;
  126.         SCL=0;
  127.         SDA=1;
  128.         I2CWait();
  129.         SCL=1;
  130.         I2CWait();
  131.         while(SDA)
  132.         {
  133.                 errtime--;
  134.                 if(!errtime)
  135.                         SCL=0;
  136.                 return false;
  137.         }
  138.         SCL=0;
  139.         return true;
  140.     }

  141. /*******************************************************************************
  142. 功能:I2CSendByte
  143. 描述:向總線發送一個字節
  144. 參數:待發送字節demand,發送順序指示order
  145.                  order=1,從HI-->LO發送8bit數
  146.                  order=0,從LO-->HI發送8bit數
  147. 返回:
  148. *******************************************************************************/
  149. void I2CSendByte(uchar demand,bit order)
  150.                 {
  151.                         uchar i=8;
  152.                         if(order)
  153.                         {
  154.                                 while(i--)
  155.                                 {
  156.                                         SCL=0;
  157.                                         _nop_();
  158.                                         SDA=(bit)(demand&0x80);
  159.                                         demand<<=1;
  160.                                         I2CWait();
  161.                                         SCL=1;
  162.                                         I2CWait();
  163.                                 }
  164.                                 SCL=0;
  165.                         }
  166.                         else
  167.                         {
  168.                                 while(i--)
  169.                                 {
  170.                                         SCL=0;
  171.                                         _nop_();
  172.                                         SDA=(bit)(demand&0x01);
  173.                                         demand>>=1;
  174.                                         I2CWait();
  175.                                         SCL=1;
  176.                                         I2CWait();
  177.                                 }
  178.                                 SCL=0;
  179.                         }
  180.                 }

  181. /*******************************************************************************
  182. 功能:I2CReceiveByte
  183. 描述:從總線讀一個字節
  184. 參數:
  185. 返回:
  186. *******************************************************************************/
  187. uchar I2CReceiveByte(void)
  188. {
  189.         uchar i=8;
  190.         uchar ddata=0;
  191.         SDA=1;
  192.         while(i--)
  193.         {
  194.                 ddata>>=1;//數據從低位開始讀取
  195.                 SCL=0;
  196.                 I2CWait();
  197.                 SCL=1;
  198.                 I2CWait();//從低位開始 ddata|=SDA;ddata>>=1
  199.                 if(SDA)
  200.                 {
  201.                                    ddata|=0x80;
  202.                 }
  203.         }
  204.         SCL=0;
  205.              return ddata;
  206. }


  207. /*******************************************************************************
  208. 功能:從650讀鍵值
  209. 描述:
  210. 參數:
  211. 返回:uchar鍵值
  212. *******************************************************************************/
  213. uchar AipReadKey()
  214. {
  215.                   uchar key;
  216.                      I2CStart();
  217.                      I2CSendByte(0x4f,1);
  218.                  if(I2CWaitAck())
  219.                                          {
  220.                                              key=I2CReceiveByte();
  221.                                                 
  222.                                            I2CSendAck();
  223.                                          }
  224.              I2CStop();
  225.                                          return key;
  226. }

  227. /*******************************************************************************
  228. 功能:向650發送地址,和數據
  229. 描述:
  230. 參數:
  231. 返回:
  232. *******************************************************************************/
  233. void Aip650_Set(uchar add,uchar dat)
  234. {
  235.   //寫顯存必須從高地址開始寫
  236.         I2CStart();
  237.         I2CSendByte(add,1);
  238.         I2CSendAck();
  239.         I2CSendByte(dat,1);
  240.         I2CSendAck();
  241.         I2CStop();

  242. }


  243. /*******************************************************************************
  244. 功能:驅動數碼管顯示數字
  245. 描述:位碼數組中選擇對應的位地址,在段碼數組中選擇對應數字的段碼發送給650
  246. 參數:
  247. 返回:
  248. *******************************************************************************/
  249. void Aip650_DisPlay(uchar Dig_Bit,uchar Display_num)
  250. {
  251.         Aip650_Set(Dig_Bit_Code[Dig_Bit-1],Display_Code[Display_num]);

  252.          }



  253. /*******************************************************************************
  254. 功能:驅動數碼管顯示16進制數的代碼
  255. 描述:
  256. 參數:
  257. 返回:
  258. *******************************************************************************/
  259. void Aip650_DisPlay16(uchar Dig_Bit16,uchar Display_num16)
  260. {   
  261.      Aip650_Set(Dig_Bit_Code[Dig_Bit16-1],Display_16Code[Display_num16]);



  262.            }





  263. /*******************************************************************************
  264. 功能:650清屏
  265. 描述:
  266. 參數:
  267. 返回:
  268. *******************************************************************************/
  269. void Aip650_CLR()
  270. {
  271.     uchar i;
  272.         for(i=0;i<4;i++)
  273.         {
  274.         Aip650_Set(Dig_Bit_Code[i],0x00);
  275.         }

  276. }

  277. /*******************************************************************************
  278. 功能:設置顯示亮度
  279. 描述:
  280. 參數:
  281. 返回:
  282. *******************************************************************************/
  283. void Light_Level_Set(uchar level)
  284. {
  285.         Aip650_Set(0x48,Light_Level_Code[level-1]);
  286. }


  287. /*******************************************************************************
  288. 功能:delay 延時程序 11us
  289. 描述:
  290. 參數:
  291. 返回:
  292. *******************************************************************************/
  293. void delay(uint t)
  294. {
  295. for(;t>0;t--);
  296. }

  297. /*******************************************************************************
  298. 功能:Ds18b20 復位函數
  299. 描述:
  300. 參數:
  301. 返回:
  302. *******************************************************************************/
  303. void ow_reset(void)
  304. {
  305. uchar presence=1;
  306.         while(presence)
  307.         {while(presence)
  308.                 {
  309.                         DQ=1;
  310.                         _nop_();_nop_();//從高拉到低
  311.                         DQ=0;
  312.                         delay(50);//550us
  313.                         DQ=1;
  314.                         delay(6);//66us
  315.                         presence=DQ;//presence=0復位成功,繼續下一步
  316.                 }
  317.                 delay(45);//延時500us
  318.                 presence=~DQ;
  319.         }
  320.         DQ=1;  //拉高電平
  321. }


  322. /*******************************************************************************
  323. 功能:Ds18b20寫命令函數
  324. 描述:向總線上寫1個字節
  325. 參數:
  326. 返回:
  327. *******************************************************************************/
  328. void write_byte(uchar val)
  329. {
  330. uchar i;
  331.         for(i=8;i>0;i--)
  332.         {DQ=1;_nop_();_nop_();//從高拉低
  333.         DQ=0; _nop_();_nop_();_nop_();_nop_();//5us
  334.                 DQ=val&0x01;// 最低位移出
  335.         delay(6);//66us
  336.         val=val/2;//右移一位}
  337. }
  338. DQ=1;
  339. delay(1);
  340. }


  341. /*******************************************************************************
  342. 功能:從18b20總線上讀1字節
  343. 描述:
  344. 參數:
  345. 返回:value
  346. *******************************************************************************/
  347. uchar read_byte(void)
  348. {
  349. uchar i;
  350.         uchar value=0;
  351.         for(i=8;i>0;i--)
  352.         {
  353.                 DQ=1;_nop_();_nop_();
  354.                 value>>=1;
  355.                 DQ=0;_nop_();_nop_();_nop_();_nop_();//4us
  356.                 DQ=1;_nop_();_nop_();_nop_();_nop_();//4us
  357.                 if(DQ)value|=0x80;
  358.                 delay(6);
  359.         }
  360.         
  361.         DQ=1;
  362.         return(value);
  363. }



  364. /*******************************************************************************
  365. 功能:讀出溫度
  366. 描述:
  367. 參數:
  368. 返回:
  369. *******************************************************************************/
  370. read_temp()
  371. {
  372. ow_reset();
  373.         delay(200);//總線復位
  374.         write_byte(0xcc);//發命令
  375.         write_byte(0x44);//發轉換命令
  376.         ow_reset();
  377.         delay(1);
  378.         write_byte(0xcc);//發命令
  379.         write_byte(0xbe);
  380.         temp_data[0]=read_byte();//讀溫度的低字節
  381.         temp_data[1]=read_byte();//讀溫度的高字節
  382.         temp=temp_data[1];
  383.         temp<<=8;
  384.         temp=temp|temp_data[0];// 兩字節合成一個整型變量
  385.         return temp;
  386. }





  387. /*******************************************************************************
  388. 功能:溫度處理
  389. 描述:二進制數的高字節的低半字節和低字節的高半字節組成一個字,這個字節轉換為十進制后,
  390. 就是溫度的百、十、個位值,而剩下的低字節的低半字節轉化成十進制后,就是溫度值的小數部分。
  391. 參數:
  392. 返回:
  393. *******************************************************************************/
  394. void work_temp(uint tem)
  395. {
  396.         uchar n=0;
  397.         if(tem>6348)          //溫度正負判斷
  398.         {tem=65536-tem;n=1;}   //負溫度求補碼,標志位置1
  399.         display[4]=tem&0x0f;
  400.         display[0]=ditab[display[4]];//存入小數部分的顯示值
  401.         display[4]=tem>>4;
  402.         display[3]=display[4]/100;//取百位數據暫存
  403.         display[1]=display[4]%100;//取后兩位數據暫存
  404.         display[2]=display[1]/10;//取十位數據暫存
  405.         display[1]=display[1]%10;
  406.         /***********符號位顯示判斷*************************/
  407.         if(!display[3])
  408.         {
  409.         display[3]=0x0c;     //最高位為0時不顯示
  410.           if(!display[2])
  411.         {
  412.         display[2]=0x0c;     //次高位為0時不顯示
  413.         }
  414.         if(n)
  415.         {display[3]=0x0b;}    //負溫度時最高位顯示“-”
  416. }
  417. }

  418. /*******************************************************************************
  419. 功能:顯示溫度
  420. 描述:處理溫度數值,發送650
  421. 參數:
  422. 返回:
  423. *******************************************************************************/
  424. void xianshiwendu(uint tem1)
  425. {
  426.          work_temp(tem1);
  427.           Aip650_CLR();
  428.          Light_Level_Set(4);
  429.          Aip650_DisPlay(2,10);//顯示小數點
  430.          Aip650_DisPlay(3,display[2]);//十位
  431.    Aip650_DisPlay(2,display[1]);//個位
  432.    Aip650_DisPlay(1,display[0]);//小數
  433. }


  434. /*******************************************************************************
  435. 功能:顯示鍵值
  436. 描述:將按鍵的16進制代碼送顯示
  437. 參數:
  438. 返回:
  439. *******************************************************************************/
  440. void xianshijianzhi(uchar key1)
  441. {uchar a,b;
  442.         a=key1&0x0f;
  443.         Aip650_ClR();
  444.         Light_Level_Set(4);
  445.         Aip650_DisPlay16(1,a);
  446.         b=key1>>4;
  447.         b=b&0x0f;
  448.         Aip650_DisPlay(2,b);
  449. }





  450. /******************************主函數*****************************************
  451. 功能:
  452. 描述:
  453. 參數:
  454. 返回:
  455. *******************************************************************************/
  456. void main()
  457. {
  458.     P3=0xff;
  459.          P1=0xff;
  460.          
  461.          
  462.           while(1)
  463.                 {Aip650_CLR();
  464.           Light_Level_Set(4);
  465.                         Aip650_DisPlay(1,8);
  466.                 Aip650_DisPlay(2,8);        
  467.                 Aip650_DisPlay(3,8);        
  468.                         //keyvalue=AipReadKey();
  469.                         P16=~P16;
  470.                         P17=~P17;
  471.                         delay(150);
  472.                                                 //wendu=read_temp();

  473.                         //xianshiwendu(wendu);
  474.                         //xianshijianzhi(keyvalue);        
  475.   //if(wendu>29)
  476.                 //P13=~P13;
  477.                         }

  478. }
復制代碼
ID:161164 發表于 2022-11-13 17:38

ID:680729 發表于 2022-11-13 08:53
抓到鬼了。同樣的代碼,手工輸入的運行正常,復制粘貼的,編譯無錯但刷進去不能運行。

#include <STC89C5xRC.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit   key=P1^3;


void Delay(uint x)
{uchar t;
        while(x--)
        {
        for(t=0;t<120;t++);}
}
/*void delay(uint t)
{
  for (;t>0;t--);
}*/
/*main()
{key=0;
while(1)
{Delay(150);
key=~key;}
}
*/

void main()
{   
                //P3=0xFF;
          key=0;
        while(1);
        {
                Delay(150);
                 
                key=~key;


                         
        };
               
         
   
         
   }
ID:680729 發表于 2022-11-11 22:05
換蕊片,換單片機,查軟件,為什么本來是可以點亮的,為什么就不亮了。吐血啊。數碼管也是好的。沒思路了。嗨。
ID:680729 發表于 2022-11-10 21:38
現在數碼管干脆就不亮了,更換蕊片也不行,難道單片機壞了?換一片也不亮,搞什么鬼。跟我過不去啊。
ID:213173 發表于 2022-11-6 10:28
jzcjz 發表于 2022-11-5 23:49
鍵值摸清楚了,分別是a0,a4,ac,a8,b4,b8. 但是能顯示,switch 和顯示函數一塊兒用就能掃到鍵,單獨switch又 ...

不存在650跟不上單片機的速度問題,這是用STC8G1K08驅動TM1650的單鍵控制時鐘設置的局部代碼:
  1. //==============TM1650驅動部分=====================
  2. //us延時函數
  3. void Delay_us(unsigned int i)//@12MHz
  4. {
  5.         while(--i)
  6.         {
  7.                 _nop_();
  8.                 _nop_();
  9.         }
  10. }
  11. //開始信號
  12. void Start1650(void)
  13. {
  14.         CLK = 1;
  15.         DIO = 1;
  16.         Delay_us(5);
  17.         DIO = 0;
  18. }
  19. //寫一個字節 高位在前低位在后
  20. void WrByte1650(uchar oneByte)
  21. {
  22.         uchar i;
  23.         CLK = 0;
  24.         Delay_us(1);
  25.         for(i=0;i<8;i++)
  26.         {
  27.                 oneByte = oneByte<<1;
  28.                 DIO = CY;
  29.                 CLK = 0;
  30.                 Delay_us(5);
  31.                 CLK = 1;
  32.                 Delay_us(5);
  33.                 CLK = 0;
  34.         }
  35. }
  36. //應答ACK信號
  37. void Ask1650(void)
  38. {
  39.         uchar timeout = 1;
  40.         CLK = 1;
  41.         Delay_us(5);
  42.         CLK = 0;
  43.         while((DIO)&&(timeout<=100))
  44.         {
  45.                 timeout++;
  46.         }
  47.         Delay_us(5);
  48.         CLK = 0;
  49. }
  50. //停止信號
  51. void Stop1650(void)
  52. {
  53.         CLK = 1;
  54.         DIO = 0;
  55.         Delay_us(5);
  56.         DIO = 1;
  57. }
  58. //寫顯示地址和數據
  59. void Set1650(uchar add,uchar dat)
  60. {                                          
  61.         Start1650();     //開始
  62.         WrByte1650(add); //寫地址
  63.         Ask1650();       //應答
  64.         WrByte1650(dat); //寫數據
  65.         Ask1650();       //應答
  66.         Stop1650();      //停止
  67. }
  68. //顯示命令格式:空位  亮度等級位   7/8段位  空位  開關位
  69. //顯示命令格式: 0    1   1   1     1/0     0 0    1/0

  70. //初始化1650
  71. void Init1650()
  72. {
  73.         Set1650(0x48,0x31); //3級亮度 開顯示
  74. }
  75. //掃描1650按鍵
  76. uchar Scan1650_Key()
  77. {  
  78.         uchar i;
  79.         uchar rekey;
  80.         Start1650();     //開始
  81.         WrByte1650(0x49);//讀按鍵命令 0100 1111
  82.         Ask1650();                 //應答
  83.         for(i=0;i<8;i++)
  84.         {
  85.                 CLK = 1;
  86.                 rekey<<=1;
  87.                 if(DIO)rekey++;
  88.                 Delay_us(5);
  89.                 CLK = 0;
  90.         }
  91.         Ask1650();                  //應答
  92.         Stop1650();       //停止
  93.         return rekey;     //返回鍵值
  94. }
  95. //按鍵服務函數
  96. void key_service()
  97. {
  98.         static uint time=0;  //計數變量
  99.         temp=Scan1650_Key(); //讀取鍵值
  100.         if(temp==0x4E)       //按鍵按下
  101.         {
  102.                 time++;
  103.                 if(time>=key_L)  //長按
  104.                 {
  105.                         switch(KeySec)
  106.                         {
  107.                                 case 1: TIME[2]++;if(TIME[2]>23)TIME[2]=0; break;
  108.                                 case 2: TIME[1]++;if(TIME[1]>59)TIME[1]=0; break;
  109.                         }
  110.                         time=key_I;  //連+間隔
  111.                         num=500;     //自復位變量賦值(5秒)
  112.                 }
  113.         }
  114.         else                                //松手
  115.         {
  116.                 if(time>key_S && time<key_I)//短按
  117.                 {
  118.                         num=500;    //自復位變量賦值(5秒)
  119.                         KeySec++;
  120.                         if(KeySec>3)
  121.                         {
  122. //                                KeySec=0;
  123.                                 num=1;
  124.                         }
  125.                 }
  126.                 time=0;
  127.         }
  128. }
復制代碼
ID:680729 發表于 2022-11-5 23:49
鍵值摸清楚了,分別是a0,a4,ac,a8,b4,b8. 但是能顯示,switch 和顯示函數一塊兒用就能掃到鍵,單獨switch又不行了。可能真的是650跟不上單片機的速度。怎么解決呢?
ID:213173 發表于 2022-11-5 22:06
jzcjz 發表于 2022-11-5 21:46
按鍵有反應了。顯示值不太對。
uchar  Display_16code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf ...

曾經使用TM1650,也不清楚是新舊版本,按鍵無反應。后用數碼管顯示鍵值觀察,與手冊不一致。但修改按鍵服務函數與之對應后按鍵功能正常。
ID:680729 發表于 2022-11-5 21:46
按鍵有反應了。顯示值不太對。
uchar  Display_16code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0xbf,0xbe,0xf8,0x3f,0xfa,0xba};
//0,    1,   2 ,  3,  4,    5,   6,   7,   8,    9,  a,  b,c,d,e,f
/*******************************************************
功能:讀鍵值
描述:
參數:
返回:鍵值
********************************************************/
///*
unsigned char AipReadKey()
{
        unsigned char key;
  //AiP650_Set(0x4f,0x00);

   I2CStart();       
   I2CSendByte(0x4f,1);
        // I2CWaitAck() ;
        //if(I2CWaitAck())
        //I2CSendByte(0x00,1);
        if(I2CWaitAck())
        {key=I2CReceiveByte();
                       
        I2CSendAck();
        //if(I2CWaitAck())       
  //{ I2CSendByte(0x00,1);
       
                                //}
        }
        I2CStop();
return key;}//*/
/******************顯示鍵值*************************************
功能:將鍵值發送650顯示


****************************************************************/
void xianshijianzhi(uchar key1)
{uchar a,b;
         a=key1&0x0f;
    AiP650_CLR();   
                  Light_Level_Set(4);
         
         AiP650_DisPlay(1,a);
        b=key1>>4;
         b=b&0x0f;
          
          Light_Level_Set(4);
         
         AiP650_DisPlay(2,b);
         
}
ID:680729 發表于 2022-11-5 20:56
uchar  Display_16code[16]={0xf5,0x05,0x73,0x57,0x87,0xd6,0xf6,0x45,0xf7,0xd7,0xbf,0xbe,0xf8,0x3f,0xfa,0xba};
/******************顯示鍵值*************************************
功能:將鍵值發送650顯示


****************************************************************/
void xianshijianzhi(uchar key1)
{uchar a,b;
         a=key1&0x0f;
    AiP650_CLR();   
                  Light_Level_Set(4);
         
         AiP650_DisPlay(2,Display_16code[a-1]);
        b=key1>>4;
         b=b&0x0f;
          
          Light_Level_Set(4);
         
         AiP650_DisPlay(1,Display_16code[b-1]);
         
}


鍵值顯示22,按鍵無變化。不懂意思,難道讀不出鍵值?
ID:680729 發表于 2022-11-5 09:14
看了蕊片,是FDZY650,它與aip650不同?沒有資料。引腳和aip650是一樣的,就不知按鍵代碼是不是一樣。
ID:680729 發表于 2022-11-4 15:17
一時搞不定,試了好多方法,心累啊。水平有限,現丑現丑。
ID:220661 發表于 2022-11-4 07:43
另外,現在的51單片機速度有點快,IIC速度太快了擴展芯片跟不上。表現為顯示正常按鍵讀不到,別問我怎么知道的。
ID:213173 發表于 2022-11-4 06:27
jzcjz 發表于 2022-11-3 22:07
按鍵沒反應,鍵值都試了一遍。
keyvalue=AipReadKey();
     switch(keyvalue)

要按照廠家推薦的硬件電路,DIG端串接2K電阻,否則無法正常讀取鍵值。你的數碼管已經能正常顯示數字,可以用來顯示鍵值,以判斷讀鍵是否正確。TM1650分新舊版本,鍵碼不同,AIP650是不是也有新舊版本不得而知。
ID:680729 發表于 2022-11-3 22:07
按鍵沒反應,鍵值都試了一遍。
keyvalue=AipReadKey();
     switch(keyvalue)
                         {case 0x45:
                                 Light_Level_Set(4);
                                 AiP650_DisPlay(2,1);
                  break;
                                          case  0x55:
                                                 Light_Level_Set(4);
                                         AiP650_DisPlay(2,2);
                 break;
                                         case 0x5d:                           
                                                Light_Level_Set(4);
                                         AiP650_DisPlay(2,3);
                break;
                                          case 0x65:  
                                                Light_Level_Set(4);
                                         AiP650_DisPlay(2,4);
                  break;
                                          case 0x6d:
                                                 Light_Level_Set(4);
                                         AiP650_DisPlay(2,5);
                                         break;
                   case 0x75:
                 Light_Level_Set(4);
                         AiP650_DisPlay(2,6);
                                
                                                           
                         break;
                 
                       
                         
                         
                         ; }                         
                }
ID:213173 發表于 2022-11-3 21:12
jzcjz 發表于 2022-11-3 16:28
不是讀按鍵,是按鍵響應的。它那個按鍵的碼表好像不對啊。


最多28個鍵
void key_service()
{

        num=AipReadKey();
        switch(num)
        {
                case 0x44: /*任務 1*/ break;
                case 0x4c: /*任務 2*/ break;
                case 0x54: /*任務 3*/ break;
                case 0x5c: /*任務 4*/ break;
                ......     /*任務 n*/ break;
                case 0x77: /*任務28*/ break;
        }

}
ID:883242 發表于 2022-11-3 19:18
按鍵和溫度是完全不相關的兩件事,不存在“aip650按鍵程序的例子”,樓主還是先靜下心來,想想你需要你幾個按鍵,每個按鍵是干什么用的。你的項目需要哪些功能,這些按鍵是否能夠全部滿足。
ID:680729 發表于 2022-11-3 16:28
不是讀按鍵,是按鍵響應的。它那個按鍵的碼表好像不對啊。
ID:161164 發表于 2022-11-3 12:01
jzcjz 發表于 2022-11-3 11:16
有aip650按鍵程序的例子嗎?

這樣改看看



ID:680729 發表于 2022-11-3 11:16
有aip650按鍵程序的例子嗎?
ID:123289 發表于 2022-11-3 09:15
1、先編個【按鍵】程序,識別到XX鍵被按下了。
2、再編個【響應】程序,即按鍵后,你想干的活。
3、列個EXCEL表,列出XX鍵、或組合鍵分別要干的活。
4、運行【按鍵】程序,識別按鍵,再分別調用列表中的【響應】。

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产高清精品在线 | 国产成人小视频 | 欧美久久精品 | 看亚洲a级一级毛片 | 天天av天天好逼 | 日韩欧美精品 | 欧美亚洲视频 | 九九热免费视频在线观看 | 亚洲有码转帖 | 99re热精品视频国产免费 | 九九视频在线观看视频6 | 欧美日韩视频在线播放 | 日本久久福利 | 中文字幕1区2区3区 日韩在线视频免费观看 | 午夜伊人 | 一级aaaaaa毛片免费同男同女 | 欧美福利视频 | 亚洲精品一区在线 | 日韩精彩视频 | av国产精品毛片一区二区小说 | 99在线免费视频 | 91精品久久久久久久久 | 51ⅴ精品国产91久久久久久 | 这里有精品 | 欧美日韩在线精品 | 色婷婷av久久久久久久 | 我要看免费一级毛片 | 91视频久久 | 久久噜 | 国产欧美一区二区三区在线看 | 亚洲天堂一区 | 黄色片视频 | 欧美日韩精品综合 | av色在线| 婷婷色国产偷v国产偷v小说 | 久久国内| 欧美日在线| 丝袜天堂| 欧美男人天堂 | avtt国产 | 国产综合av |