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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32單片機+GPS+1602液晶代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:470422 發表于 2019-1-20 13:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
借用了原子哥的程序,自己修改后又加入了北斗模塊,通過北斗讀取實時的時間顯示到液晶上。

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "usart.h"
  5. #include "gps.h"

  6. #define LCD_1602RS GPIO_Pin_12
  7. #define LCD_1602RW GPIO_Pin_13
  8. #define LCD_1602EN GPIO_Pin_14

  9. unsigned char USART_Buff[12];
  10. unsigned char table[5]= "times";
  11. unsigned char a;
  12. u8 i = 0;
  13. u8 res=0;
  14. u8 flag_M=0;
  15. u8 flag_C=0;
  16. u8 flag = 0;
  17. u8 j = 0;
  18. u8 t = 0;

  19. //串口初始化

  20. void My_USART1_Init(void)
  21. {
  22.         GPIO_InitTypeDef GPIO_InitStrue;
  23.         USART_InitTypeDef USART_InitStrue;
  24.         NVIC_InitTypeDef NVIC_InitStrue;
  25.        
  26.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);    //使用相應的時鐘
  27.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
  28.         GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
  29.   GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
  30.         GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  31.         GPIO_Init (GPIOA,&GPIO_InitStrue);       //初始化IO口
  32.        
  33.         GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
  34.   GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
  35.         GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;
  36.         GPIO_Init (GPIOA,&GPIO_InitStrue);      //初始化IO口
  37.        
  38.         USART_InitStrue.USART_BaudRate=9600;
  39.         USART_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
  40.         USART_InitStrue.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
  41.   USART_InitStrue.USART_Parity=USART_Parity_No;
  42.         USART_InitStrue.USART_StopBits=USART_StopBits_1;
  43.         USART_InitStrue.USART_WordLength=USART_WordLength_8b;

  44.         USART_Init(USART1,&USART_InitStrue);
  45.         USART_Cmd(USART1,ENABLE);  //使能串口1
  46.         USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);    //開啟接受中斷
  47.                
  48.         NVIC_InitStrue.NVIC_IRQChannel=USART1_IRQn;
  49.         NVIC_InitStrue.NVIC_IRQChannelCmd=ENABLE;
  50.         NVIC_InitStrue.NVIC_IRQChannelPreemptionPriority=1;
  51.         NVIC_InitStrue.NVIC_IRQChannelSubPriority=1;
  52.         NVIC_Init(&NVIC_InitStrue);     //中斷優先級的設置
  53. }          

  54. //寫命令
  55. void LCD1602_Write_Cmd(unsigned char cmd)
  56. {
  57.           GPIO_ResetBits(GPIOF,LCD_1602RS);   //RS 0
  58.                 delay_us(2);
  59.                 GPIO_ResetBits(GPIOF,LCD_1602RW);   //RW 0
  60.          
  61.                 GPIO_Write(GPIOD, cmd);
  62.                 GPIO_ResetBits(GPIOF,LCD_1602EN);   //E 0
  63.                 delay_us(2);
  64.                 GPIO_SetBits(GPIOF,LCD_1602EN);   //E 1
  65.                 delay_us(2);
  66.           GPIO_ResetBits(GPIOF,LCD_1602EN); //E 0
  67. }


  68. //寫數據       
  69. void LCD1602_Write_Date(unsigned char dat)           
  70. {               
  71.                 GPIO_SetBits(GPIOF,LCD_1602RS);   //RS 1    RS高是數據,低是命令
  72.                 delay_us(2);
  73.                 GPIO_ResetBits(GPIOF,LCD_1602RW);  //RW 0
  74.                 GPIO_Write(GPIOD, dat);
  75.                 GPIO_ResetBits(GPIOF,LCD_1602EN);  //E 0
  76.                  delay_us(2);
  77.                 GPIO_SetBits(GPIOF,LCD_1602EN);   //E 1
  78.     delay_us(2);
  79.                 GPIO_ResetBits(GPIOF,LCD_1602EN);  //E 0
  80.                 delay_us(2);
  81. }

  82.     //VO   11
  83.     //RS   12
  84.     //RW   13
  85.     //E    14         

  86. int main(void)
  87. {       
  88.   GPIO_InitTypeDef  GPIO_InitStructure;
  89.         SystemInit();          //系統時鐘初始化
  90.   delay_init();                        //延時函數初始化         
  91.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOF, ENABLE);            //使能PF,PD端口時鐘

  92.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  93.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  94.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度為50MHz
  95.         GPIO_Init(GPIOD, &GPIO_InitStructure);                                //初始化GPIOD0~7

  96.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14;
  97.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //推挽輸出
  98.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //IO口速度為50MHz
  99.         GPIO_Init(GPIOF, &GPIO_InitStructure);                                //初始化GPIOF 11,14,13,12
  100.          
  101.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
  102.          
  103.                                 delay_ms(300);         
  104.          //液晶初始化
  105.         LCD1602_Write_Cmd(0x38);           //顯示16*2
  106.         delay_us(10);
  107.         LCD1602_Write_Cmd(0x0c);        
  108.         delay_us(10);
  109.         LCD1602_Write_Cmd(0x06);      //讀寫字符后地址加1,屏顯不移動
  110.         delay_us(10);
  111.         LCD1602_Write_Cmd(0x01);   //清屏,數據指針清零
  112.         delay_us(10);       
  113.         LCD1602_Write_Cmd(0x80);       //設置數據地址指針初始值
  114.         delay_us(2);
  115.         My_USART1_Init();
  116.         GPIO_ResetBits(GPIOA,GPIO_Pin_10);
  117.         while(1)
  118.                 {
  119.                                 delay_ms(1);
  120.                         if(flag == 1)
  121.                                 {
  122.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC));
  123.                                           flag=0;
  124.                                                 while(USART_GetFlagStatus(USART1,USART_FLAG_TC));
  125.                                
  126.                                         for(i = 0;i<5;i++)
  127.            {
  128.                                                 LCD1602_Write_Cmd(0x80+i+5);
  129.                                                 delay_ms(10);
  130.                                                 LCD1602_Write_Date(table[i]);
  131.                                                 delay_ms(10);
  132.                                          
  133.                                          }                                       
  134.                                                                                
  135.                                                                                                   //顯示時間
  136.                                         for(j =3;j<5;j++)                                  //h
  137.                                         {
  138.                                                 LCD1602_Write_Cmd(0xc0+j-1);
  139.                                                 delay_ms(10);
  140.                                                 LCD1602_Write_Date(USART_Buff[j]);
  141.                                                 delay_ms(10);
  142.                                                 USART_SendData(USART1,USART_Buff[j]);
  143.                                         }
  144.                                         LCD1602_Write_Cmd(0xc0+4);
  145.                                                 delay_ms(10);
  146.                                         LCD1602_Write_Date(':');
  147.                                                 delay_ms(10);
  148.                                         for(j =5;j<7;j++)                                    //m
  149.                                         {
  150.                                                 LCD1602_Write_Cmd(0xc0+j);
  151.                                                 delay_ms(10);
  152.                                                 LCD1602_Write_Date(USART_Buff[j]);
  153.                                                 delay_ms(10);
  154.                                                 USART_SendData(USART1,USART_Buff[j]);
  155.                                         }
  156.                                           LCD1602_Write_Cmd(0xc0+7);
  157.                                                 delay_ms(10);
  158.                                         LCD1602_Write_Date(':');
  159.                                                 delay_ms(10);
  160.                                         for(j =7;j<12;j++)                                  //s
  161.                                         {
  162.                                                 LCD1602_Write_Cmd(0xc0+j+1);
  163.                                                 delay_ms(10);
  164.                                                 LCD1602_Write_Date(USART_Buff[j]);
  165.                                                 delay_ms(10);
  166.                                                 USART_SendData(USART1,USART_Buff[j]);
  167.                                         }
  168.                                 }
  169.                                 delay_ms(1000);
  170.                 }       
  171. }
  172. void USART1_IRQHandler(void)
  173. {                 
  174.          if(USART_GetITStatus(USART1,USART_IT_RXNE))
  175.                  {
  176.                          USART_Buff[i++] = USART_ReceiveData(USART1);
  177.                          if(flag_M==1)
  178.                                  {
  179.                                          USART_SendData(USART1,0+0x30);       
  180.                                          if(USART_Buff[1] == 'C')
  181.                                                  {
  182.                                                          flag_C=1;
  183.                                                  }
  184.                                                  else
  185.                                                          {
  186.                                                                 flag_M=0;
  187.                                                                  i = 0;
  188.                                                          }  
  189. ……………………

  190. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
usart 1062 BS280 - prefer.7z (190.6 KB, 下載次數: 53)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91视视频在线观看入口直接观看 | 一级黄色日本片 | 成人av一区二区三区 | 999久久久免费精品国产 | 日韩色图在线观看 | 高清视频一区二区三区 | 欧美日韩亚洲在线 | 午夜影院在线观看 | 麻豆精品久久 | 亚洲欧美精品在线 | 国产精品日韩欧美一区二区三区 | 99热视| 亚洲一区二区三区视频 | 国产精品成人一区二区三区夜夜夜 | 综合久久久 | 亚洲一区二区在线视频 | 爱爱视频网 | 国产1区2区| 亚洲视频欧美视频 | 一区二区三区小视频 | 天天激情综合 | 黄色av网站在线观看 | 男人的天堂在线视频 | 亚洲欧美日韩精品久久亚洲区 | 国产在线观看av | 2021天天干夜夜爽 | 99久久久国产精品 | 殴美成人在线视频 | 精产国产伦理一二三区 | 亚洲人在线观看视频 | 91成人免费 | 97成人在线 | 一区二区三区视频在线 | 亚洲国产欧美日韩 | 国产中文字幕网 | 激情国产在线 | 午夜理伦三级理论三级在线观看 | 国产日韩欧美 | 国产精品日女人 | 秋霞电影一区二区 | 九久久 |