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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于stm32的微型掌上示波器

  [復制鏈接]
跳轉到指定樓層
樓主

所有資料打包下載:
示波器制作資料(程序).7z (6.96 MB, 下載次數: 535)


其實本人進入芯片的世界的時間并不長,從接觸51單片機到現在還不到一年,所以可以算是小白啦~想了很久,總算拿出在論壇大牛前獻丑的無比勇氣,寫起該帖。因為制作時間很短,元器件不是很夠用,所以只能做出這個只有初級功能的示波器了,只是菜鳥級程序,不建議大家做學習之用。
       我是從大二下學期開始學的51單片機,之后就對燒芯片興趣甚濃,用51做了很多小玩意出來:例如探頭式溫度器、基于霍爾元件的測速器,超聲波測距器,震動報警器等等。
       而進入大三,我就開始學習ARM了。當時我是看劉凱老師的視頻學習STM32開始進軍ARM的。我一直覺得看視頻學東西容易接受,所以51單片機我也是看郭天祥的視頻學習的。可能因為學了一個學期的51單片機了,有點點基礎,所以學習起STM32的時候感覺輕車熟路(當然,也曾經被STM32的各種庫函數搞得很痛苦)。自學STM32半個學期之后,做了兩個作品,一個是新型海流發電機的葉片控制裝置,一個是新型風力發電機的葉片控制裝置(這兩個設計都是為了參加大學生節能減排大賽做的,可以由于非實力因素被刷于校賽,這個不能多說。。)……
       好了,廢話不多說,基于stm32 的微型掌上示波器——這個小作品是我大三嵌入式技術課的課程設計作品。

黑色一個獨立按鍵是增加網格時間間隔的(后來又加了個獨立按鍵減少網格時間間隔);
藍色按鈕是用來暫停波形的,方便觀察;
再右邊那兩個插針是信號輸入的GND和SIGNAL端;


三角波

       如上圖,這個作品使用4.0寸液晶顯示屏來做顯示的(上圖左邊),而芯片是用STM32F103C8T6這一款便價STM32來做的(上圖右邊)。芯片是做好了的最好系統板,在某寶上網購回來的,好像二十多的樣子(不算運費)。




正弦波


梯形波


鋸齒波


51單片機開發板做成信號源

      如上圖,因為院里面的實驗室太遠,我就自己用51單片機開發板自己做了個簡易函數發生器。通過獨立按鍵控制發出正弦波、矩形波、三角波、鋸齒波、梯形波。
      其實單片機開發板已經是我的核心家當了!因為我學習ARM的時候并沒有買ARM的開發板,而是用51開發板把程序燒錄進去ARM芯片里面去……(其實零花錢都用去旅游去了。。。)



洞洞板背面(黑色的是電池盒,帶電源開關)

然后板子使用洞洞板來做的,洞洞板就避免不了飛線,所以我用一塊海綿封住背面的飛線,聲稱是為了防止灰塵干擾電路(其實是為了遮蓋慘不忍睹的飛線工藝啦{:12:}{:12:})。

     唉,不過想一下我現在已經大三了,馬上升大四了,這個階段做出這個作品的水平不知道是不是已經out of date了。。當然,相比于論壇里面的各位大牛小牛們,這個作品真是小巫見大巫。。~~

      這是我第一次發帖啦~這個作品我借鑒過很多很多的例程,最后自己綜合、學習、效仿、然后總結起來寫的。里面的某些風格可能有些像劉凱老師的,可能有些像金點原子的,甚至有些像郭天祥的-_-b。。。僅僅做學習之用,毫無商用價值之類之用。關于版權或者知識產權之類的東西我也不太懂啦,因為是小白,所以有什么冒犯或者不合適之類的敬請原諒啦。而且程序里面有很多是廢程序,只是菜鳥級程序,不建議大家做學習之用(不至于用作反面教材就好啦~haha ~)
      敬請大家指正,有什么冒犯多多包涵~~哈哈~資料接下來傳上來,請看附件。

