资源简介
利用atmega16单片机制作智能锁,具有矩阵键盘扫描、P波控制舵机,蓝牙串口控制开舵机,
代码片段和文件信息
/*
*/
#include “iom16v.h“
#include
void Serv(void); //舵机控制
typedef unsigned char uchar;
uchar i=0;
uchar flag = 1;
uchar detect();
uchar judeKey(uchar iuchar j);
uchar Del = 13; //后退一步
uchar d_lock = 14; //一键锁门
uchar Bac = 15; //一键清零
uchar A_k = 10; //按键A
uchar B_k = 11; //按键B
uchar C_k = 12; //按键C
//变量定义:接收缓冲变量,接收标志位
uchar RX_buffer=0x00Rx_Flag=0;
uchar OPEN = 1; //门处于响应状态
uchar LOCK = 0; //门出于锁住状态
uchar door_state = 1; //门的状态
char RX_cmd[50]; //存放接收到的命令
char pawd[8] = {“123137“};
char s[10];
//unsigned char RX_flag
//函数声明
void USART_Send(unsigned char);
void printLED(int posint num);
void smg(int p int num);
//串口IO初始化函数
void Serial_PortInit(void)
{
int BAUD;
DDRD &= 0XFE;
DDRD |= 0X02;
UCSRA |= (1 << U2X); //倍速模式
UCSRB |= ((1 << RXEN )|(1 << TXEN)); //发送接受使能
UCSRB |= ( (1<< RXCIE)| (1<< TXCIE)); //发送接受结束中断使能
UCSRB &= ~(1 << UCSZ2);
UCSRC |= ((1 << UCSZ1)|(1 << UCSZ0)); //8位数据位
UCSRC &= ~(1 << UMSEL); //异步
UCSRC &= ~((1 << UPM1)|(1 << UPM0)); //无奇偶校验位
UCSRC &= ~(1 << USBS); //1位停止位
BAUD = 12; //波特率9600
UBRRL = (unsigned char)BAUD;
UBRRH = (unsigned char)(BAUD>>8);
SREG|=BIT(7);
}
//串口发送函数
void USART_Send(unsigned char Data)
{
while(!(UCSRA&(BIT(UDRE)))); //数据寄存器UDR是否为空?
UDR=Data; //UDR赋值
while(!(UCSRA&(BIT(TXC)))); //数据是否已经发送完毕?
UCSRA|=BIT(TXC); //清除发送完毕标志位
}
void UART_Send_String(unsigned char* str unsigned char length)
{
unsigned char i=0;
while(length--)
{
USART_Send(*str);
*str++;
}
}
#pragma interrupt_handler USART_Received_Ir:12
//串口接收完毕中断函数
uchar R_i=0;
void USART_Received_Ir()
{
UCSRB &= ~BIT(RXCIE); //接收完毕中断不使能
RX_buffer=UDR; //读取UDR的数据
if(Rx_Flag) //将命令存入数组
RX_cmd[R_i++] = RX_buffer;
if(RX_buffer == ‘#‘)
{
R_i = 0;
Rx_Flag=1;
}
UCSRB |= BIT(RXCIE); //接收完毕中断使能
}
void Delay_ms(unsigned int n)
{
unsigned int i = 0;
unsigned int j = 0;
for(i = 0; i < n; i++)
{
for(j = 0; j < 122; j++)
{
}
}
}
void main(void)
{
DDRA = 0x0f;
PORTA = 0xf0;
MCUCSR |= 0x80;
MCUCSR |= 0x80;
DDRD &= ~((1<<2)|(1<<3)|(1<<4)|(1<<5)); //K1和K2 K3 k4按键
Serial_PortInit(); //蓝牙串口初始化
while(1)
{
BloothContrl(); //蓝牙命令控制舵机
if( !Rx_Flag) //如果蓝牙不在接收数据
pressControl(); //按键、传感器控制舵机
}
}
void pressControl()
{
uchar x = 20;
x = detect();
if(x!= 20)
{
if( door_state == OPEN)
{
if(x == A_k || x
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 60685 2018-12-27 20:34 testLock\.objs\main.lis
文件 15560 2018-12-27 20:34 testLock\.objs\main.o
文件 7523 2018-12-27 20:30 testLock\main.c
文件 1319 2018-12-27 20:35 testLock\testLock.cbp
文件 6465 2018-12-27 20:35 testLock\testLock.cof
文件 4826 2018-12-27 20:35 testLock\testLock.dbg
文件 46 2018-12-27 20:35 testLock\testLock.default
文件 4726 2018-12-27 20:35 testLock\testLock.hex
文件 299 2018-12-27 22:24 testLock\testLock.layout
文件 9 2018-12-15 23:15 testLock\testLock.lk
文件 34336 2018-12-27 20:35 testLock\testLock.lst
文件 373 2018-12-15 23:15 testLock\testLock.mak
文件 3323 2018-12-27 20:35 testLock\testLock.mp
文件 1231 2018-12-27 20:35 testLock\testLock.prj
目录 0 2018-12-15 23:15 testLock\.objs
目录 0 2018-12-27 22:24 testLock
----------- --------- ---------- ----- ----
140721 16
- 上一篇:2018华中科技大学计算机考研情况汇总
- 下一篇:brew_install.zip
相关资源
- 基于atmega16的modbus通信
- 51单片机—4路舵机控制
- 基于Atmega16湿度传感器源代码
- 基于ATmega16单片机的定时器中断秒表
- atmega16输出pwm波形
- 基于Atmega16的智能交通信号控制系统设
- Proteus8.9 VSM Studio WINAVR编译器仿真ATM
- ucos在avr atmega16上的移植
- 基于FPGA的舵机控制程序
- pca9685+stm32f103c8t6
- AVR单片机ATmega16L驱动一个数码管Prot
- AVR-ATmega16双机通信双向,并带反馈I
- STC单片机舵机PWM控制教程源码,教程
- 基于ATMega16的freemodbus主站程序移植
- MPU6050的DMP程序 基于ATMEGA16 可移植
- ATmega16模数转换
- 光电编码器-单片机程序(ATmega16).
- atmega16驱动mpu6050
- MSP430舵机控制程序
- 基于atmega16单片机的时钟
- 扩展实验1 ATK-HC05蓝牙串口模块实验程
- 51单片机编写的基于串口控制的多路舵
- STM32舵机控制程序
- 一种基于ATmega16单片机的粮食湿度监测
- 基于atmega16的RS485通信
- AVR单片机ATmega16L继电器Proteus仿真
- 利用单片机PWM信号进行舵机控制
- MG996R舵机控制
- 51单片机控制多个舵机程序
- ATmega16多功能万年历
评论
共有 条评论