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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

這個單片機程序為什么按鍵沒有反應?

[復制鏈接]
跳轉到指定樓層
樓主
ID:494908 發表于 2022-4-6 13:26 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<math.h>
  4. #define uchar unsigened char
  5. #define uint unsigned int
  6. #define AddWr 0x90

  7. sbit SDA=P3^7;
  8. sbit SCL=P3^6;                                       
  9. sbit RS=P2^0;
  10. sbit RW=P2^1;
  11. sbit E =P2^2;
  12. sbit k1=P3^5;
  13. sbit k2=P1^1;
  14. sbit k3=P1^2;
  15. sbit k4=P1^3;
  16. sbit k5=P1^4;

  17. unsigned int temp;
  18. unsigned char way;


  19. void delay_ms(unsigned int n)  //12MHZ晶振時延時1ms,若用11.0592MHZ,則j=110
  20. {
  21.   unsigned int i=0,j=0;
  22.    for(i=n;i>0;i--)
  23.     for(j=0;j<123;j++);
  24. }

  25. void delay_8591()
  26. {
  27.    _nop_();   _nop_(); _nop_();_nop_(); _nop_();           //起始條件建立時間大于4.7us,延時
  28. }         

  29. /*******************************************PCF8591DA轉換模塊**************************/////////////////////
  30. /****************************************************************************************///////////
  31.    void start()//開始信號  
  32. {  
  33.     SDA=1;            //確保SDA線為高電平,開始        之前都確保為高電平
  34.     delay_8591();         
  35.     SCL=1;                             //確保SCL為高電平
  36.      delay_8591();                    
  37.     SDA=0;                     //在SCL為高時拉低SDA線,即為起始信號
  38.     delay_8591();  
  39.         SCL=0;                                   //將SCL線拉低,為后面SDA的傳數據時電平變化做準備
  40. }  

  41. void stop() //停止信號  
  42. {  
  43.     SDA=0;                    //確保SDA線為低電平
  44.      delay_8591();   
  45.     SCL=1;                          //確保SCL線為高電平
  46.      delay_8591();   
  47.     SDA=1;                      //在SCL為高時拉高SDA線,即為停止信號,此時SDA和SCL均為高,同時完成IIC初始化過程
  48.      delay_8591(); ;  
  49. }  


  50. void init() //初始化  
  51. {  
  52.     SDA=1;  
  53.      delay_8591();  
  54.     SCL=1;  
  55.      delay_8591();      
  56. }  

  57. void write_byte(unsigned char date) //寫一字節數據  
  58. {  
  59.     unsigned char i;   
  60.     for(i=0;i<8;i++)  
  61.     {  
  62.             if(date&0x80)         //判斷最高位,并賦予SDA
  63.                   SDA=1;
  64.                 else
  65.                   SDA=0;
  66.                 delay_8591();
  67.                 SCL=1;                     //SCL高電平,SDA數據穩定,發送,通知被控器開始接收數據位
  68.                 delay_8591();
  69.                 date=date<<1;         //發送完成,發生時左移一位 移出的一位在CY中  
  70.         SCL=0;          //只有在scl=0時sda能變化值        
  71.     }
  72.         delay_8591();     
  73.     SDA=1;              //將SDA拉高,開始為IIC設備應答做準備
  74.     delay_8591();
  75. }  


  76. void respons()//應答    相當于一個智能的延時函數  
  77. {  
  78.     unsigned char i;  
  79.     SCL=1;                            //先拉高SCL,等待SDA應答
  80.     delay_8591();  
  81.     while((SDA==1)&&(i<250))  
  82.         i++;  
  83.     SCL=0;  
  84.     delay_8591();
  85. }  


  86. void write_add(unsigned char date)  
  87. {  
  88.     start();  
  89.     write_byte(AddWr);    //10010000  前四位固定 接下來三位全部被接地了 所以都是0 最后一位是寫 所以為低電平  
  90.     respons();  
  91.     write_byte(0x40);  
  92.     respons();  
  93.     write_byte(date);  
  94.     respons();  
  95.     stop();  
  96.         }

  97. unsigned char code sin_tab[256]=
  98. {
  99.           0x80,0x83,0x86,0x89,0x8D,0x90,0x93,0x96,0x99,0x9C,0x9F,0xA2,0xA5,0xA8,0xAB,0xAE,
  100.           0xB1,0xB4,0xB7,0xBA,0xBC,0xBF,0xC2,0xC5,0xC7,0xCA,0xCC,0xCF,0xD1,0xD4,0xD6,0xD8,
  101.           0xDA,0xDD,0xDF,0xE1,0xE3,0xE5,0xE7,0xE9,0xEA,0xEC,0xEE,0xEF,0xF1,0xF2,0xF4,0xF5,
  102.           0xF6,0xF7,0xF8,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
  103.           0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,
  104.           0xF5,0xF4,0xF2,0xF1,0xEF,0xEE,0xEC,0xEA,0xE9,0xE7,0xE5,0xE3,0xE1,0xDF,0xDD,0xDA,
  105.           0xD8,0xD6,0xD4,0xD1,0xCF,0xCC,0xCA,0xC7,0xC5,0xC2,0xBF,0xBC,0xBA,0xB7,0xB4,0xB1,
  106.           0xAE,0xAB,0xA8,0xA5,0xA2,0x9F,0x9C,0x99,0x96,0x93,0x90,0x8D,0x89,0x86,0x83,0x80,
  107.           0x80,0x7C,0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,0x5A,0x57,0x55,0x51,
  108.           0x4E,0x4C,0x48,0x45,0x43,0x40,0x3D,0x3A,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,
  109.           0x25,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,0x11,0x10,0x0E,0x0D,0x0B,0x0A,
  110.           0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
  111.           0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
  112.           0x0A,0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,0x1C,0x1E,0x20,0x22,0x25,
  113.           0x27,0x29,0x2B,0x2E,0x30,0x33,0x35,0x38,0x3A,0x3D,0x40,0x43,0x45,0x48,0x4C,0x4E,
  114.           0x51,0x55,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,0x6C,0x6F,0x72,0x76,0x79,0x7C,0x80
  115.                  };                                         //用于生成正弦波

  116. void sin_8591()         //正弦波
  117. {
  118.          unsigned int i;
  119.   for(i=0;i<256;i++)
  120.   {
  121.     write_add(sin_tab[i]);          //data byte
  122.         delay_ms(5);
  123.         }
  124.         }


  125. void fangbo()
  126.         {
  127.         unsigned int i;
  128.         if(i<128)
  129.           write_add(0xff);
  130.                 if(i>=128)
  131.                 write_add(0x00);
  132.                 i++;
  133.          if(i>256)
  134.                   i=0;
  135.                 }
  136.         

  137. void sanjiao()
  138. {
  139.     unsigned int i;
  140.     while(1)
  141.         {
  142.           for(i=0;i<255;i++)
  143.             write_add(i);                 
  144.             for(i=255;i>0;i--)
  145.                  write_add(i);
  146.                 }
  147.                 }
  148.          

  149.   void juxing()
  150.   {        
  151.     unsigned int i;
  152.         while(1)
  153.         {
  154.            for(i=0;i<256;i++)
  155.            {
  156.              write_add(i);
  157.                  }
  158.                 }
  159.         }

  160. void main()
  161. {
  162.     TH0 = (65536-5000)/256;
  163.     TL0 = (65536-5000)%256;
  164.     TH1 = (65536-5000)/256;
  165.     TL1 = (65536-5000)%256;
  166.    EA = 1;
  167.        ET0 = 1;
  168.         ET1 = 1;
  169.           TR0 = 1;
  170.            TR1 = 1;  
  171.           init();
  172.           }



  173. void anjian(void)  interrupt 3
  174. {
  175.              TH1=(65536-5000)/256;                               //5000us
  176.              TL1=(65536-5000)%256;
  177.   if(k1==0)
  178.       {
  179.         
  180.               delay_ms(5);
  181.                           way++;
  182.                           if(way>=3)
  183.                           way=0;
  184.       }

  185. }

  186. void wave(void) interrupt 1
  187. {
  188.           TH0=(65536-5000)/256;
  189.     TL0=(65536-5000)%256;
  190.         if(way==0)
  191.         {
  192.          sin_8591();
  193.         }
  194.         if(way==1)
  195.         {
  196.         fangbo();
  197.          }
  198.          if(way==2)
  199.          {
  200.            sanjiao();
  201.           }
  202.           if(way==3)
  203.          {
  204.            juxing();
  205.           }
  206.           }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:161164 發表于 2022-4-6 15:46 來自手機 | 只看該作者
