#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "BEEP.h"
#include "lcd.h"
#include "usart.h"
#include "stm32f10x_it.h"
#include "key16.h"
#include "timer.h"
#include "ds18b20.h"
#include "Motor.h"
#include "Rtc.h"
#include "DHT11.h"
u16 num1;
u16 num2;
u16 num3;
u16 num4;
u16 flag=0;
u16 password=1080;
u16 nums=0;
u16 error=0;
u16 address=0;
u16 cnt=1;
u16 NUM2=20;
u16 NUM1=0;
u16 beep=0;
extern char k1;
void show11()
{
LCD_ShowString(80,300,200,200,16,"WXXY");
delay_ms(1000);
LCD_ShowString(80,300,200,200,16," ");
LCD_ShowString(80,150,200,200,16,"WXXY");
delay_ms(1000);
LCD_ShowString(80,150,200,200,16," ");
LCD_ShowString(80,0,200,200,16,"WXXY");
delay_ms(1000);
LCD_ShowString(80,0,200,200,16," ");
// LCD_ShowNum(50,40,nums/100%10,2,16);
// LCD_ShowNum(100,40,nums/10,2,16);
// LCD_ShowNum(150,40,nums%10,2,16);
}
void timeshow1()
{
LCD_ShowNum(10,300,calendar.hour,2,16);
LCD_ShowNum(35,300,calendar.min,2,16);
LCD_ShowNum(60,300,calendar.sec,2,16);
LCD_ShowString(25,300,200,16,16,":");
LCD_ShowString(50,300,200,16,16,":");
}
void show2()
{
LCD_ShowString(0,0,200,200,16,"mima");
LCD_ShowString(0,20,200,200,16,"cishu");
LCD_ShowNum(50,20,error,2,16);
}
void keypeo()
{
KEY_Scan16(0);
if(k1==1)
{
flag=1;
address++;
nums=1;
k1=0;
}
if(k1==2)
{
flag=1;
address++;
nums=2;
k1=0;
}
if(k1==3)
{
flag=1;
address++;
nums=3;
k1=0;
}
if(k1==4)
{
flag=1;
address++;
nums=4;
k1=0;
}
if(k1==5)
{
flag=1;
address++;
nums=5;
k1=0;
}
if(k1==6)
{
flag=1;
address++;
nums=6;
k1=0;
}
if(k1==7)
{
flag=1;
address++;
nums=7;
k1=0;
}
if(k1==8)
{
flag=1;
address++;
nums=8;
k1=0;
}
if(k1==9)
{
flag=1;
address++;
nums=9;
k1=0;
}
if(k1==10)
{
flag=1;
address++;
nums=0;
k1=0;
}
if(address==1)
{
if(flag==1)
{
num1=nums*1000;
// nums+=nums*1000;
// LCD_ShowNum(address*18+20,0,num1%10,2,16);
flag=0;
}
}
if(address==2)
{
if(flag==1)
{
num2=nums*100;
// nums+=nums*100;
//
// LCD_ShowNum((address-1)*18+20,0,num1%10,2,16);
// LCD_ShowNum(address*18+20,0,num2%10,2,16);
flag=0;
}
}
if(address==3)
{
if(flag==1)
{
num3=nums*10;
// nums+=nums*10;
// LCD_ShowNum((address-2)*18+20,0,num1%10,2,16);
// LCD_ShowNum((address-1)*18+20,0,num2%10,2,16);
// LCD_ShowNum(address*18+20,0,num3%10,2,16);
flag=0;
}
}
if(address==4)
{
if(flag==1)
{
num4=nums;
// nums+=nums;
// LCD_ShowNum((address-3)*18+20,0,num1%10,2,16);
// LCD_ShowNum((address-1)*18+20,0,num3%10,2,16);
// LCD_ShowNum((address-2)*18+20,0,num2%10,2,16);
// LCD_ShowNum(address*18+20,0,num4%10,2,16);
flag=0;
}
}
LCD_ShowNum(0,40,nums/1000,1,16);
LCD_ShowNum(0+15,40,nums/100%10,1,16);
LCD_ShowNum(0+30,40,nums/10%10,1,16);
LCD_ShowNum(0+45,40,nums%10,1,16);
nums=num1+num2+num3+num4;
LCD_ShowNum(55,0,num1/1000,1,16);
LCD_ShowNum(55+15,0,num2/100%10,1,16);
LCD_ShowNum(55+30,0,num3/10%10,1,16);
LCD_ShowNum(55+45,0,num4%10,1,16);
}
void judge()
{
if(address==4)
{
if(nums!=password)
{
error++;
if(error>3)
{
LED1=0;
delay_ms(1000);
LED1=1;
}
}
else
{
LED0=0;
delay_ms(100);
LED0=1;
delay_ms(100);
LED0=0;
delay_ms(100);
LED0=1;
}
beep=1;
LED0=1;
address=0;
}
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
LED_Init(); //LED端口初始化
LCD_Init();
KEY_Init();
KEY_Init16();
//DS18B20_Init();
RTC_Init();
RTC_Set(2023,9,9,12,03,58);//引掉就一直走,不从头
//TIM3_PWM_Init(2000,2199);//T=arr*psc/72*10^6
// Motor_Init();
// Motor_SetDir(Dir);
// it5(10000,7200);
// TIM3_Int_Init(10000,7200);//1s arr,psc 范围0到65535,就用这个模板。
//TIM5_Int_Init(10000,7200); // 1s PWM 1000HZ//arr很重要傲
//TIM_SetCompare1(TIM4,1000);
//show11();
u8 t=0;
u8 humidity;
u8 temperature;
LCD_ShowString(0,240,200,16,16,"Temp: C");
//LCD_ShowString(0,170,200,16,16,"Humi: %");
while(1)
{
if(t%10==0) //每100ms读取一次
{
DHT11_Read_Data(&temperature,&humidity); //读取温湿度值
LCD_ShowNum(0+40,240,temperature,2,16); //显示温度
//
LCD_ShowNum(0+40,170,humidity,2,16); //显示湿度
}
delay_ms(10);
t++;
if(t==20)
{
t=0;
}
timeshow1();
keypeo();
show2();
judge();
}
}
STM32 密码锁 c语言
最新推荐文章于 2025-07-30 16:34:38 发布