单片机电子密码锁带时钟Word文档格式.docx
- 文档编号:21546507
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:20
- 大小:31.45KB
单片机电子密码锁带时钟Word文档格式.docx
《单片机电子密码锁带时钟Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机电子密码锁带时钟Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
ucharIS_Valid_User=0;
ucharcodeTitle_Text[]="
YourPassword..."
;
ucharDSY_BUFFER[10]="
"
//显示缓冲
ucharUserPassword[10]="
//用户输入的密码
voidInitialize_LCD();
voidSet_Disp_Pos(ucharpos);
voidWrite_LCD_Data(uchardat);
voidDisplay_String(uchar*str,ucharLineNO);
//在液晶指定行显示字符串
voidIIC_24C04_Init();
//IIC初始化
voidBeep();
voidyinyue();
voidWrite_LCD_Command(ucharcmd);
ucharRecString(ucharSlave,ucharSubsddr,uchar*Buffer,ucharN);
//从IIC读取数据
ucharSendString(ucharSlave,ucharSubsddr,uchar*Buffer,ucharN);
//向IIC写入数据
ucharKeys_Scan();
//键盘扫描
voidboss();
sbitLED_OPEN=P2^4;
//开锁亮灯
sbitBEEP=P3^7;
//蜂鸣器
sbitRS=P2^7;
sbitRW=P2^6;
sbitEN=P2^5;
sbitSCL=P3^2;
sbitSDA=P3^3;
//-------------------------------------
//延时
voidDelayXus(uintx)
{
uchari;
while(x--)for(i=0;
i<
120;
i++);
//蜂鸣器子程序
voidBeep()
for(i=0;
100;
i++)
DelayXus
(1);
BEEP=~BEEP;
BEEP=0;
//-------------------------------------
//清除密码
voidClear_Password()
UserPassword[0]='
\0'
DSY_BUFFER[0]='
voidDisplay_String(uchar*str,ucharLineNO)
Write_LCD_Command(LineNO|0x80);
for(i=0;
=strlen(str);
Write_LCD_Data(str[i]);
//-----------------------------------------------------------------
//主程序
voidmain()
P0=0xFF;
P1=0xFF;
P2=0xFF;
IE=0x82;
//允许T0中断
TMOD=0x00;
//TMOD=0x02;
//T0设置为8位自动重装模式
//TH0=175;
//TL0=175;
//TR0=1;
//启动T0
DelayXus(10);
Initialize_LCD();
//初始化LCD
IIC_24C04_Init();
//初始化24C04
Display_String(Title_Text,0x00);
//在第1行显示标题
RecString(0xa0,0,IIC_Password,6);
IIC_Password[0]='
UserPassword[0]='
while
(1)
{
boss();
Beep();
DelayXus(100);
P1=0xF0;
while(P1!
=0xF0);
//如果有键未释放则等待
while(P1==0xF0);
//如果没有再次按下按键则等待
//----------------------------------------LCD1602.C----------------------------
//液晶控制与显示程序
voidDelayMS(uintms)
while(ms--)for(i=0;
//------------------------------------
//忙检查
ucharBusy_Check()
ucharLCD_Status;
RS=0;
//RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
RW=1;
//R/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作
EN=1;
//E(或EN)端为使能(enable)端,下降沿使能,下跳变时液晶屏开始执行命令
DelayMS
(1);
LCD_Status=P0;
//DB9为高4位三态、双向数据总线7位(最高位)(也是busyflag)
EN=0;
returnLCD_Status;
//-----------------------------
//写LCD命令
//---------------------------------
voidWrite_LCD_Command(ucharcmd)
while((Busy_Check()&
0x80)==0x80);
//忙等待
//低电平0时选择指令寄存器
RW=0;
//低电平(0)时进行写操作
//写指令时,E为高脉冲,即让E从0到1发生正跳变,应先置0
P0=cmd;
//产生正跳变
//设置LCD显示位置
voidSet_Disp_Pos(ucharpos)
Write_LCD_Command(pos|0x80);
//发送数据
voidWrite_LCD_Data(uchardat)
RS=1;
//高电平1时选择数据寄存器
P0=dat;
//LCD初始化
voidInitialize_LCD()
Write_LCD_Command(0x38);
//设置16×
2显示,5×
7点阵,8位数据接口
Write_LCD_Command(0x01);
//显示清屏,数据指针=0,所有显示=0
Write_LCD_Command(0x06);
//写指令06H置字符输入模式:
屏幕不动,字符后移
Write_LCD_Command(0x0c);
//显示开,关光标
/*
//----------------------------------
//显示字符串
voidShowString(ucharx,uchary,uchar*str)
uchari=0;
if(y==0)Write_LCD_Command(0x80|x);
//以下设置显示起始位置
if(y==1)Write_LCD_Command(0xc0|x);
//1602型LCD字符显示位置的确定方法规定为:
80H+地址码,注意可以设置显示位置
//第二行行首地址:
80H+40H=0CH教材
P287
16;
i++)//输出字符串
*/
//-----------------------------------------------------------------------
//1602型LCD内部地址参照教材P287,1602型字符显示位置的确定方法规定为80H+地址码(00-0FH40-4FH)
//如要将字符显示在第2行第6列,则确定地址的指令代码应为80H+45H=C5H
//----------------------------24C04.c--------------------------------
//24C04IIC读/写程序
//-------------------------------------------------------------------
voidDeslayMS(uintx)
//---------------------------------------------------------
//起始位
voidStart()
SDA=1;
SCL=1;
Delay4us();
SDA=0;
SCL=0;
//停止位
voidStop()
//读取应答每次传送一个字节完毕,必须接收从机发出的一个应答位
voidRACK()
//发送应答信号
voidACK()
//发送非应答信号
voidNO_ACK()
//从芯片读取1字节
ucharRecbyte()
uchari,rd;
rd=0x00;
8;
rd<
<
=1;
rd|=SDA;
returnrd;
//向芯片发送1字节
ucharSendByte(ucharwd)
bitack0;
SDA=(bit)(wd&
0x80);
wd<
//释放总线并准备读取应答
ack0=!
SDA;
//此SDA为从机发来的应答信号,SDA为0表示应答,为1则为无应答
returnack0;
//返回应答
//向芯片发送多字节数据函数(写多字节)
ucharSendString(ucharSlave,ucharSubaddr,uchar*Buffer,ucharN)
Start();
if(!
SendByte(Slave))return0;
//0xa0器件地址以及写入操作,0xa0即为10100000B
SendByte(Subaddr))return0;
N;
SendByte(Buffer[i]))return0;
Stop();
return1;
//接收多字节数据函数(读多字节)
ucharRecString(ucharSlave,ucharSubaddr,uchar*Buffer,ucharN)
SendByte(Slave+1))return0;
//0xa1器件地址以及读取操作,0xa1即为10100001B
N-1;
Buffer[i]=Recbyte();
//接收数据
ACK();
//发送应答位
Buffer[N-1]=Recbyte();
//
NO_ACK();
//发送非应答位
//向24C04中写一个字节数据
//数据先通过指令完成移位再从SDA串行输出。
按照时序要求,
//数据在SCL低电平时变化,高电平时稳定,每个时钟脉冲传送一位。
voidWrite_A_Byte(ucharb)
b<
SDA=CY;
//反汇编可以看出左移是x
//SDA=(bit)(b&
0x80);
//通过按位“与”运算将最高位数据?
//因为传送时高位在前,低位在后
RACK();
//向指定地址写数据
voidWrite_IIC(ucharaddr,uchardat)
Write_A_Byte(0xa0);
//0xa0器件地址以及写入操作,0xa1即为10100000B
Write_A_Byte(addr);
//芯片内存寻址
Write_A_Byte(dat);
DeslayMS(10);
ucharRead_A_Byte()
uchari,b;
//可以不要
b|=SDA;
returnb;
//从任意地址读取数据
ucharRead_Current()
uchard;
Write_A_Byte(0xa1);
d=Read_A_Byte();
returnd;
ucharRandom_Read(ucharaddr)
returnRead_Current();
//--------------------------------------------------------
//中断发声换函数
voidT0_INT()interrupt1
BEEP=!
BEEP;
TH0=HI_LIST[sidx];
TL0=LO_LIST[sidx];
//IIC总线初始化
//-------------------------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 电子 密码锁 时钟