收藏 分销(赏)

单片机课程设计.doc

上传人:Fis****915 文档编号:552404 上传时间:2023-12-06 格式:DOC 页数:15 大小:702KB
下载 相关 举报
单片机课程设计.doc_第1页
第1页 / 共15页
单片机课程设计.doc_第2页
第2页 / 共15页
单片机课程设计.doc_第3页
第3页 / 共15页
单片机课程设计.doc_第4页
第4页 / 共15页
单片机课程设计.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

1、信息与电气工程学院单片机课程设计 题 目 液晶显示密码锁 学 院 信息与电气工程学院 专 业 电气工程及其自动化 年 级 电气 姓 名 学 号 指导教师 时 间 2013年 7月 4日 原理图:程序:/-名称:液晶显示密码锁#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include#includebit LCD_Check_Busy(void);/判忙函数声明 1602void LCD_Write_Com(unsigned char com); / 写入命令函数void LCD_Write_Data(unsigned char Data); / 写入数据

2、函数void LCD_Clear(void); / 清屏函数void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s);/写入字符串函数void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data); / 写入字符函数void LCD_Init(void); /初始化函数 1602void DelayUs2x(unsigned char t); / uS延时函数,含有输入参数 unsigned char t?void DelayMs

3、(unsigned char t); /mS延时函数,含有输入参数 unsigned char t,unsigned char KeyScan(void); /键盘扫描函数,使用行列反转扫描法 按键扫描函数,返回扫描键值unsigned char KeyPro(void); /按键值处理函数,返回扫键值unsigned char code password=0,0,0,0,0;/设定的密码#define KeyPort P3 /键盘定义#define CHECK_BUSY /1602sbit RS = P22; /定义端口 sbit RW = P21;sbit EN = P20;#define

4、 RS_CLR RS=0 #define RS_SET RS=1#define RW_CLR RW=0 #define RW_SET RW=1 #define EN_CLR EN=0#define EN_SET EN=1#define DataPort P0 /1602void main() unsigned char num,i,j; unsigned char passwordtemp5; /最大输入5个 unsigned char inputtimes; /密码输入错误次数 unsigned char passwordlength,PLEN; /输入密码长度,实际密码长度 bit Fla

5、g; PLEN=sizeof(password)/sizeof(password0);/用于计算出实际密码长度 LCD_Init(); /初始化液晶屏 DelayMs(10); /延时用于稳定,可以去掉 LCD_Clear(); /清屏 LCD_Write_String(0,0, welcome! ); /写入第一行信息,主循环中不再更改此信息,所以在while之前写入 LCD_Write_String(0,1,Input password!); /写入第二行信息,提示输入密码while (1) /主循环 P0=0xf0; num=KeyPro(); /扫描键盘 if(num!=0xff) /

6、如果扫描是按键有效值则进行处理 if(i=0) /输入是第一个字符的时候需要把改行清空,方便观看密码 LCD_Write_String(0,1, );/清除该行if(i5) passwordtempi=num; LCD_Write_Char(i,1,*);/输入的密码用*代替 i+; /输入数值累加if(i=5) /密码输入到最大值6,表示输入结束,需要进行比对 passwordlength=i-1; /计算输入密码长度 i=0; /计数器复位 if(passwordlength=PLEN)/长度相等则比较,否则直接输出错误 Flag=1;/先把比较位置1 for(j=0;j);/密码正确显示

7、的信息 P0=0xff; inputtimes=0;/输入正确则次数清零,重新计数 Flag=0; /清除正确标志 else LCD_Write_String(0,1, );/清除该行LCD_Write_String(0,1,Wrong! Retry!);/密码错误,提示重新输入inputtimes+;/连续输入错误,则次数累加 P0=0xf0;if(inputtimes=15) LCD_Write_String(0,1, );/清除该行 LCD_Write_String(0,1,Wrong 15 times!);/密码错误,提示重新输入 while(1);/停止该位置,重启电源后才能输入,实

