STM32 密码锁 c语言

#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();
		
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHG727

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值