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

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

QQ登錄

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

搜索
查看: 2983|回復(fù): 0
收起左側(cè)

STM32F103ZET6 ADC和DAC的DMA傳輸 LCD12864顯示

[復(fù)制鏈接]
ID:293438 發(fā)表于 2019-7-20 08:28 | 顯示全部樓層 |閱讀模式
老鐵們可以下載文件,這里不是很清楚
  1. #include "lcd12864.h"



  2. void LCD_12864_Init(void)
  3. {             
  4. GPIO_InitTypeDef  GPIO_InitStructure;
  5.        
  6. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);         //使能PB,PE端口時(shí)鐘
  7.        
  8. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;                                 //LED0-->PB.5 端口配置
  9. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  11. GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //根據(jù)設(shè)定參數(shù)初始化GPIOB.5
  12.        
  13.        
  14. GPIO_SetBits(GPIOA,GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);                                                 //PB.5 輸出高

  15.         LCD_PSB_Clr();
  16.         lcd_write_cmd(0x30);      //基本指令模式
  17.         lcd_delay(1);
  18.         lcd_write_cmd(0x0c);      //開(kāi)顯示,關(guān)游標(biāo),關(guān)反白
  19.         lcd_delay(1);
  20.         lcd_write_cmd(0x01);          //清屏
  21.         lcd_delay(1);
  22. }



  23. /************lcd12864延時(shí)函數(shù)*********/
  24. void lcd_delay (unsigned int xms)
  25. {
  26.      unsigned int i,j;
  27.      for(i=xms;i>0;i--)
  28.      for(j=110;j>0;j--);
  29.    
  30. }
  31. /**********************************************************/
  32.      /*****---------發(fā)送一個(gè)字節(jié)*----------*******/
  33. /**********************************************************/
  34. void lcd_sent_beyt(unsigned char date)
  35. {
  36.           unsigned char i=0;
  37.           for(i=0;i<8;i++)
  38.           {
  39.                   if((date<<i)&0x80) LCD_SID_Set();   //   SID=1
  40.        else          LCD_SID_Clr();     //SID=0
  41.                   LCD_SCLK_Clr();//SCLK=0
  42.                   LCD_SCLK_Set();//SCLK=1
  43.                 }
  44.                 lcd_delay(1);       
  45. }




  46. /**************************************************/
  47.        /*****-----寫(xiě)數(shù)據(jù)------*******/
  48. /**************************************************/
  49. void lcd_write_data(unsigned char date)
  50. {       
  51.          LCD_CS_Set();//CS=1;
  52.          lcd_sent_beyt(0xfa);
  53.          lcd_sent_beyt((date&0xf0));//高4位取出,低四位補(bǔ)0
  54.          lcd_sent_beyt((date<<4)&0xf0);//將所發(fā)送字節(jié)的低四位移到高四位,低四位自動(dòng)補(bǔ)0,然后將高四位取出
  55.          lcd_delay(1);//延時(shí)1ms  接收處理數(shù)據(jù)
  56.        
  57.          LCD_CS_Clr();//CS=0
  58. }

  59. /**************************************************/
  60.       /****--------寫(xiě)命令---------****/
  61. /**************************************************/
  62. void lcd_write_cmd(unsigned char date)
  63. {
  64.          LCD_CS_Set();
  65.          lcd_sent_beyt(0xf8);
  66.          lcd_sent_beyt(date&0xf0);
  67.          lcd_sent_beyt((date<<4)&0xf0);
  68.          lcd_delay(1);
  69.          LCD_CS_Clr();
  70. }


  71. /**************************************************/
  72. /*******-----------坐標(biāo)函數(shù)-------------**********/
  73. /**************************************************/
  74. void LCD_XY(unsigned char X,unsigned char Y)
  75. {
  76.         unsigned char pos;
  77.         if(X==0)
  78.         {X=0x80;}
  79.         else if(X==1)
  80.         {X=0x90;}
  81.         else if(X==2)                                     
  82.         {X=0x88;}
  83.         else if(X==3)
  84.         {X=0x98;}
  85.         pos=X+Y;
  86.   lcd_write_cmd(pos);
  87. }


  88. void lcd_clr()
  89. {      
  90.         lcd_write_cmd(0x01);          //清除LCD的顯示內(nèi)容     
  91.         lcd_delay(1);
  92. }

  93. /*************************************************/
  94.       /*-------lcd12864初始化--------*/
  95. /************************************************/
  96. void init_12864(void)
  97. {
  98.         LCD_PSB_Clr();
  99.         lcd_write_cmd(0x30);      //基本指令模式
  100.         lcd_delay(1);
  101.         lcd_write_cmd(0x0c);      //開(kāi)顯示,關(guān)游標(biāo),關(guān)反白
  102.         lcd_delay(1);
  103.         lcd_write_cmd(0x01);          //清屏
  104.         lcd_delay(1);
  105. }

  106. /************************************************/
  107.       /*---中英文字符串顯示函數(shù)----*/
  108. /************************************************/
  109. void writestring(unsigned char X,unsigned char Y,unsigned char *p)               
  110.      {          
  111.       
  112.               LCD_XY(X,Y);
  113.        while(*p!='\0')
  114.        {
  115.                
  116.         lcd_write_data(*p);
  117.         p++;
  118.                     if(*p==';')
  119.                     break;
  120.        }
  121. }
  122. /************************************************/
  123.      /*------字符串顯示函數(shù)------*/
  124. /***********************************************/
  125. void testring(unsigned char *p)
  126.      {          
  127.        while(*p!='\0')
  128.        {
  129.                
  130.         lcd_write_data(*p);
  131.         p++;
  132.        }
  133. }

  134. /*********************************************/
  135.        /*-------顯示函數(shù)---------*/
  136. /***********************************************/
  137. void  xianshi(char X,char Y, unsigned int shu)
  138. {
  139.       unsigned int i,j,k,l,n;
  140.       i=shu/10000;
  141.       j=(shu-10000*i)/1000;
  142.       k=(shu-10000*i-1000*j)/100;
  143.       l=(shu-10000*i-1000*j-100*k)/10;
  144.       n=shu%10;
  145.       LCD_XY(X,Y);
  146.       if(i!=0)lcd_write_data(i+0x30);
  147.       if((i!=0)||(j!=0))lcd_write_data(j+0x30);
  148.       if((i!=0)||(j!=0)||(k!=0))lcd_write_data(k+0x30);
  149.       if((i!=0)||(j!=0)||(k!=0)||(l!=0))lcd_write_data(l+0x30);
  150.       lcd_write_data(n+0x30);
  151.       testring("  ");
  152.              
  153. }


  154. void xiaoshu(char x,char y,float num)
  155. {
  156.                 char aa[10];
  157.                  sprintf(aa,"%1.2f",num);
  158.                 writestring(x,y,aa);
  159. }


  160. //void xianshi_jiao(char X, char Y, int shu)
  161. //{
  162. //      unsigned int i,j,k,l,n;
  163. //      if(shu>=0)
  164. //      {
  165. //      i=shu/10000;
  166. //      j=(shu-10000*i)/1000;
  167. //      k=(shu-10000*i-1000*j)/100;
  168. //      l=(shu-10000*i-1000*j-100*k)/10;
  169. //      n=shu%10;
  170. //      LCD_XY(X,Y);
  171. //      if(i!=0)lcd_write_data(i+0x30);
  172. //      if((i!=0)||(j!=0))lcd_write_data(j+0x30);
  173. //      if((i!=0)||(j!=0)||(k!=0))lcd_write_data(k+0x30);
  174. //      if((i!=0)||(j!=0)||(k!=0)||(l!=0))lcd_write_data(l+0x30);
  175. //      lcd_write_data(n+0x30);
  176. //      testring(" ");
  177. //      }
  178. //      
  179. //      else
  180. //      {
  181. //      shu=-shu;  
  182. //      i=shu/10000;
  183. //      j=(shu-10000*i)/1000;
  184. //      k=(shu-10000*i-1000*j)/100;
  185. //      l=(shu-10000*i-1000*j-100*k)/10;
  186. //      n=shu%10;
  187. //      LCD_XY(X,Y);
  188. //      testring("-");
  189. //      if(i!=0)lcd_write_data(i+0x30);
  190. //      if((i!=0)||(j!=0))lcd_write_data(j+0x30);
  191. //      if((i!=0)||(j!=0)||(k!=0))lcd_write_data(k+0x30);
  192. //      if((i!=0)||(j!=0)||(k!=0)||(l!=0))lcd_write_data(l+0x30);
  193. //      lcd_write_data(n+0x30);
  194. //      testring(" ");
  195. //      }
  196. //}