源程序:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm32f10x_lib.h"

  3. /* Private typedef -----------------------------------------------------------*/
  4. /* Private define ------------------------------------------------------------*/
  5. #define DAC1_DHR8R1_Address      0x40007408

  6. /* Init Structure definition */
  7. DAC_InitTypeDef            DAC_InitStructure;
  8. DMA_InitTypeDef            DMA_InitStructure;
  9. TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure;

  10. /* Private macro -------------------------------------------------------------*/
  11. /* Private variables ---------------------------------------------------------*/
  12. ErrorStatus HSEStartUpStatus;
  13. uc16 Sine12bit[32] = {2047, 2447, 2831, 3185, 3498, 3750, 3939, 4056, 4095, 4056,
  14.                       3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909,  
  15.                       599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647};

  16. u32 DualSine12bit[32];
  17. u8 Idx = 0;

  18. /* Private function prototypes -----------------------------------------------*/
  19. void RCC_Configuration(void);
  20. void GPIO_Configuration(void);
  21. void NVIC_Configuration(void);
  22. void Delay(vu32 nCount);

  23. /* Private functions ---------------------------------------------------------*/

  24. /*******************************************************************************
  25. * Function Name  : main
  26. * Description    : Main program.
  27. * Input          : None
  28. * Output         : None
  29. * Return         : None
  30. *******************************************************************************/
  31. int main(void)
  32. {
  33. #ifdef DEBUG
  34.   debug();
  35. #endif

  36.   /* System Clocks Configuration */
  37.   RCC_Configuration();   

  38.   /* GPIO configuration */
  39.   GPIO_Configuration();

  40.   /* NVIC Configuration */
  41.   NVIC_Configuration();

  42.   /* TIM8 Configuration */
  43.   /* Time base configuration */
  44.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);  
  45.   TIM_TimeBaseStructure.TIM_Period = 0x19;           
  46.   TIM_TimeBaseStructure.TIM_Prescaler = 0x00;        
  47.   TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     
  48.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   
  49.   TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);

  50.   /* TIM8 TRGO selection */
  51.   TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

  52.   /* DAC channel1 Configuration */
  53.   DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;
  54.   DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
  55.   DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  56.   DAC_Init(DAC_Channel_1, &DAC_InitStructure);

  57.   /* DAC channel2 Configuration  
  58.   DAC_Init(DAC_Channel_2, &DAC_InitStructure); */

  59.   /* Fill Sine32bit table */
  60.   for (Idx= 0; Idx<32; Idx++)
  61.   {
  62.     DualSine12bit[Idx] = (Sine12bit[Idx] << 16) + (Sine12bit[Idx]);     
  63.   }

  64.   /* DMA2 channel4 configuration */
  65.   DMA_DeInit(DMA1_Channel3); //將dma的通道寄存器設為默認值
  66.   DMA_InitStructure.DMA_PeripheralBaseAddr = DAC1_DHR8R1_Address;  //定義dma外設基地址
  67.   DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&DualSine12bit;
  68.   DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //外設作為數據傳輸的目的地
  69.   DMA_InitStructure.DMA_BufferSize = 32;   //dma緩存大小   
  70.   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //外設地址寄存器不變
  71.   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;    //內存地址寄存器 遞增
  72.   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //外設數據寬度
  73.   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
  74.   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //工作在循環緩存模式,數據傳輸數目為0時,自動恢復配置初值
  75.   DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  76.   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //通道未被設置成內存到內存模式,與循環模式相對
  77.   DMA_Init(DMA1_Channel3, &DMA_InitStructure); //將DMA_InitStructure中指定的參數初始化dma的通道寄存器

  78.   /* Enable DMA2 Channel4 */
  79.   DMA_Cmd(DMA1_Channel3, ENABLE);  //使能通道

  80.   /* Enable DAC Channel1 */
  81.   DAC_Cmd(DAC_Channel_1, ENABLE);
  82.   /* Enable DAC Channel2 */
  83.   DAC_Cmd(DAC_Channel_1, ENABLE);

  84.   /* Enable DMA for DAC Channel2 */
  85.   DAC_DMACmd(DAC_Channel_1, ENABLE);

  86.   /* TIM8 enable counter */
  87.   TIM_Cmd(TIM6, ENABLE);

  88.   while (1)
  89.   {
  90.   GPIO_ResetBits(GPIOA , GPIO_Pin_10);  
  91.   }
  92. }

  93. /*******************************************************************************
  94. * Function Name  : RCC_Configuration
  95. * Description    : Configures the different system clocks.
  96. * Input          : None
  97. * Output         : None
  98. * Return         : None
  99. *******************************************************************************/
  100. void RCC_Configuration(void)
  101. {   
  102.   /* RCC system reset(for debug purpose) */
  103.   RCC_DeInit();

  104.   /* Enable HSE */
  105.   RCC_HSEConfig(RCC_HSE_ON);

  106.   /* Wait till HSE is ready */
  107.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

  108.   if(HSEStartUpStatus == SUCCESS)
  109.   {
  110.     /* Enable Prefetch Buffer */
  111.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  112.     /* Flash 2 wait state */
  113.     FLASH_SetLatency(FLASH_Latency_2);
  114.   
  115.     /* HCLK = SYSCLK */
  116.     RCC_HCLKConfig(RCC_SYSCLK_Div1);  
  117.    
  118.     /* PCLK2 = HCLK */
  119.     RCC_PCLK2Config(RCC_HCLK_Div1);  

  120.     /* PCLK1 = HCLK/2 */
  121.     RCC_PCLK1Config(RCC_HCLK_Div2);

  122.     /* PLLCLK = 8MHz * 9 = 72 MHz */
  123.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_3);

  124.     /* Enable PLL */  
  125.     RCC_PLLCmd(ENABLE);

  126.     /* Wait till PLL is ready */
  127.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  128.     {
  129.     }

  130.     /* Select PLL as system clock source */
  131.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  132.     /* Wait till PLL is used as system clock source */
  133.     while(RCC_GetSYSCLKSource() != 0x08)
  134.     {
  135.     }
  136.   }

  137. /* Enable peripheral clocks --------------------------------------------------*/
  138.   /* DMA clock enable */
  139.   RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
  140.   /* AFIO and GPIOA Periph clock enable */
  141.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA, ENABLE);
  142.   /* DAC Periph clock enable */
  143.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  144.   /* TIM8 Periph clock enable */
  145.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
  146. }

  147. /*******************************************************************************
  148. * Function Name  : GPIO_Configuration
  149. * Description    : Configures the different GPIO ports.
  150. * Input          : None
  151. * Output         : None
  152. * Return         : None
  153. *******************************************************************************/
  154. void GPIO_Configuration(void)
  155. {
  156.   GPIO_InitTypeDef GPIO_InitStructure;

  157.   /* Configure DAC channe1 and DAC channel2 outputs pins */
  158.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 | GPIO_Pin_5|GPIO_Pin_10;
  159.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  160.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  161.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  162. }

  163. /*******************************************************************************
  164. * Function Name  : NVIC_Configuration
  165. * Description    : Configures Vector Table base location.
  166. * Input          : None
  167. * Output         : None
  168. * Return         : None
  169. *******************************************************************************/
  170. void NVIC_Configuration(void)
  171. {
  172. #ifdef  VECT_TAB_RAM   
  173.   /* Set the Vector Table base location at 0x20000000 */  
  174.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);  
  175. #else  /* VECT_TAB_FLASH  */
  176.   /* Set the Vector Table base location at 0x08000000 */  
  177.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
  178. #endif
  179. }

  180. /*******************************************************************************
  181. * Function Name  : Delay
  182. * Description    : Inserts a delay time.
  183. * Input          : nCount: specifies the delay time length.
  184. * Output         : None
  185. * Return         : None
  186. *******************************************************************************/
  187. void Delay(vu32 nCount)
  188. {
  189.   for(; nCount != 0; nCount--);
  190. }

  191. #ifdef  DEBUG
  192. /*******************************************************************************
  193. * Function Name  : assert_failed
  194. * Description    : Reports the name of the source file and the source line number
  195. *                  where the assert_param error has occurred.
  196. * Input          : - file: pointer to the source file name
  197. *                  - line: assert_param error line source number
  198. * Output         : None
  199. * Return         : None
  200. *******************************************************************************/
  201. void assert_failed(u8* file, u32 line)
  202. {  
  203.   /* User can add his own implementation to report the file name and line number,
  204.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  205.   /* Infinite loop */
  206.   while (1)
  207.   {
  208.   }
  209. }
  210. #endif
