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

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

QQ登錄

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

搜索
查看: 1716|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

STM32單片機(jī)lcd16c02+adc程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:967993 發(fā)表于 2021-11-1 14:53 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  1. // LCD1602.h

  2. #ifndef _BSP_LCD1602_H
  3. #define _BSP_LCD1602_H

  4. #include "stm32f10x.h"
  5. #include "stm32f10x_gpio.h"
  6. #include "bsp_SysTick.h"

  7. #define LCD1602_CLK  RCC_APB2Periph_GPIOB  

  8. #define LCD1602_GPIO_PORT   GPIOB

  9. #define LCD1602_E    GPIO_Pin_10              //定義使能引腳
  10. #define LCD1602_RW   GPIO_Pin_11             //定義讀寫(xiě)引腳
  11. #define LCD1602_RS   GPIO_Pin_12             //定義數(shù)據(jù)、命名引腳



  12. #define EO(X)         X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_E)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_E))
  13. #define RWO(X)        X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_RW)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_RW))
  14. #define RSO(X)        X? (GPIO_SetBits(LCD1602_GPIO_PORT,LCD1602_RS)):(GPIO_ResetBits(LCD1602_GPIO_PORT,LCD1602_RS))

  15. //只能是某個(gè)GPIO口的低八位
  16. #define DB0                                        GPIO_Pin_0
  17. #define DB1                                        GPIO_Pin_1
  18. #define DB2                                        GPIO_Pin_2
  19. #define DB3                                        GPIO_Pin_3
  20. #define DB4                                        GPIO_Pin_4
  21. #define DB5                                        GPIO_Pin_5
  22. #define DB6                                        GPIO_Pin_6
  23. #define DB7                                        GPIO_Pin_7

  24. void LCD1602_Init(void);  //初始化LCD602;
  25. void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str,uint8_t len);
  26. void LCD_ShowNum(uint8_t x, uint8_t y,uint8_t num);
  27. void LCD_ShowChar(uint8_t x, uint8_t y,uint8_t dat);







  28. #endif //_BSP_LCD1602_H
復(fù)制代碼

#include "adc.h"

void ADC1_GPIO_Config(void){
    GPIO_InitTypeDef GPIO_InitStructure;
          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);        //使能ADC1,GPIOC時(shí)鐘
           
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
    //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//為什么沒(méi)有配置這個(gè)????
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;        //模擬輸入
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PC4
}


void ADC_Config(void)
{
        

  ADC_InitTypeDef ADC_InitStructure;//ADC結(jié)構(gòu)體變量//注意在一個(gè)語(yǔ)句快內(nèi)變量的聲明要放在可執(zhí)行語(yǔ)句的前面,否則出錯(cuò),因此要放在ADC1_GPIO_Config();前面
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在獨(dú)立模式
  ADC_InitStructure.ADC_ScanConvMode =        DISABLE; //使能掃描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC轉(zhuǎn)換工作在連續(xù)模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由軟件控制轉(zhuǎn)換,不使用外部觸發(fā)
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//轉(zhuǎn)換數(shù)據(jù)右對(duì)齊
  ADC_InitStructure.ADC_NbrOfChannel = 1;//轉(zhuǎn)換通道為1
  ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
        
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  //ADC1選擇信道14,音序等級(jí)1,采樣時(shí)間55.5個(gè)周期
//  ADC_DMACmd(ADC1, ENABLE);//使能ADC1模塊DMA
  ADC_Cmd(ADC1, ENABLE);//使能ADC1
        ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//  ADC_ResetCalibration(ADC1); //重置.(復(fù)位).ADC1校準(zhǔn)寄存器
//  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)重置完成
//  ADC_StartCalibration(ADC1);//開(kāi)始ADC1校準(zhǔn)
//  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校準(zhǔn)完成
//  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1軟件開(kāi)始轉(zhuǎn)換
}


  1. //adc.h
  2. #ifndef  __ADC_H
  3. #define  __ADC_H
  4. #include "sys.h"

  5. void Adc_Init(void);
  6. void ADC1_GPIO_Config(void);
  7. void ADC_Config(void);


  8. #endif
