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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

誰能幫我看一下stm32按鍵無線發射的程序,各位大佬幫下忙!

[復制鏈接]
回帖獎勵 30 黑幣 回復本帖可獲得 6 黑幣獎勵! 每人限 2 次
跳轉到指定樓層
樓主
ID:312859 發表于 2018-5-31 08:29 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
這是按鍵無線發射的程序,我加了一個lcd1602,目前是開機就顯示一個A。
我想按鍵按下再顯示,應該怎么改,求告知
程序有點長,希望能幫我看一下
小弟感激不盡。!

  1. #include "stm32f10x.h"
  2. #include "public.h"
  3. #define DATA (GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15)
  4. #define rs (GPIO_Pin_1)
  5. #define rw (GPIO_Pin_7)
  6. #define e (GPIO_Pin_0)

  7. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
  8. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))
  9. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))

  10. //IO口地址映射
  11. #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C
  12. #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C
  13. #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C
  14. #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C
  15. #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C
  16. #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C   
  17. #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0C   
  18. #define GPIOA_IDR_Addr    (GPIOA_BASE+8) //0x40010808
  19. #define GPIOB_IDR_Addr    (GPIOB_BASE+8) //0x40010C08
  20. #define GPIOC_IDR_Addr    (GPIOC_BASE+8) //0x40011008
  21. #define GPIOD_IDR_Addr    (GPIOD_BASE+8) //0x40011408
  22. #define GPIOE_IDR_Addr    (GPIOE_BASE+8) //0x40011808
  23. #define GPIOF_IDR_Addr    (GPIOF_BASE+8) //0x40011A08
  24. #define GPIOG_IDR_Addr    (GPIOG_BASE+8) //0x40011E08

  25. //IO口操作,只對單一的IO口!
  26. //確保n的值小于16!
  27. #define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)  //輸出
  28. #define PAin(n)    BIT_ADDR(GPIOA_IDR_Addr,n)  //輸入
  29. #define PBout(n)   BIT_ADDR(GPIOB_ODR_Addr,n)  //輸出
  30. #define PBin(n)    BIT_ADDR(GPIOB_IDR_Addr,n)  //輸入
  31. #define PCout(n)   BIT_ADDR(GPIOC_ODR_Addr,n)  //輸出
  32. #define PCin(n)    BIT_ADDR(GPIOC_IDR_Addr,n)  //輸入
  33. #define PDout(n)   BIT_ADDR(GPIOD_ODR_Addr,n)  //輸出
  34. #define PDin(n)    BIT_ADDR(GPIOD_IDR_Addr,n)  //輸入
  35. #define PEout(n)   BIT_ADDR(GPIOE_ODR_Addr,n)  //輸出
  36. #define PEin(n)    BIT_ADDR(GPIOE_IDR_Addr,n)  //輸入
  37. #define PFout(n)   BIT_ADDR(GPIOF_ODR_Addr,n)  //輸出
  38. #define PFin(n)    BIT_ADDR(GPIOF_IDR_Addr,n)  //輸入
  39. #define PGout(n)   BIT_ADDR(GPIOG_ODR_Addr,n)  //輸出
  40. #define PGin(n)    BIT_ADDR(GPIOG_IDR_Addr,n)  //輸入


  41. #define LED0  PAout(8)
  42. #define LED1  PDout(12)
  43. #define J1  PBout(7)
  44. #define J2  PBout(8)

  45. unsigned char *P_RXD;//接收數據指針
  46. unsigned char Num_RXD=0;//要打印字節區位碼的字節數
  47. unsigned char Num_TXD=0;//發送緩沖區的字節數

  48. unsigned char TxBuffer[256]={0,2,3,};//串口發送緩沖區
  49. unsigned char RxBuffer[256]; //串口接收緩沖區
  50. unsigned char Key1_Value=1;
  51. unsigned char Key2_Value=1;
  52. unsigned char t;

  53. void Key_Delay (void)
  54. {
  55. unsigned int i;

  56. for(i=0;i<0xfff;i++);


  57. }
  58. void GPIOINIT()   //端口初始化
  59. {
  60. GPIO_InitTypeDef GPIO_InitStructure;
  61. GPIO_InitStructure.GPIO_Pin=DATA|rs|rw|e;
  62. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  63. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  64. GPIO_Init(GPIOB,&GPIO_InitStructure);
  65. // GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);//把調試設置普通IO口
  66. }
  67. void RCCINIT() //系統初始化
  68. {
  69. SystemInit();
  70. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  71.     //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  72. //如果不加這條語句程序顯示就會出錯,即沒有打開端口復用功能的時鐘配置
  73. }
  74. u8 readbusy() //忙信號檢測
  75. {  
  76. u8 f;
  77. GPIO_ResetBits(GPIOB,rs);  
  78. GPIO_SetBits(GPIOB,rw);
  79. GPIO_SetBits(GPIOB,e);
  80. f=((GPIO_ReadInputData(GPIOB)&0X8000));
  81. delayms(10);
  82. GPIO_ResetBits(GPIOB,e);
  83. return f;  
  84. }
  85. void lcdwrc(u8 c)   //寫八位數據
  86. {
  87. while(readbusy());
  88. GPIO_ResetBits(GPIOB,rs);  
  89. GPIO_ResetBits(GPIOB,rw);
  90. GPIO_ResetBits(GPIOB,e);
  91. delayms(1);
  92. GPIOB->BSRR = c<<8 & 0xf000;  //將數據送到P0口
  93.     GPIOB->BRR = ((~c)<<8) & 0xf000;
  94. delayms(1);
  95. GPIO_SetBits(GPIOB,e);
  96. delayms(1);
  97. GPIO_ResetBits(GPIOB,e);
  98. delayms(1);
  99. }
  100. void lcdwrc4bit(long c)    //寫8位數據,通過4個引腳
  101. {
  102. while(readbusy());
  103. GPIO_ResetBits(GPIOB,rs);  
  104. GPIO_ResetBits(GPIOB,rw);
  105. GPIO_ResetBits(GPIOB,e);
  106. delayms(1);
  107. GPIOB->BSRR = c<<8 & 0xf000;  //將數據送到P0口
  108.     GPIOB->BRR = ((~c)<<8) & 0xf000;
  109. delayms(1);
  110. GPIO_SetBits(GPIOB,e);
  111. delayms(1);
  112. GPIO_ResetBits(GPIOB,e);
  113. delayms(1);
  114. GPIOB->BSRR = c<<12 & 0xf000;  //將數據送到P0口
  115.     GPIOB->BRR = ((~c)<<12) & 0xf000;
  116. delayms(1);
  117. GPIO_SetBits(GPIOB,e);
  118. delayms(1);
  119. GPIO_ResetBits(GPIOB,e);
  120. delayms(1);
  121. }
  122. void lcdwrd(long dat)   //讀八位數據通過4個引腳
  123. {
  124. while(readbusy());  
  125. GPIO_SetBits(GPIOB,rs);  
  126. GPIO_ResetBits(GPIOB,rw);
  127. GPIO_ResetBits(GPIOB,e);
  128. delayms(1);
  129. GPIOB->BSRR = dat<<8 & 0xf000;  //將數據送到P0口
  130.     GPIOB->BRR = ((~dat)<<8) & 0xf000;
  131. delayms(1);
  132. GPIO_SetBits(GPIOB,e);
  133. delayms(1);
  134. GPIO_ResetBits(GPIOB,e);
  135. delayms(1);
  136. GPIOB->BSRR = dat<<12 & 0xf000;  //將數據送到P0口
  137.     GPIOB->BRR = ((~dat)<<12) & 0xf000;
  138. delayms(1);
  139. GPIO_SetBits(GPIOB,e);
  140. delayms(1);
  141. GPIO_ResetBits(GPIOB,e);
  142. delayms(1);
  143. GPIO_ResetBits(GPIOB,rs);
  144. }
  145. void lcdinit()      //LCD初始化
  146. {
  147. delayms(15);
  148. lcdwrc4bit(0x32);
  149. delayms(5);
  150. lcdwrc4bit(0x28);
  151. delayms(5);
  152. lcdwrc4bit(0x08);
  153. delayms(5);
  154. lcdwrc4bit(0x01);
  155. delayms(5);
  156. lcdwrc4bit(0x06);
  157. delayms(5);
  158. lcdwrc4bit(0x0c);
  159. delayms(5);
  160. }

  161. //返回按鍵值
  162. //0,沒有任何按鍵按下
  163. //1,KEY0按下
  164. //2,KEY1按下
  165. //3,KEY2按下 WK_UP
  166. //注意此函數有響應優先級,KEY0>KEY1>KEY2!!
  167. u8 KEY_Scan(void)
  168. {  
  169. static u8 key_up=1;//按鍵按松開標志
  170. //JTAG_Set(JTAG_SWD_DISABLE);
  171. if(key_up&&((KEY0 == 0x00)||(KEY1 == 0x00)||(KEY_WK == 0x01)))
  172.   {
  173.   delay_ms(10);//去抖動
  174.   key_up=0;
  175.   if (KEY0 == 0x00)  //按鍵按下:低電平有效
  176.    {
  177.    //JTAG_Set(SWD_ENABLE);
  178.    return 1;
  179.    }
  180.   if (KEY1 == 0x00)  //按鍵按下:低電平有效
  181.    {
  182.    //JTAG_Set(SWD_ENABLE);
  183.    return 2;
  184.    }
  185.   if (KEY_WK == 0x01)  //按鍵按下:高電平有效
  186.    {
  187.    //JTAG_Set(SWD_ENABLE);
  188.    return 3;
  189.    }
  190.   }
  191.   else if((KEY0 == 0x01)&&(KEY1 == 0x01)&&(KEY_WK == 0x00)) key_up=1;      
  192. //JTAG_Set(SWD_ENABLE);
  193. return 0;// 無按鍵按下
  194. }


  195. /*
  196. *********************************************************************************************************
  197. * 函 數 名: LedToggle
  198. * 功能說明: 翻轉指定的LED指示燈。
  199. * 形    參:_no : 指示燈序號,范圍 1 - 4, 0表示全部
  200. * 返 回 值: 按鍵代碼
  201. *********************************************************************************************************
  202. */
  203. void LedToggle(uint8_t NUM)
  204. {
  205. if (NUM == 0)
  206. {
  207.   LED0^=1;
  208.   LED1^=1;
  209.   
  210.   return;
  211. }

  212. NUM--;

  213. if (NUM == 0)
  214. {
  215.   LED0^=1;
  216. }
  217. else if (NUM == 1)
  218. {
  219.   LED1^=1;
  220. }
  221.    
  222. }

  223. unsigned char  key,mode;
  224.    
  225. unsigned char tmp_buf[33];
  226. /**
  227.   * @brief  Main program.
  228.   * @param  None
  229.   * @retval : None
  230.   */
  231. int main(void)
  232. {
  233.   /* Setup STM32 system (clock, PLL and Flash configuration) */
  234.    //uint8_t i =0;

  235.   RCCINIT();   //  系統時鐘初始化
  236. GPIOINIT();   //  端口初始化
  237. lcdinit(); //   液晶顯示初始化

  238. lcdwrc4bit(0x00+0x80);

  239.   lcdwrd('A');

  240. SystemInit();
  241.   RCC_Configuration();
  242.   NVIC_Configuration();
  243.   GPIO_Configuration();
  244.   SysTick_init();         //延時初始化
  245.   SPI2_Init();           //初始化SPI硬件口
  246. P_RXD=RxBuffer;      //接收指針指向接收緩沖區
  247.   USART_Configuration();   //USART1配置
  248.   TIM2_Config();      //定時器初始化  
  249. LED0_ON();        //LED亮
  250.   LED0_OFF();        //LED滅
  251. LED1_ON();        //LED亮
  252.   LED1_OFF();        //LED滅
  253. NRF24L01_Init();       //初始化NRF24L01

  254.      while(1)
  255.    {      
  256.         if(KEY1==0)
  257.       {           
  258.        TX_Mode();
  259.        delay_ms(10);   
  260.       if(NRF24L01_TxPacket(tmp_buf)==TX_OK)
  261.      {                     
  262.             tmp_buf[0]=4;
  263.         tmp_buf[1]=5;
  264.         LED1_ON();
  265.      delay_ms(5000);
  266.      LED1_OFF();
  267.      }
  268.      }
  269.    
  270.    }
  271.    }