復制代碼
  1. #include"tft3.5.h"
  2. #include "stm32f10x_gpio.h"
  3. //#include"陳錦熙.h"
  4. //#include "美女.h"
  5. //#include "8x16.h"
  6. //#include "GB3231.h"

  7. /*------------------------------------------------
  8.                              清屏函數
  9. ------------------------------------------------*/
  10. void ClearScreen(unsigned int bColor)
  11. {
  12. unsigned int i,j;
  13. LCD_SetPos(0,320,0,480);//
  14. for (i=0;i<480;i++)
  15.         {
  16.         
  17.            for (j=0;j<320;j++)
  18.                Write_Data_U16(bColor);

  19.         }
  20. }

  21. /*-----------------------------------------------------------------------
  22.                          寫8x16點陣格式的字符
  23. -----------------------------------------------------------------------*/
  24. #include "8x16.h"
  25. void LCD_PutChar8x16(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor)
  26. {
  27. unsigned int i,j;
  28. LCD_SetPos(x,x+8-1,y,y+16-1);
  29. for(i=0; i<16;i++) {
  30.                 unsigned char m=Font8x16[c*16+i];
  31.                 for(j=0;j<8;j++) {
  32.                         if((m&0x80)==0x80) {
  33.                                 Write_Data_U16(fColor);
  34.                                 }
  35.                         else {
  36.                                 Write_Data_U16(bColor);
  37.                                 }
  38.                         m<<=1;
  39.                         }
  40.                 }
  41. }

  42. /*-----------------------------------------------------------------------
  43.                              寫字符
  44. -----------------------------------------------------------------------*/
  45. void LCD_PutChar(unsigned short x, unsigned short y, char c, unsigned int fColor, unsigned int bColor) {

  46.                 LCD_PutChar8x16( x, y, c, fColor, bColor );
  47.         }


  48. #include "GB1616.h"        //16*16漢字字模

  49. void PutGB1616(unsigned short x, unsigned short  y, unsigned char c[2], unsigned int fColor,unsigned int bColor){
  50.         unsigned int i,j,k;

  51.         LCD_SetPos(x,  x+16-1,y, y+16-1);

  52.         for (k=0;k<64;k++) { //64標示自建漢字庫中的個數,循環查詢內碼
  53.           if ((codeGB_16[k].Index[0]==c[0])&&(codeGB_16[k].Index[1]==c[1])){
  54.             for(i=0;i<32;i++) {
  55.                   unsigned short m=codeGB_16[k].Msk[i];
  56.                   for(j=0;j<8;j++) {
  57.                         if((m&0x80)==0x80) {
  58.                                 Write_Data_U16(fColor);
  59.                                 }
  60.                         else {
  61.                                 Write_Data_U16(bColor);
  62.                                 }
  63.                         m<<=1;
  64.                         }
  65.                   }
  66.                 }  
  67.           }        
  68.         }
  69. /*-----------------------------------------------------------------------
  70.                            寫字符串
  71. -----------------------------------------------------------------------*/
  72. void LCD_PutString(unsigned short x, unsigned short y, unsigned char *s, unsigned int fColor, unsigned int bColor) {
  73.          unsigned char l=0;
  74.         while(*s) {
  75.                 if( *s < 0x80)
  76.                     {
  77.                         LCD_PutChar(x+l*8,y,*s,fColor,bColor);
  78.                         s++;l++;
  79.                         }
  80.                 else
  81.                     {
  82.                         PutGB1616(x+l*8,y,(unsigned char*)s,fColor,bColor);
  83.                         s+=2;l+=2;
  84.                         }
  85.                 }
  86.         }


  87. /*-----------------------------------------------------------------------
  88.                          顯示RGB顏色
  89. -----------------------------------------------------------------------*/
  90. void Show_RGB (unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1,unsigned int Color)
  91. {
  92.         unsigned int i,j;
  93.         LCD_SetPos(x0,x1,y0,y1);
  94.         for (i=y0;i<=y1;i++)
  95.         {
  96.            for (j=x0;j<=x1;j++)
  97.                Write_Data_U16(Color);

  98.         }

  99. }
  100. /*-----------------------------------------------------------------------
  101.                               顯示彩條
  102. -----------------------------------------------------------------------*/
  103. void show_colour_bar (void)

  104. {
  105.         int V,H;
  106.         LCD_SetPos(0,320,0,480);

  107.         for(H=0;H<320;H++)
  108.         {
  109.                 for(V=0;V<60;V++)
  110.                 Write_Data_U16(0xf800);
  111.         }

  112.         for(H=0;H<320;H++)
  113.         {
  114.                 for(V=60;V<120;V++)
  115.                 Write_Data_U16(0x07e0);
  116.         }

  117.         for(H=0;H<320;H++)
  118.         {
  119.                 for(V=120;V<180;V++)
  120.                 Write_Data_U16(0x001f);
  121.         }

  122.         for(H=0;H<320;H++)
  123.         {
  124.                 for(V=180;V<240;V++)
  125.                 Write_Data_U16(0xffe0);
  126.         }

  127.         for(H=0;H<320;H++)
  128.         {
  129.                 for(V=240;V<300;V++)
  130.                 Write_Data_U16(0xf81f);
  131.         }

  132.         for(H=0;H<320;H++)
  133.         {
  134.                 for(V=300;V<360;V++)
  135.                 Write_Data_U16(0x07ff);
  136.         }

  137.         for(H=0;H<320;H++)
  138.         {
  139.                 for(V=360;V<420;V++)
  140.                 Write_Data_U16(0xffff);
  141.         }

  142.         for(H=0;H<320;H++)
  143.         {
  144.                 for(V=420;V<480;V++)
  145.                 Write_Data_U16(0x0000);
  146.         }

  147. }



  148. /*-----------------------------------------------------------------------
  149.                             寫指令          8位總線
  150. -----------------------------------------------------------------------*/

  151. void LCD_Write_Command(unsigned char u)
  152. {
  153.         TFT_CS_SET(0);
  154.         TFT_RS_SET(0);

  155.         DATAOUT(u);
  156.         TFT_WR_SET(0);
  157.         TFT_WR_SET(1);


  158.         TFT_CS_SET(1);
  159. }

  160. /*-----------------------------------------------------------------------
  161.                             寫數據          8位總線
  162. -----------------------------------------------------------------------*/

  163. void LCD_Write_Data(unsigned char u)
  164. {

  165.   
  166.         TFT_CS_SET(0);
  167.         TFT_RS_SET(1);

  168.         DATAOUT(u);
  169.         TFT_WR_SET(0);
  170.         TFT_WR_SET(1);


  171.         TFT_CS_SET(1);
  172. }
  173. /*-----------------------------------------------------------------------
  174.                             寫16位數據
  175. -----------------------------------------------------------------------*/
  176. void  Write_Data_U16(unsigned int y)
  177. {
  178.         unsigned char m,n;
  179.         m=y>>8;
  180.         n=y;
  181.         LCD_Write_Data(m);
  182.     LCD_Write_Data(n);

  183. }
  184. /*-----------------------------------------------------------------------
  185.                              延時程序
  186. -----------------------------------------------------------------------*/
  187. void delayms(unsigned int count)
  188. {
  189.     int i,j;                                                                                
  190.     for(i=0;i<count;i++)                                                                    
  191.        {
  192.              for(j=0;j<26;j++);
  193.        }                                                                                    
  194. }


  195. /*-----------------------------------------------------------------------
  196.                           液晶初始化
  197. -----------------------------------------------------------------------*/

  198. void ILI9325_Initial(void)
  199. {
  200. //     //液晶接口初始化   
  201. //         RCC->APB2ENR|=0X0000001C;//先使能外設IO PORTA,B,C時鐘
  202. //        
  203. //        GPIOA->CRL=0X33333333; //PA0-7 推挽輸出
  204. //        //GPIOA->ODR|=0X00FF;//全部輸出高
  205. //        GPIOB->CRH=0X33333333; //PB8-15 推挽輸出
  206.         //GPIOB->ODR|=0X00FF;//全部輸出高
  207.         /*GPIOB->CRL&=0X000FFFFF;//PB5-7 推挽輸出
  208.         GPIOB->CRL|=0X33300000;
  209.         GPIOB->CRH&=0XFFFFFFF0;//PB8   推挽輸出
  210.         GPIOB->CRH|=0X00000003;
  211.         GPIOB->ODR|=0X01E0;//5-8 輸出高

  212.         GPIOC->CRL&=0XFF00FFFF;//PC4,5 推挽輸出
  213.         GPIOC->CRL|=0X00330000;
  214.         GPIOC->ODR|=0X0030;//4,5 輸出高         */
  215.         TFT_RST_SET(0);
  216.         delayms(20);
  217.         TFT_RST_SET(1);
  218.         delayms(200);
  219. // VCI=2.80V
  220. //************* Reset LCD Driver ****************//
  221. // Synchronization after reset
  222. LCD_Write_Command(0xFF);
  223. LCD_Write_Command(0xFF);
  224. delayms(5);
  225. LCD_Write_Command(0xFF);
  226. LCD_Write_Command(0xFF);
  227. LCD_Write_Command(0xFF);
  228. LCD_Write_Command(0xFF);
  229. delayms(10);

  230. LCD_Write_Command(0xB0);
  231. LCD_Write_Data(0x00);

  232. LCD_Write_Command(0x11);
  233. delayms(150);

  234. LCD_Write_Command(0xB3);
  235. LCD_Write_Data(0x02);
  236. LCD_Write_Data(0x00);
  237. LCD_Write_Data(0x00);
  238. LCD_Write_Data(0x00);

  239. LCD_Write_Command(0xC0);
  240. LCD_Write_Data(0x13);
  241. LCD_Write_Data(0x3B);//480
  242. LCD_Write_Data(0x00);
  243. LCD_Write_Data(0x02);
  244. LCD_Write_Data(0x00);
  245. LCD_Write_Data(0x01);
  246. LCD_Write_Data(0x00);//NW
  247. LCD_Write_Data(0x43);

  248. LCD_Write_Command(0xC1);
  249. LCD_Write_Data(0x08);
  250. LCD_Write_Data(0x16);//CLOCK
  251. LCD_Write_Data(0x08);
  252. LCD_Write_Data(0x08);

  253. LCD_Write_Command(0xC4);
  254. LCD_Write_Data(0x11);
  255. LCD_Write_Data(0x07);
  256. LCD_Write_Data(0x03);
  257. LCD_Write_Data(0x03);

  258. LCD_Write_Command(0xC6);
  259. LCD_Write_Data(0x00);

  260. LCD_Write_Command(0xC8);//GAMMA
  261. LCD_Write_Data(0x03);
  262. LCD_Write_Data(0x03);
  263. LCD_Write_Data(0x13);
  264. LCD_Write_Data(0x5C);
  265. LCD_Write_Data(0x03);
  266. LCD_Write_Data(0x07);
  267. LCD_Write_Data(0x14);
  268. LCD_Write_Data(0x08);
  269. LCD_Write_Data(0x00);
  270. LCD_Write_Data(0x21);

  271. LCD_Write_Data(0x08);
  272. LCD_Write_Data(0x14);
  273. LCD_Write_Data(0x07);
  274. LCD_Write_Data(0x53);
  275. LCD_Write_Data(0x0C);
  276. LCD_Write_Data(0x13);
  277. LCD_Write_Data(0x03);
  278. LCD_Write_Data(0x03);
  279. LCD_Write_Data(0x21);
  280. LCD_Write_Data(0x00);

  281. LCD_Write_Command(0x35);
  282. LCD_Write_Data(0x00);

  283. LCD_Write_Command(0x36);
  284. LCD_Write_Data(0x00);

  285. LCD_Write_Command(0x3A);
  286. LCD_Write_Data(0x55);

  287. LCD_Write_Command(0x44);
  288. LCD_Write_Data(0x00);
  289. LCD_Write_Data(0x01);

  290. LCD_Write_Command(0xD0);
  291. LCD_Write_Data(0x07);
  292. LCD_Write_Data(0x07);//VCI1
  293. LCD_Write_Data(0x1D);//VRH
  294. LCD_Write_Data(0x03);//BT

  295. LCD_Write_Command(0xD1);
  296. LCD_Write_Data(0x03);
  297. LCD_Write_Data(0x30);//VCM
  298. LCD_Write_Data(0x10);//VDV

  299. LCD_Write_Command(0xD2);
  300. LCD_Write_Data(0x03);
  301. LCD_Write_Data(0x14);
  302. LCD_Write_Data(0x04);

  303. LCD_Write_Command(0x29);
  304. delayms(30);

  305. LCD_Write_Command(0x2A);
  306. LCD_Write_Data(0x00);
  307. LCD_Write_Data(0x00);
  308. LCD_Write_Data(0x01);
  309. LCD_Write_Data(0x3F);//320

  310. LCD_Write_Command(0x2B);
  311. LCD_Write_Data(0x00);
  312. LCD_Write_Data(0x00);
  313. LCD_Write_Data(0x01);
  314. LCD_Write_Data(0xDF);//480

  315. LCD_Write_Command(0xB4);
  316. LCD_Write_Data(0x00);
  317. delayms(100);

  318. LCD_Write_Command(0x2C);
  319. //        Write_Cmd_Data(0x0022);//
  320.                
  321. }
  322. /*-----------------------------------------------------------------------
  323.                         設置坐標點
  324. -----------------------------------------------------------------------*/
  325. static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
  326. {
  327. LCD_Write_Command(0x2A);
  328. Write_Data_U16(x0);
  329. Write_Data_U16(x1);
  330. //LCD_Write_Data(x0>>8);
  331. //LCD_Write_Data(x0);
  332. //LCD_Write_Data(x1>>8);
  333. //LCD_Write_Data(x1);

  334. LCD_Write_Command(0x2B);
  335. Write_Data_U16(y0);
  336. Write_Data_U16(y1);
  337. //LCD_Write_Data(y0>>8);
  338. //LCD_Write_Data(y0);
  339. //LCD_Write_Data(y1>>8);
  340. //LCD_Write_Data(y1);

  341. LCD_Write_Command(0x2C);
  342. }



  343. //void show_photo(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
  344. //{
  345. //    unsigned int x,y; //定義液晶屏坐標
  346. //   
  347. //        LCD_SetPos(x0,x1-1,y0,y1-1);                  //必須x1-1 y1-1
  348. //    for(y=y0;y<y1;y++)                    //是否寫完圖片數據?  
  349. //        for(x=x0;x<x1;x++)
  350. //         {
  351. //               LCD_Write_Data(pic[2*((x1-x0)*y+x)+1]);        
  352. //        LCD_Write_Data(pic[2*((x1-x0)*y+x)]);
  353. //        //Write_Data_U16(0x0f0f);
  354. //         }                  //檢測是否寫到屏的邊緣 160x120 其他尺寸圖片請自行更改尺寸
  355. //               
  356. //}


  357. void draw_point(unsigned int x0,unsigned int y0,unsigned int wcolor)
  358. {
  359.     unsigned int x,y; //定義液晶屏坐標
  360.    
  361.         LCD_SetPos(x0,x0+1,y0,y0+1);                  //必須x1-1 y1-1
  362.     for(y=y0;y<y0+1;y++)                    //是否寫完圖片數據?  
  363.         for(x=x0;x<x0+1;x++)
  364.          {
  365.                          Write_Data_U16(wcolor);                          //16位顏色
  366. //               LCD_Write_Data(pic[2*((x1-x0)*y+x)+1]);          //每個格子的顏色分開了兩個8進制表示
  367. //        LCD_Write_Data(pic[2*((x1-x0)*y+x)]);
  368.         //Write_Data_U16(0x0f0f);
  369.          }                  //檢測是否寫到屏的邊緣 160x120 其他尺寸圖片請自行更改尺寸
  370.                
  371. }

