智能控制与检测
单片机源程序如下:
- #include "led.h"
- #include "sys.h"
- #include "delay.h"
- #include "beep.h"
- #include "key.h"
- #include "exti.h"
- #include "usart.h"
- #include "stdio.h"
- #include "usart1_cmd.h"
- #include "iwdg.h"
- #include "wwdg.h"
- #include "timer.h"
- #include "tpad.h"
- #include "lcd.h"
- #include "adc.h"
- #include "tsensor.h"
- #include "calendar.h"
- #include "rtc.h"
- u8 KEYSCAN ; //获取KEY_Scan的值
- u8 l=0; //震动计时3s结束
- u16 DO_flag; //震动响起的标志
- void temp()
- {
- short temp;
- POINT_COLOR=BLUE;//设置字体为蓝色
- temp=Get_Temprate(); //得到温度值
- if(temp<0)
- {
- temp=-temp;
- LCD_ShowString(60+10*8,150,16,16,16,(u8*)"-"); //显示负号(一个英文字符占8个像素)
- }else LCD_ShowString(60+10*8,150,16,16,16,(u8*)" "); //无符号
- LCD_ShowxNum(60+11*8,150,temp/100,2,16,0); //显示整数部分
- LCD_ShowxNum(60+14*8,150,temp%100,2,16, 0X80); //显示小数部分
- LED0=!LED0;
- delay_ms(250);
- }
- int main(void)
- {
-
- u8 a[]=" - - ";
- u8 b[]=" : : ";
- u8 t=0;
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
- uart_init(115200); //串口初始化为115200
- LED_Init(); //LED端口初始化
- LCD_Init(); //LCD端口初始化
- RTC_Init(); //RTC初始化
- LCD_Display_Dir(1); //横屏
- T_Adc_Init(); //温度初始化
- BEEP_Init(); //蜂鸣器初始化
- TIM4_PWM_Init(899,0); //PWM初始化
- KEY_Init(); //按键初始化
-
- POINT_COLOR=RED;//设置字体为红色
- LCD_ShowString(60,30,200,16,16,(u8*)"LiuChuang_,num 36");
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(60,150,200,16,16,(u8*)"TEMPERATE: 00.00C");
- //显示时间
- POINT_COLOR=BLUE;//设置字体为蓝色
- LCD_ShowString(60,60,200,16,16,a);
- LCD_ShowString(60,100,200,16,16,b);
-
- printf("LiuChuang_,num 39,frame_head is LC_36");
-
- while(1)
- {
- temp();
- if(t!=calendar.sec)
- {
- t=calendar.sec;
- LCD_ShowxNum(60,60,calendar.w_year,4,16,0X80);
- LCD_ShowxNum(100,60,calendar.w_month,2,16,0X80);
- LCD_ShowxNum(124,60,calendar.w_date,2,16,0X80);
- switch(calendar.week)
- {
- case 0:
- LCD_ShowString(60,80,200,16,16,(u8*)"Sunday ");
- break;
- case 1:
- LCD_ShowString(60,80,200,16,16,(u8*)"Monday ");
- break;
- case 2:
- LCD_ShowString(60,80,200,16,16,(u8*)"Tuesday ");
- break;
- case 3:
- LCD_ShowString(60,80,200,16,16,(u8*)"Wednesday");
- break;
- case 4:
- LCD_ShowString(60,80,200,16,16,(u8*)"Thursday ");
- break;
- case 5:
- LCD_ShowString(60,80,200,16,16,(u8*)"Friday ");
- break;
- case 6:
- LCD_ShowString(60,80,200,16,16,(u8*)"Saturday ");
- break;
- }
- LCD_ShowxNum(60,100,calendar.hour,2,16,0X80);
- LCD_ShowxNum(84,100,calendar.min,2,16,0X80);
- LCD_ShowxNum(108,100,calendar.sec,2,16,0X80);
- LED0=!LED0;
-
- //模拟振动传感器
- if(DO==0)//开始震动
- {
- DO_flag=1; //标志位
- }
- if(l<3&&DO_flag==1) //
- {
- l++;
- LCD_ShowString (60,170,200,16,16,(u8 *)"Shock ");//显示震动
- }else{
- if(DO==1)//停止震动
- {
- l=0;
- }
- DO_flag=0;
- LCD_ShowString (60,170,200,16,16,(u8 *)" ");//显示
- }
-
- }
-
- usart1_cmd(); //通信协议
-
- if(BEEP_ONOFF ==1){
- LCD_ShowString(60,120,200,16,16,(u8*)"Alarm: ON ");
- }
- else{
- LCD_ShowString(60,120,200,16,16,(u8*)"Alarm: OFF");
- }
- KEYSCAN=KEY_Scan(0);//不连按
- if(KEYSCAN == KEY2_PRESS)
- {
- PWM_Flag++; //变暗速度变快
- printf(" PWM变暗\r\n");
- }
- if(KEYSCAN == KEY3_PRESS)
- {
- if(PWM_Flag>1)
- {
- PWM_Flag--; //变亮速度变快
- printf("PWM变亮\r\n");
- }
- else
- {
- printf("亮度最大\r\n");
- }
- }
-
-
- TIM_SetCompare3(TIM4,899/PWM_Flag);//重装载值/标志位=CCR3的值
- delay_ms(10);
- }
- }
复制代码
所有资料51hei提供下载:
刘闯代码.7z
(201.75 KB, 下载次数: 17)
智能检测与控制 综合项目.pdf
(129.74 KB, 下载次数: 19)
串口码.zip
(289 Bytes, 下载次数: 16)
|