復制代碼



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

使用道具 舉報

沙發
ID:330198 發表于 2018-5-31 09:37 | 只看該作者
把lcdwrd('A'); 這句移到if(KEY1==0)里面
回復

使用道具 舉報

板凳
ID:312859 發表于 2018-5-31 11:41 | 只看該作者
zhanghyg 發表于 2018-5-31 09:37
把lcdwrd('A'); 這句移到if(KEY1==0)里面

移進去就不顯示了,不管括號了寫啥,都顯示小寫的g
回復

使用道具 舉報

地板
ID:330198 發表于 2018-5-31 15:23 | 只看該作者
LCD的子程序你還少了一個,你初始化的命令也有點問題,建議對照51的程序修改
回復

使用道具 舉報

5#
ID:342312 發表于 2018-5-31 17:05 | 只看該作者
沒有lcd1602的手冊,怎么看呢?
回復

使用道具 舉報

6#
ID:342317 發表于 2018-5-31 17:11 | 只看該作者
very  good!
回復

使用道具 舉報

7#
ID:342326 發表于 2018-5-31 17:22 | 只看該作者
初始化好像有點問題吧
回復

使用道具 舉報

8#
ID:342370 發表于 2018-5-31 18:30 | 只看該作者
初始化的問題,會不會把顯示關了
回復