復制代碼

0.png (56.47 KB, 下載次數: 198)

0.png

評分

參與人數 1黑幣 +5 收起 理由
xinhui + 5 很給力!

查看全部評分

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

使用道具 舉報

沙發
ID:214521 發表于 2017-6-27 13:32 | 只看該作者
       厲害了    必須頂
回復

使用道具 舉報

板凳
ID:217617 發表于 2017-7-7 13:35 | 只看該作者
好東西,我也做過
回復

使用道具 舉報

地板
ID:234278 發表于 2017-9-24 09:35 | 只看該作者
不錯,回去做個試試
回復

使用道具 舉報

5#
ID:147616 發表于 2017-12-25 18:41 來自手機 | 只看該作者
感謝大神的分享
回復

使用道具 舉報

6#
ID:263148 發表于 2017-12-26 15:29 | 只看該作者
學習一下
回復

使用道具 舉報

7#
ID:263148 發表于 2017-12-26 15:47 | 只看該作者
謝謝分享
回復

使用道具 舉報

8#
ID:266618 發表于 2017-12-30 16:17 | 只看該作者
樓主,我想問下,51跟32之間具體怎么連,還有就是32跟TFT屏幕之間的連接方法,論文里寫的不太全
回復

使用道具 舉報

9#
ID:110649 發表于 2018-1-26 01:05 | 只看該作者
謝謝分享
回復

