找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4073|回复: 4
收起左侧

自己做的STM32课程设计 超声波测距用TFT显示 并语音播报 简单程序

[复制链接]
ID:291789 发表于 2018-3-14 14:30 | 显示全部楼层 |阅读模式
简单程序尚有不足请指教

单片机源程序如下:
  1. #include "delay.h"
  2. #include "sys.h"
  3. #include "stm32f10x.h"
  4. #include "RTC_Time.h"
  5. #include <stdio.h>
  6. #include "SPI_TFT.h"
  7. #include "Image.h"
  8. #include "timer.h"
  9. #include "exti.h"
  10. #include "usart.h"         

  11. #define uchar unsigned char
  12. #define uint unsigned int
  13.         

  14. #define BUFLEN      50
  15. #define BUFLEN2     50
  16. #define BUFLEN2     50
  17. #define HEADLEN       5  
  18. #define LEN_OFFSET    2


  19. extern   u16    backing_up,distance_measurement;
  20.   u8  flag_m1=0,flag_m2;  //清屏标志位

  21. //unsigned   int   Color    = YELLOW; // 前景颜色
  22. //unsigned   int   Color_BK = BLUE;   // 背景颜色
  23. extern   int shifenwei,baifenwei,gewei,shiwei,baiwei;
  24. extern  u8  mode_number;
  25. extern  int    number,man;
  26. extern  u16    key_flag,show_flag_2;

  27. extern  float  pinjun;
  28. extern  u16  b,a,show_flag_1,flag_measure,flag_over;
  29. extern int shifenwei,baifenwei,gewei,shiwei,baiwei;
  30. uchar head[HEADLEN] = {0xfd,0x00,0x00,0x01,0x01};
  31. uchar speed[HEADLEN] = {0x5B,0x74,0x30,0x5D,0xB8};

  32. uchar text[BUFLEN] = {"距离目标        厘米"};  
  33. uchar text2[BUFLEN] = {"距离过近"};  
  34. uchar text3[BUFLEN] = {"超出检测范围"};  
  35. uchar sound[6] = {0x5B,0x76,0x31,0x30,0x5D,0x84};

  36. void Speech(uchar *buf, uchar len);
  37. int main(void)
  38. {
  39. SystemInit();
  40. NVIC_Configuration();
  41. delay_init();
  42. uart_init(9600);               
  43. InitLcd();
  44. TIM3_Int_Init(39999,72);   //测距最远距离2m   此时计数器溢出 计数器每走一步1us  记满40ms
  45. EXTIX_Init();
  46. LCD_clear(BLACK);
  47. Color_BK = BLACK;
  48. start_show();
  49.   while(1)
  50.   {
  51.      mode_chose();
  52.         if(mode_number%2==1)         
  53.   {   flag_m1++;
  54.                 if(flag_m1==1)LCD_clear(BLACK);
  55.                         else{   Reversing();
  56.                      man++;                                             
  57.                            GPIO_SetBits(GPIOB,GPIO_Pin_0);
  58.                            delay_us(20);
  59.                            GPIO_ResetBits(GPIOB,GPIO_Pin_0);
  60.                            delay_ms(100);               
  61.                         }                                                                           
  62.                          if(flag_over==1)   //检测一次结束
  63.                         {   
  64.                                  number++;                                
  65.                                  flag_over=0;
  66.                                  if(number>4)
  67.                                  {        
  68.                                          number=0;
  69.                                          show_flag_2=1;
  70.                                  }        
  71.                          }
  72.                         if(show_flag_2==1)   //测距显示
  73.                                 {                 
  74.                                  if(show_flag_1==1)
  75.                                  {
  76.                                  show_flag_1=0;        
  77.                                  juli_date_show();    //数据显示函数        
  78.          show_flag_2=0;                                                         
  79.                                         }                        
  80.                                  }
  81.                  }               
  82.                  if(mode_number%2==0)
  83.                  {          flag_m1=0;
  84.        if(flag_measure==1)                          
  85.                          { man++;
  86.          flag_m2++;        
  87.          if( flag_m2==1)         LCD_clear(BLACK);
  88.                             else{                        
  89.                    ultrasonic_ranging_show();
  90.                          GPIO_SetBits(GPIOB,GPIO_Pin_0);
  91.                          delay_us(20);
  92.                          GPIO_ResetBits(GPIOB,GPIO_Pin_0);
  93.                          delay_ms(100);               
  94.                          flag_measure=0;
  95.                         }
  96.                           }                                
  97.                          if(flag_over==1)   //检测一次结束
  98.                         {   
  99.                                  number++;
  100.                                 flag_measure=1;
  101.                                 flag_over=0;
  102.                                  if(number>4)
  103.                                  {        
  104.                                          number=0;
  105.                                          flag_measure=0;
  106.                                          show_flag_2=1;
  107.                                  }        
  108.                          }
  109.                         if(show_flag_2==1)   //测距显示
  110.                                 {                 
  111.                                  if(show_flag_1==1)
  112.                                  {
  113.                                  show_flag_1=0;        
  114.                                  juli_date_show();    //数据显示函数        
  115.                                         if(pinjun<3)     Speech(text2,25);
  116.                                          if(pinjun>200)  Speech(text3,25);
  117.                                          if(pinjun>3  &&  pinjun<200)  
  118.                                          {
  119.                                  sprintf(text + 9,"%5.2f",pinjun);  
  120.                      Speech(text,25);
  121.                                            }
  122.                                  delay_ms(20);        
  123.          show_flag_2=0;
  124.          flag_m1=0;                                         
  125.                                         }                        
  126.                                  }                        
  127.                          }
  128.                  }
  129.                
  130.          }         
  131.         


  132. /*****************************************************************
  133. * 名    称: Speech()
  134. * 功    能: 语音播报陈程序
  135. * 入口参数: 无
  136. * 出口参数: 无
  137. *****************************************************************/
  138. void Speech(uchar *buf, uchar len)
  139. {
  140.         uchar i = 0;         
  141.         uchar xor = 0x00;                           
  142.         head[LEN_OFFSET] = len+ 3;         
  143.         for(i = 0; i < HEADLEN; i++)        
  144.         {
  145.                 xor ^= head[i];
  146.                 USART_SendData(USART1, head[i]);//UART_Trans(head[i]);
  147.                 delay_ms(2);
  148.            }
  149.         for(i = 0; i < len; i++)
  150.         {
  151.                 xor ^= buf[i];
  152.                 USART_SendData(USART1, buf[i]);//UART_Trans(buf[i]);
  153.                 delay_ms(2);
  154.         }
  155.                 USART_SendData(USART1, xor);//UART_Trans(xor);      
  156. }
复制代码

所有资料51hei提供下载:
TFT  oled 2.rar (330.25 KB, 下载次数: 78)
回复

使用道具 举报

ID:292119 发表于 2018-6-14 11:49 | 显示全部楼层
你好,想学习一下语音播报
回复

使用道具 举报

ID:444146 发表于 2018-12-12 15:13 | 显示全部楼层
请问有仿真吗?
回复

使用道具 举报

ID:291789 发表于 2019-1-24 15:25 | 显示全部楼层
songyuan 发表于 2018-6-14 11:49
你好,想学习一下语音播报

我是直接用 语音合成芯片做的  
回复

使用道具 举报

ID:500602 发表于 2019-4-19 19:30 | 显示全部楼层
学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表