定時器沒有設置運行模式,于是運行了13位定時器,把(65536-5000)放入13位定時器會產生500us左右的中斷,當有鍵按下,中斷中有delay,delay其間又定時器又有中斷…
回復

使用道具 舉報

板凳
ID:101869 發表于 2022-4-6 22:46 來自手機 | 只看該作者
中斷不要用阻塞延時,樓上正解
回復

使用道具 舉報

地板
ID:494908 發表于 2022-4-8 12:10 | 只看該作者
lkc8210 發表于 2022-4-6 15:46
定時器沒有設置運行模式,于是運行了13位定時器,把(65536-5000)放入13位定時器會產生500us左右的中斷,當 ...

那該怎么解決呢?兩個定時器沖突,求大神指點
回復

使用道具 舉報

5#
ID:121859 發表于 2022-4-8 12:29 | 只看該作者
主要問題是主程序里面少了一個while(1);加到最后吧。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本在线看片 | 免费h在线 | 久在线精品视频 | 国产成人免费视频网站视频社区 | 亚洲高清在线观看 | 国产精品久久久亚洲 | 亚洲国产二区 | 欧美精品一区二区三区在线播放 | 一级全黄少妇性色生活免费看 | 在线日韩视频 | 欧美另类视频在线 | 成人在线电影网站 | 成人精品一区二区三区 | 色综合99 | 免费成人毛片 | 亚洲一区视频在线 | 性做久久久久久免费观看欧美 | 久久人体视频 | 国产午夜精品一区二区三区四区 | 亚洲一区二区免费 | 国产美女高潮 | 美女一级毛片 | 精品中文在线 | 欧美一区二区久久 | 日本在线小视频 | 中文一区| 不卡一区二区三区四区 | 日韩在线视频一区 | 国产视频一区二区 | 欧美精品一区三区 | 国产激情一区二区三区 | 成年免费大片黄在线观看一级 | 亚洲97| 欧美日韩久久精品 | 日本午夜精品 | 欧美四虎 | 欧美精品一区二区在线观看 | 久久av影院 | 伊人影院在线观看 | 午夜精品网站 | 久草免费在线视频 |