復(fù)制代碼
  1. #include "bsp-lcd1602.h"

  2. void LCD1602_GPIO_Config(void)
  3. {
  4.         RCC_APB2PeriphClockCmd(LCD1602_CLK, ENABLE);
  5.         GPIO_InitTypeDef LCD1602_GPIOStruct;
  6.         LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  7.         LCD1602_GPIOStruct.GPIO_Speed = GPIO_Speed_10MHz;
  8.         LCD1602_GPIOStruct.GPIO_Pin =  LCD1602_E | LCD1602_RS | LCD1602_RW ;
  9.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  10.         LCD1602_GPIOStruct.GPIO_Mode = GPIO_Mode_Out_OD;
  11.         LCD1602_GPIOStruct.GPIO_Pin =   DB0 |  DB1 | DB2 |DB3 |  DB4 | DB5|
  12.                                                                                                                                         DB6 |  DB7 ;     //設(shè)置為開(kāi)漏輸出
  13.         GPIO_Init(LCD1602_GPIO_PORT,&LCD1602_GPIOStruct);
  14. }

  15. void LCD1602_WaitReady(void) //檢測(cè)忙狀態(tài)
  16. {
  17.         uint8_t sta;

  18.         GPIOB->ODR =0x00FF;
  19.         RSO(0);
  20.         RWO(1);
  21.         EO(1);
  22.         SysTick_Delay_Us(1);
  23.         do{
  24.                 sta=GPIO_ReadInputDataBit(LCD1602_GPIO_PORT,GPIO_Pin_7);
  25.                 EO(0);
  26.         }while(sta);
  27. }

  28. void LCD1602_WriteCmd(uint8_t cmd) //寫(xiě)指令
  29. {
  30.         LCD1602_WaitReady();
  31.         RSO(0);
  32.         RWO(0);
  33.         EO(0);
  34.         SysTick_Delay_Us(1);
  35.         EO(1);
  36.         LCD1602_GPIO_PORT->ODR &= (cmd|0xFF00);
  37.         EO(0);
  38.         SysTick_Delay_Us(400);
  39. }

  40. void LCD1602_WriteDat(uint8_t dat) //寫(xiě)數(shù)據(jù)
  41. {
  42.         LCD1602_WaitReady();
  43.         RSO(1);
  44.         RWO(0);
  45.         SysTick_Delay_Us(30);
  46.         EO(1);
  47.         LCD1602_GPIO_PORT->ODR &=(dat|0xFF00);
  48.         EO(0);
  49.         SysTick_Delay_Us(400);
  50. }

  51. void LCD1602_SetCursor(uint8_t x, uint8_t y)
  52. {
  53.     uint8_t addr;
  54.    
  55.     if (y == 0)  //由輸入的屏幕坐標(biāo)計(jì)算顯示RAM的地址
  56.         addr = 0x00 + x;  //第一行字符地址從0x00起始
  57.     else
  58.         addr = 0x40 + x;  //第二行字符地址從0x40起始
  59.     LCD1602_WriteCmd(addr|0x80);  //設(shè)置RAM地址
  60. }

  61. void LCD1602_ShowStr(uint8_t x, uint8_t y, uint8_t *str, uint8_t len)
  62. {
  63.     LCD1602_SetCursor(x, y);        //設(shè)置起始地址
  64.     while (len--)         //連續(xù)寫(xiě)入len個(gè)字符數(shù)據(jù)
  65.     {
  66.         LCD1602_WriteDat(*str++);
  67.     }
  68. }

  69. //??1???
  70. //x,y :????         
  71. //num:??(0~99)         
  72. //-----------------------------*/         
  73. void LCD_ShowNum(uint8_t x, uint8_t y,uint8_t num)
  74. {     

  75.             LCD1602_SetCursor(x, y);        //設(shè)置起始地址
  76.     LCD_ShowChar(x,y,num+'0');
  77.         
  78. }

  79. void LCD_ShowChar(uint8_t x, uint8_t y,uint8_t dat)
  80. {

  81.             LCD1602_SetCursor(x, y);        //設(shè)置起始地址
  82.         LCD1602_WriteDat(dat);
  83. }



  84. void LCD1602_Init(void)
  85. {
  86.           LCD1602_GPIO_Config();   //開(kāi)啟GPIO口
  87.     LCD1602_WriteCmd(0X38);  //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
  88.     LCD1602_WriteCmd(0x0C);  //顯示器開(kāi),光標(biāo)關(guān)閉
  89.     LCD1602_WriteCmd(0x06);  //文字不動(dòng),地址自動(dòng)+1
  90.     LCD1602_WriteCmd(0x01);  //清屏
  91. }
  92.         
  93.         



復(fù)制代碼
  1. int main()
  2. #include "stm32f10x.h"
  3. #include "bsp-lcd1602.h"
  4. #include "delay.h"
  5. #include "sys.h"
  6. #include "adc.h"

  7. int main(void)
  8. {
  9. int a,b,c,d;
  10.         float temp;
  11.         
  12.         delay_init();                     //延時(shí)函數(shù)初始化                  
  13.         LCD1602_Init();
  14.   ADC1_GPIO_Config();
  15.   ADC_Config();  
  16.         LCD1602_ShowStr(1,0,"adcvalue=0.0V",13);
  17.         LCD1602_ShowStr(1,1,"LIUTONGBO 32",13);
  18.         
  19.         while(1)
  20.         {
  21.                 b=ADC_GetConversionValue(ADC1);
  22.         temp=(float)b*(3.4/4096);
  23.         a=temp/0.675;
  24.         c=temp*10;
  25.         d=c%10;
  26.         LCD_ShowNum(10,0,a);
  27.         LCD_ShowNum(12,0,d);
  28.         }
  29. }



復(fù)制代碼


評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜亚洲 | a在线视频 | 久久久女女女女999久久 | 久久久精品一区 | 色综合天天天天做夜夜夜夜做 | 麻豆视频在线免费看 | 欧美激情综合 | 国产伦精品一区二区三区视频金莲 | 精品视频一区二区 | 99久久精品视频免费 | 午夜丰满少妇一级毛片 | 成人国产精品久久 | h视频在线播放 | 夜夜草| 97偷拍视频 | 日本理论片好看理论片 | 欧美美女一区二区 | 国产免费观看久久黄av片涩av | 2018国产大陆天天弄 | 国产成人精品免费视频大全最热 | 亚洲免费网 | 成人免费淫片aa视频免费 | 狠狠婷婷综合久久久久久妖精 | 国产日韩欧美一区 | 久久久久久亚洲精品 | 日韩欧美亚洲 | 黄色av网站在线观看 | 久久久网 | 精品亚洲国产成av人片传媒 | 国产欧美在线观看 | 日韩a视频 | 国产精品一区2区 | 欧美一级www片免费观看 | 亚洲国产精品99久久久久久久久 | 欧美日韩国产在线观看 | 国产免费高清 | 成人网在线观看 | 国产免费人成xvideos视频 | 国产成人一区在线 | 亚洲视频在线一区 | 日韩精品免费播放 |