资源简介

利用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


评论

共有 条评论