基于单片机的简易酒店点菜系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1章.设计总体思路与系统框图

1.1设计总体思路

根据设计要求我们可知酒店点菜终端系统由控制模块,液晶显示模块,键盘模块组成。控制模块有80C51和80C52可供选择,但考虑到程序占用的空间比较大,所以我选择了80C52单片机。对于液晶显示模块我们这里采用的是LCD12864(64行128列组成)。对于键盘模块由于只要用到三个键,故我们可以用三个按键分别来实现上移,确定,下移功能。再加以简单的辅助电路和C 语言程序就可以构成简单的酒店点菜终端系统,在此,我们采用proteus 软件进行仿真。

1.2系统框图

按照设计思路,系统框图如下:

图一 系统框图

1.3系统显示框图

将各模块在Proteus仿真软件中连接好后,点击“运行”,结合键盘上的“上移”、“确定”、“下移”键可以在LCD上看到开机画面、各系菜单以及其子菜单。显示框图如图二。

图二显示框图

第2章.单元函数模块设计

2.1 AT89C52单片机控制模块

2.1.1AT89C52介绍

AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程。其将通用的微处理器和Flash 存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。

2.1.2AT89C52管脚图

AT89C52管脚图如下:

图三AT89C52管脚图

2.1.3头文件注解

在用c语言编程是往往第一行就是reg52.h或者其他的自定义头文件,系统编程将要使用到两个头文件,分别是reg52.h和code.h。下面就reg52.h头文件作简单解释,code.h头文件的编写主要是为了存放菜单中所要使用的汉字的字模,以便主程序调用,程序清单将在附录中给出。程序的第一行是一个“文件包含”处理,

所谓“文件包含”是指一个文件将另外一个文件的内容全部包含进来。程序中包含REG51.h头文件的目的是为了要使用P1 (还有其他更多的符号)这个符号,即通知C 编译器,程序中所写的P1 是指80C51 单片机的P1 端口而不是其它变量。

2.2键盘控制模块

2.2.1键盘功能

本系统采用的是三个BUTTON分别实现“上移”,“确定”,“下移”三个功能,有了这三个键我们就能实现菜单,子菜单,功能的进入和返回。

图四键盘控制模块

2.2.2键盘控制程序

程序中我定义了P3.0,P3.4,P3.7分别为“上移”,“确定”,“下移”三个功能按键。按键引脚的一端接单片机,一端接低电平,当单片机接收到某个端口的低电平是就表示拿个按键已经按下。否则表示按键没按下,为了更好的实现按键的准确性我加入了消抖程序与松手检测程序。按键判断程序如下:

void keyscan() //按键判断

{

if(qd==0)

{

delay(5);

if(qd==0)

{

while(!qd);

n=1;

}

}

if(sy==0)

{

delay(5);

if(sy==0)

{

while(!sy);

m++;

if(m>7)

m=0;

}

}

if(xy==0)

{

delay(5);

if(xy==0)

{

while(!xy);

m--;

if(m==255)

m=7;

}

}

}

2.3 LCD显示模块

2.3.1 LCD12864功能介绍

AMPIRE128x64管脚一共18个(见图五),CS1左半屏片选端,CS2右半屏片选端;VCC、GND就是电源、接地引脚,V0液晶显示驱动电压,RS数据指令选择信号,H为数据,L为指令,也叫D/I,即DATA和INSTRUCTIONS这两个单词的缩写。R/W 读写选择信号。E为LCD使能端,R/W为L时,E信号下降沿锁存DB7-DB0;R/W为H时,E为H,DDRAM数据读到DB7-DB0,如果只写不读的话可以接地处理。DB0-DB7数据传输端口。RST 为复位信号,-VOUT为液晶显示驱动电压。

2.3.2 LCD12864指令说明

AMPIRE128x64共有7个指令,下面分别加以说明:显示开关:0x3e 关;0x3f开(R/W=0,RS=0)。显示起始行:0xc0+i ,i取值0至63(R/W=0,RS=0)。设置DDRAM页地址(X地址):

0xb8+i,i取值0至7(R/W=0,RS=0),设置Y地址:0x40+i,i 取值0至63(R/W=0,RS=0)。写数据:将数据线上的数据DB7-DB0写到DDRAM 。Y地址指针自动加1(R/W=0,RS=1)。读数据:将DDRAM中的数据读入1数据线DB7-DB0 。Y地址指针自动加1(R/W=1,RS=1)。指令表如表一所示

表一LCD12864指令表

2.3.3 LCD驱动程序

驱动程序如下:

void CheckState()

{uchar dat;//状态信息(判断是否忙)

RS=0; // 数据\指令选择,D/I(RS)=“L”,表示 DB7∽DB0 为显示指令数据

RW=1; //R/W=“H”,E=“H”数据被读到DB7∽DB0

do{DATA=0x00;

EN=1; //EN下降沿

dat=DATA;

EN=0;

dat=0x80 & dat; 仅当第7位为0时才可操作(判别busy信号)

}while(!(dat==0x00));

}

/*写命令到LCD中*/

SendCommandToLCD(uchar com)

相关文档
最新文档