復(fù)制代碼
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "lcd12864.h"
  5. #include "delay.h"
  6. #include "led.h"
  7. #include "dac.h"
  8. #include "adc.h"
  9. #include "timer.h"
  10. #include "dma.h"

  11. //#include "stdio.h"

  12. extern __IO uint16_t ADC_ConvertedValue[102];
  13. __IO   uint16_t ADC_Value[3];
  14. float  ADC_ConvertedValueLocal[102];
  15. float  get_mV[3];  

  16. u16 DAC_Value[32]={2500,2500,2500,2500,2500,2500,2500,2500,1500,2500,
  17.                    2600,2600,2600,2600,2600,2600,2600,2600,1600,2600,
  18.                    2400,2400,2400,2400,2400,2400,2400,2400,2400,2440,
  19.                    2500,2500};

  20. void angler_mV()
  21. {
  22.    int j;
  23.    static double sum=0;
  24.        
  25.    for(j=0;j<100;j++)
  26.          {
  27.            sum+=ADC_ConvertedValue[j];       
  28.          }
  29.    ADC_Value[0]=sum/100;
  30.          sum=0;
  31.    ADC_ConvertedValueLocal[0] = (float)ADC_Value[0]*(3.3/4096);//通道1數(shù)據(jù)采集
  32.          
  33.          xiaoshu(0,0,ADC_ConvertedValueLocal[0]);             //顯示采集的電壓          
  34. }       

  35. int main(void)
  36. {       
  37.    u16 c;
  38.    float d;         
  39.   
  40.          NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中斷分組2  delay_init();
  41.          
  42.          
  43.          LCD_12864_Init();         //液晶初始化
  44.          LED_Init();         //LED燈初始化
  45.          TIM3_Int_Init(9,71);
  46.    GPIO_DAC1_Init();  //DAC初始化
  47.          ADC_INIT();        //ADC初始化
  48.          DAC_DMA_Config(DMA1_Channel3,(u32)&DAC->DHR12R1,(u32)DAC_Value,32);//DMA1通道3,
  49.          TIM3->DIER|=1<<8;
  50.          MYDMA_Enable(DMA1_Channel3);
  51.          
  52.          while(1)
  53.          {
  54. //                  Dac1_Set_Vol(2500);      //設(shè)置2.5V
  55. //
  56. //                DAC_SetChannel1Data(DAC_Align_12b_R, 2000);//設(shè)置DAC值         
  57.                  
  58.                 c=DAC_GetDataOutputValue(DAC_Channel_1);//讀取前面設(shè)置DAC的值
  59.                 xianshi(1,4,c);
  60.                 d=(float)c*(3.3/4096);       //得到DAC電壓值
  61.                 xiaoshu(1,0, d);             //顯示采集的電壓

  62.                 angler_mV();
  63.                  
  64. //          LED0=0;
  65. //    delay_ms(200);
  66. //    LED0=1;
  67. //    delay_ms(200);
  68.          }         
  69. }