8、际实用中则需要等到一定时间后才能再次输入。 /*LCD1602 引脚定义 1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK*/ bit LCD_Check_Busy(void) /判忙函数 #ifdef CHECK_BUSY DataPort= 0xFF; RS_CLR; RW_SET; EN_CLR; _nop_(); EN_SET; return (bit)(DataPort & 0x80);#else return 0;#endif void LCD_Write_Com(unsigned char com) / 写入命令

9、函数 while(LCD_Check_Busy(); /忙则等待 RS_CLR; RW_CLR; EN_SET; DataPort= com; _nop_(); EN_CLR; void LCD_Write_Data(unsigned char Data) / 写入数据函数 while(LCD_Check_Busy(); /忙则等待 RS_SET; RW_CLR; EN_SET; DataPort= Data; _nop_(); EN_CLR; void LCD_Clear(void) / 清屏函数 LCD_Write_Com(0x01); DelayMs(5); void LCD_Write

10、_String(unsigned char x,unsigned char y,unsigned char *s) /写入字符串函数 while (*s) LCD_Write_Char(x,y,*s); s +; x+; void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) / 写入字符函数 if (y = 0) LCD_Write_Com(0x80 + x); else LCD_Write_Com(0xC0 + x); LCD_Write_Data( Data); void LCD_Init(void)

11、 /初始化函数 LCD_Write_Com(0x38); /*显示模式设置*/ DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); DelayMs(5); LCD_Write_Com(0x38); LCD_Write_Com(0x08); /*显示关闭*/ LCD_Write_Com(0x01); /*显示清屏*/ LCD_Write_Com(0x06); /*显示光标移动设置*/ DelayMs(5); LCD_Write_Com(0x0C); /*显示开及光标设置*/ void DelayUs2x(unsign

12、ed char t) / uS延时函数,含有输入参数 unsigned char t? while(-t);void DelayMs(unsigned char t) /mS延时函数,含有输入参数 unsigned char t, while(t-) /大致延时1mS DelayUs2x(245); DelayUs2x(245); unsigned char KeyScan(void) /键盘扫描函数,使用行列反转扫描法 按键扫描函数,返回扫描键值 unsigned char cord_h,cord_l;/行列值中间变量 KeyPort=0xF0; /行线输出全为0 cord_h=KeyPor

13、t&0xf0; /读入列线值 if(cord_h!=0xf0) /先检测有无按键按下 DelayMs(10); /去抖 if(KeyPort&0xf0)!=0xf0) cord_h=KeyPort&0xf0; /读入列线值 KeyPort=cord_h|0x0f; /输出当前列线值 cord_l=KeyPort&0x0f; /读入行线值 while(KeyPort&0x0f)!=0x0f);/等待松开并输出 return(cord_h+cord_l);/键盘最后组合码值 return(0xff); /返回该值unsigned char KeyPro(void) /按键值处理函数,返回扫键值 s

14、witch(KeyScan() case 0xe7:return 0;break;/0 按下相应的键显示相对应的码值 case 0xd7:return 0;break;/1 case 0xb7:return 0;break;/2 case 0x77:return 0;break;/3 case 0xeb:return 0;break;/4 case 0xdb:return 0;break;/5 case 0xbb:return 0;break;/6 case 0x7b:return 0;break;/7 case 0xed:return 0;break;/8 case 0xdd:return 0;break;/9 case 0xbd:return 0;break;/a case 0x7d:return 0;break;/b case 0xee:return 0;break;/c case 0xde:return 0;break;/d case 0xebe:return 0;break;/e case 0x7e:return 0;break;/f default:return 0xff;break; 参考文献:1万隆、巴奉丽等编.单片机原理及应用技术.清华大学出版社,2010.32谢伟成、杨加国等编.单片机原理及应用C51程序设计.清华大学出版社

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
百度文库年卡

猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服