使用道具 舉報

9#
ID:342266 發表于 2018-5-31 22:35 | 只看該作者
初始化的問題
回復

使用道具 舉報

10#
ID:312859 發表于 2018-6-1 09:39 | 只看該作者
zhanghyg 發表于 2018-5-31 15:23
LCD的子程序你還少了一個,你初始化的命令也有點問題,建議對照51的程序修改

好的,謝謝
回復

使用道具 舉報

11#
ID:312859 發表于 2018-6-1 09:40 | 只看該作者

好的,謝謝
回復

使用道具 舉報

12#
ID:342652 發表于 2018-6-1 09:43 | 只看該作者
你的初始化有問題,LCD里跳轉也有問題
回復

使用道具 舉報

13#
ID:342755 發表于 2018-6-1 11:15 | 只看該作者
大佬能給個lcd1602和ds1302芯片的源碼嗎?
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久鲁视频 | 国产91精品久久久久久久网曝门 | 久久精品国产亚洲夜色av网站 | 中文字幕av一区 | 精品久久电影 | 国产精品久久久久久久久久免费看 | 国产成人免费视频网站视频社区 | 国产精品日韩欧美一区二区三区 | 国产精品夜色一区二区三区 | 91人人视频在线观看 | 天天操天天舔 | 久久伊人青青草 | 999国产视频 | 蜜桃一区二区三区在线 | 久久免费视频观看 | 欧美日韩18 | 国产精品成人一区 | 久久aⅴ乱码一区二区三区 91综合网 | 日韩精品一区二区三区视频播放 | 日韩av在线免费 | 成人精品在线观看 | 在线观看成人小视频 | 日韩精品二区 | 国产精品有限公司 | 久久综合一区 | 国产激情精品一区二区三区 | 久久精品欧美一区二区三区不卡 | 欧美成人精品一区二区男人看 | 在线观看av网站永久 | 毛片一区 | 在线免费观看日本 | 成人日韩av | 国产一级片一区二区三区 | 午夜精品久久久久久久久久久久 | 精品一区在线 | 一级h片| 午夜天堂精品久久久久 | 国产在线视频一区 | 久在线精品视频 | 久久国产成人午夜av影院武则天 | 国产一级久久久久 |