单片机课程设计

上传人:汽*** 文档编号:545213417 上传时间:2022-11-06 格式:DOC 页数:15 大小:676KB
返回 下载 相关 举报
单片机课程设计_第1页
第1页 / 共15页
单片机课程设计_第2页
第2页 / 共15页
单片机课程设计_第3页
第3页 / 共15页
单片机课程设计_第4页
第4页 / 共15页
单片机课程设计_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《单片机课程设计》由会员分享,可在线阅读,更多相关《单片机课程设计(15页珍藏版)》请在金锄头文库上搜索。

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

2、 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(unsig

3、ned 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 RS_CL

4、R 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 Flag; PLE

5、N=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);/密码正确显示的信息 P0

7、=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) / 写入命令函数 whi

9、le(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_Strin

10、g(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(unsigned char t) / uS延时函数,含有输入参数 unsigned char t? while(-t);void DelayMs(unsigned char t) /mS延时函数,含有输入参数 unsigned char t,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号