找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1837|回复: 0
打印 上一主题 下一主题
收起左侧

基于stm32单片机设计,智能控制与检测项目

[复制链接]
跳转到指定楼层
楼主
智能控制与检测


单片机源程序如下:
  1. #include "led.h"
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "beep.h"
  5. #include "key.h"
  6. #include "exti.h"
  7. #include "usart.h"
  8. #include "stdio.h"
  9. #include "usart1_cmd.h"
  10. #include "iwdg.h"
  11. #include "wwdg.h"
  12. #include "timer.h"
  13. #include "tpad.h"
  14. #include "lcd.h"
  15. #include "adc.h"
  16. #include "tsensor.h"
  17. #include "calendar.h"
  18. #include "rtc.h"


  19. u8 KEYSCAN ;  //获取KEY_Scan的值
  20. u8 l=0;       //震动计时3s结束
  21. u16 DO_flag;  //震动响起的标志


  22. void temp()
  23. {
  24.         short temp;
  25.         POINT_COLOR=BLUE;//设置字体为蓝色      
  26.         temp=Get_Temprate();        //得到温度值
  27.                 if(temp<0)
  28.                 {
  29.                         temp=-temp;
  30.                         LCD_ShowString(60+10*8,150,16,16,16,(u8*)"-");        //显示负号(一个英文字符占8个像素)
  31.                 }else LCD_ShowString(60+10*8,150,16,16,16,(u8*)" ");        //无符号               
  32.                 LCD_ShowxNum(60+11*8,150,temp/100,2,16,0);                //显示整数部分
  33.                 LCD_ShowxNum(60+14*8,150,temp%100,2,16, 0X80);        //显示小数部分
  34.                 LED0=!LED0;
  35.                 delay_ms(250);       

  36. }
  37. int main(void)
  38. {         
  39.        
  40.         u8  a[]="    -  -  ";
  41.         u8  b[]="  :  :  ";
  42.         u8 t=0;       
  43.         delay_init();                     //延时函数初始化          
  44.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
  45.         uart_init(115200);                 //串口初始化为115200
  46.         LED_Init();                             //LED端口初始化
  47.         LCD_Init();                                  //LCD端口初始化
  48.         RTC_Init();                                  //RTC初始化
  49.         LCD_Display_Dir(1);         //横屏
  50.         T_Adc_Init();                        //温度初始化
  51.         BEEP_Init();                        //蜂鸣器初始化
  52.         TIM4_PWM_Init(899,0);         //PWM初始化
  53.         KEY_Init();                                //按键初始化
  54.        

  55.         POINT_COLOR=RED;//设置字体为红色
  56.         LCD_ShowString(60,30,200,16,16,(u8*)"LiuChuang_,num 36");
  57.         POINT_COLOR=BLUE;//设置字体为蓝色
  58.         LCD_ShowString(60,150,200,16,16,(u8*)"TEMPERATE: 00.00C");       
  59.         //显示时间
  60.         POINT_COLOR=BLUE;//设置字体为蓝色           
  61.         LCD_ShowString(60,60,200,16,16,a);       
  62.         LCD_ShowString(60,100,200,16,16,b);       
  63.        
  64.         printf("LiuChuang_,num 39,frame_head is LC_36");
  65.        
  66.         while(1)
  67.         {       
  68.                 temp();               
  69.                 if(t!=calendar.sec)
  70.                 {
  71.                         t=calendar.sec;
  72.                         LCD_ShowxNum(60,60,calendar.w_year,4,16,0X80);                                                                          
  73.                         LCD_ShowxNum(100,60,calendar.w_month,2,16,0X80);                                                                          
  74.                         LCD_ShowxNum(124,60,calendar.w_date,2,16,0X80);         
  75.                         switch(calendar.week)
  76.                         {
  77.                                 case 0:
  78.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Sunday   ");
  79.                                         break;
  80.                                 case 1:
  81.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Monday   ");
  82.                                         break;
  83.                                 case 2:
  84.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Tuesday  ");
  85.                                         break;
  86.                                 case 3:
  87.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Wednesday");
  88.                                         break;
  89.                                 case 4:
  90.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Thursday ");
  91.                                         break;
  92.                                 case 5:
  93.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Friday   ");
  94.                                         break;
  95.                                 case 6:
  96.                                         LCD_ShowString(60,80,200,16,16,(u8*)"Saturday ");
  97.                                         break;  
  98.                         }
  99.                         LCD_ShowxNum(60,100,calendar.hour,2,16,0X80);                                                                          
  100.                         LCD_ShowxNum(84,100,calendar.min,2,16,0X80);                                                                          
  101.                         LCD_ShowxNum(108,100,calendar.sec,2,16,0X80);
  102.                         LED0=!LED0;
  103.                

  104.                 //模拟振动传感器
  105.                 if(DO==0)//开始震动
  106.                 {
  107.                         DO_flag=1; //标志位
  108.                 }
  109.                 if(l<3&&DO_flag==1) //
  110.                 {
  111.                         l++;
  112.                         LCD_ShowString (60,170,200,16,16,(u8 *)"Shock       ");//显示震动
  113.                 }else{
  114.                         if(DO==1)//停止震动
  115.                         {       
  116.                                 l=0;
  117.                         }
  118.                         DO_flag=0;
  119.                         LCD_ShowString (60,170,200,16,16,(u8 *)"            ");//显示
  120.                 }
  121.                
  122.                 }
  123.                
  124.                 usart1_cmd(); //通信协议
  125.                
  126.                 if(BEEP_ONOFF ==1){
  127.                         LCD_ShowString(60,120,200,16,16,(u8*)"Alarm: ON ");       
  128.                 }
  129.                 else{
  130.                         LCD_ShowString(60,120,200,16,16,(u8*)"Alarm: OFF");       
  131.                 }
  132.                 KEYSCAN=KEY_Scan(0);//不连按
  133.                 if(KEYSCAN == KEY2_PRESS)
  134.                 {
  135.                         PWM_Flag++; //变暗速度变快
  136.                         printf(" PWM变暗\r\n");
  137.                 }
  138.                 if(KEYSCAN == KEY3_PRESS)
  139.                 {
  140.                         if(PWM_Flag>1)
  141.                         {
  142.                                 PWM_Flag--; //变亮速度变快
  143.                                 printf("PWM变亮\r\n");
  144.                         }
  145.                         else
  146.                         {
  147.                                 printf("亮度最大\r\n");
  148.                         }
  149.                 }
  150.                
  151.        
  152.                 TIM_SetCompare3(TIM4,899/PWM_Flag);//重装载值/标志位=CCR3的值
  153.                 delay_ms(10);                                                                  
  154.         }
  155. }
复制代码

所有资料51hei提供下载:
刘闯代码.7z (201.75 KB, 下载次数: 17)
智能检测与控制 综合项目.pdf (129.74 KB, 下载次数: 19)
串口码.zip (289 Bytes, 下载次数: 16)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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