使用道具 舉報

10#
ID:276118 發表于 2018-1-31 17:53 | 只看該作者
示波器的時基和電壓幅值可以調節嗎?量程可以做到多少?
回復

使用道具 舉報

11#
ID:120014 發表于 2018-3-16 13:35 | 只看該作者
學習中.
回復

使用道具 舉報

12#
ID:163831 發表于 2018-3-28 10:15 | 只看該作者
有沒有原理圖啊
回復

使用道具 舉報

13#
ID:335251 發表于 2018-7-9 15:58 | 只看該作者
收藏  頂
回復

使用道具 舉報

14#
ID:358434 發表于 2018-7-18 10:12 | 只看該作者
不錯,學習一個
回復

使用道具 舉報

15#
ID:335251 發表于 2018-10-22 19:03 | 只看該作者
666,好東西。
回復

使用道具 舉報

16#
ID:399179 發表于 2018-10-23 18:51 來自手機 | 只看該作者
好厲害!好東西!
回復

使用道具 舉報

17#
ID:427509 發表于 2018-11-16 09:17 | 只看該作者
很好,非常棒
回復

使用道具 舉報

18#
ID:518078 發表于 2019-4-21 20:28 | 只看該作者
很好,非常棒
回復

使用道具 舉報

19#
ID:220748 發表于 2019-5-14 20:37 | 只看該作者
真希望發原理圖!!
回復