復(fù)制代碼

全部資料51hei下載地址:
STM32 12864.7z (222.77 KB, 下載次數(shù): 104)

評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 9191成人精品久久 | 91精品国产欧美一区二区 | 成人高清在线 | 91精品国产综合久久久久蜜臀 | 国产一区二区黑人欧美xxxx | 精品伊人久久 | 亚洲精品中文在线观看 | 久久精品小视频 | 欧美精品一二区 | 欧美一区二区三区国产精品 | 中国黄色在线视频 | 999久久久久久久久6666 | 国产欧美精品一区二区三区 | 国产精品99久久久久久大便 | 国产精品乱码一区二区三区 | 日韩国产免费观看 | 91偷拍精品一区二区三区 | 亚洲 欧美 日韩 精品 | 91精品国产综合久久婷婷香蕉 | 国产91久久精品一区二区 | 国产精品成人一区二区三区 | 国产精品高潮呻吟 | 精品美女视频在线观看免费软件 | 一级毛片黄片 | 亚洲永久精品国产 | 国产高清一区二区三区 | 国产视频精品在线观看 | 羞羞视频在线观看免费观看 | 99亚洲| 亚洲二区在线 | 中文字幕成人av | 日本成人三级电影 | 国产精品免费在线 | 国产一区久久久 | 韩国毛片一区二区三区 | 国产h视频 | 精品国产一区二区国模嫣然 | 欧美日韩精品久久久免费观看 | 成年无码av片在线 | 国产精品永久免费 | 美女久久久久久久久 |