使用道具 舉報

20#
ID:405102 發表于 2019-8-29 21:23 | 只看該作者
感謝學習!建議;請將電路原理圖發上來。
回復

使用道具 舉報

21#
ID:128989 發表于 2019-8-30 13:09 | 只看該作者
不錯,學習了。
回復

使用道具 舉報

22#
ID:605186 發表于 2019-8-31 14:13 來自手機 | 只看該作者
不錯,準備學習
回復

使用道具 舉報

23#
ID:405102 發表于 2019-8-31 21:23 | 只看該作者
謝謝樓主;很好,學習。
回復

使用道具 舉報

24#
ID:681047 發表于 2020-1-5 11:18 | 只看該作者
很好的,超棒呢
回復

使用道具 舉報

25#
ID:285416 發表于 2020-1-13 22:27 | 只看該作者
能用文字,大概描述一下,波形顯示,是什么方法,
這部分一直不理解
回復

使用道具 舉報

26#
ID:208271 發表于 2020-1-14 08:13 | 只看該作者
樓主,怎樣通過51把程序下載到ARM里的???
回復

使用道具 舉報

27#
ID:704139 發表于 2020-3-7 17:24 | 只看該作者
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品污www一区二区三区 | 超碰在线97国产 | 精品国产一区二区三区观看不卡 | 91文字幕巨乱亚洲香蕉 | 国产在线91 | 欧洲视频一区 | 国产欧美精品一区二区 | 亚洲综合在线视频 | 国产精品精品久久久 | 在线国产一区二区 | 91精品国产91久久久久久密臀 | 夜夜爽99久久国产综合精品女不卡 | 看羞羞视频免费 | 成人精品区| 在线国产视频 | 国产传媒在线播放 | 一级毛片免费完整视频 | 亚洲另类春色偷拍在线观看 | avhd101在线成人播放 | 一区二区三区在线免费观看 | 国产精品久久久99 | 精品国产一区一区二区三亚瑟 | 欧美视频三级 | 欧美精品一区二区三区在线播放 | 欧美一区二区在线观看 | 国产一区二区精品在线 | 国产欧美一级二级三级在线视频 | 综合久久亚洲 | 成人午夜影院 | 欧美一区二区三区在线播放 | 高清色 | 国产午夜精品视频 | 91在线视频观看免费 | 国产999精品久久久久久绿帽 | 99精品一区二区三区 | 99精品观看 | 免费一区二区三区 | 亚洲国产精品成人久久久 | www.亚洲一区二区 | 国产一区二区小视频 | 亚洲精品欧美一区二区三区 |