




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
扩展条形码输入设备,实现商品的条形码输入;(选作)扩展键盘可实现全拼汉字、中英文和数字输入;(选作)具有多功能销售操作,实现单次销售、多件批发、退货销售、单向折扣等销售;(选作)汉字打印每笔交易的商品名、商品单价、销售数量、销售金额、小计金额、商店店名、单据流水号、交易日期和时间等等。(选作)系统方案核心控制芯片核心控制芯片STC89C52复位到初始状态Eeprom扩展内存条形码扫描枪LED灯指示电源是否供电独立键盘模块电源供电LCD显示信息DS18B20温度采集图1.1系统的主要框图如图1.1所示,本系统采用单片机STC89C52为主控芯片,单片机可以控制使能,可以实现复位,条形码扫描模块可以实现商品的扫描,采集商品的单价,产地,条形码编码以及数量等信息;Led灯用来显示是否有中断信号输入,以便知道是否扫描到信息或者有按键;商品信息的输入通过矩阵键盘来完成;复位模块可以复位系统最初状态,电源模块可以给系统供电,有稳压电路,从直流源处得到9伏电压,经过稳压电路得到5伏直流电;Eeprom模块用来扩展单片机模块的内存,可以实现存储1000个商品信息,同时可以实现掉电保护;用DS18B20模块采集环境温度,液晶LCD1602则显示商品信息,进行温度采集时则切换显示环境温度。方案论证主控芯片选择方案一:采用32位的ARM2138作为收银机的控制核心。ARM2138是一款有着强大的存储空间的芯片,转换速度快,具有在系统可编程功能,内部集成32K静态RAM以及512Kflash存储器,具有较为丰富的引脚资源,多达47个可以承受5V电压的通用I/O口,同时还有多个串行接口,2个高速I2C借口,SPI和具有缓冲作用和数据长度可变功能的SSP,这款芯片较为复杂,操作起来较为困难[1]。方案二:采用传统的8位51系列单片机作为系统的控制器。STC89C51RC单片机是一款具有在系统可编程功能的单片机,其内部具有4K字节的Flash程序存储器,2K字节的数据存储器,3个16位定时/计数器,其中定时器0还可以当成两个8位定时器来使用,用户程序不需要专用编程器即可实现串口直接下载,6个中断、1个全双工串行口和Eeprom等资源。51系列单片机的内部构造简单,编程方面相对方便,容易掌握和使用。但需要更大的flash程序存储器来存储各种数据[2]。方案三:STC89C52RC单片机虽然属于51系列单片机的一种,但与STC89C51RC单片机相比它具有STC89C51RC单片机的功能外,还具有更大的存储空间。而且本次设计STC89C52RC单片机能够达到要求。STC89C52RC芯片可以满足设计要求,它的内部有8K字节的Flash,256字节的RAM,以及4组8位的I/O口线,可方便用户开发使用。三个16位定时器/计数器,具有一个2级中断结构,全双工串行口,芯片内部具有晶振及时钟电路。编程方便简单,可以为众多嵌入式控制应用系统提供高灵活、强有效的解决方案[3]。综上考虑,由于STC89S52单片机的IO口足够本次设计使用,并且STC89C52成本低、便于操作,也容易编程。因此本次设计采用STC89C52单片机,它满足本次设计的基本要求。键盘方案选择方案一:采用标准键盘PS/2键盘,PS/2标准键盘的价格低,而且它具有丰富的键盘资源,这款键盘可以实现中英文输入、数字输入,而考虑到PS/2键盘编码困难,程序编写有一定的难度,所以设计中不予采用。方案二:采用4*5矩阵键盘,矩阵键盘电路比较简单,单片机通过一组IO口即可实现矩阵键盘的控制,判断按键是否按下以及按下那个键,然后返回那个键的ASCII码,从而达到输入数字和英文字母的功能,因为本系统只需实现商品的存储和销售,因而采用矩阵键盘可以满足要求。综合以上两种方案,联系实际情况,考虑困难程度,本次设计采用矩阵键盘实现商品条形码信息的输入。液晶模块选择方案一:采用LCD1602显示LCD1602是一种工业字符型液晶,可以同时显示32个字符,即2行16列字符。它可以用来显示字母、数字、符号。LCD1602能够同时显示多个数据,并且有8个数据引脚和3个控制引脚,占用的I/O口的资源较多[4]。方案二:采用OCM4X8C作为液晶显示。OCM4X8C液晶显示器是128×64点阵的汉字图形型液晶显示模块,可以显示数字、汉字及英文字母,提供两种界面来连接微处理器,可以和CPU直接连接,有两种连接方式,可以8位并行或者串行。而且具有多种功能:画面移位、光标显示、睡眠模式等。但在本次设计中不需要很高的配置,因此不给予采用[5]。方案三:采用七段共阴数码管来显示,七段共阴数码管是显示数字的一类显示屏,对其管脚输入不同电平可控制每段的亮灭。它可以显示0-F的数字信息,价格便宜,使用简单,但是占用I/O的资源也相对较多[6]。此次设计需要显示商品的数字或英文字母信息,包括字符串及数字信息,如果只是采用数码管进行显示的话则无法显示字符串,而且需要占用非常多的I/O口,如果采用LCD1602来显示字符串及数据,相对于数码管,LCD1602使用起来非常方便,因此本次设计液晶显示模块选择LCD1602。存储模块选择方案一:采用SD卡扩展单片机内存,SD卡数据传输率较快,其中SD卡的SPI总线配置较复杂,不过具有较高的记忆容量,移动灵活性较高并且安全性很高,SD卡读写时编程上的头文件非常复杂,而且SD卡很容易造成接触不良。对于本次设计用不上。方案二:采用Eeprom扩展单片机的内存,Eeprom可以实现掉电保护,利用它还能很方便的对单片机的内存进行扩展,而且编程也简单。符合本次的设计要求。考虑到编程的难易程度,方案二更容易实现编程,所以选择方案二作为本次的存储模块。温度采集模块方案一:采用PT100作为测温电路的温度传感器,PT100传感器还具有准确度高,抗振动,稳定性好,耐高压等优点,PT100传感器测温的工作原理是铂电阻的阻值随温度变化而变化,并且呈现一定函数关系。而PT100传感器使用起来比较复杂,而且不常用PT100传感器来实现温度测量。因而本次设计中不予采用。方案二:采用DS18B20作为测温电路的温度传感器。DS18B20的数字温度输出通过单总线;不同于其他的温度传感器的是,DS18B20使用起来比较方便,它使用单线接口方式,而且不需要其他外围电路,测量结果是以串行方式传送的9位数字量,与微处理器的双向通信只需要一根接口线就可以实现,还支持多个传感器同时测量,当多个DS18B20连接时可用一根总线与微机进行通信,从而实现多点测温功能。DS18B20测量温度范围为-55~+125ºC,固有测温分辨率为0.5ºC[7]。通过比较发现,DS18B20的测量方法比较简单,直接输出数字的温度值,不需要校正,所以采用方案二。综上所述,本次设计采用以STC89C52作为本次设计的核心控制器,扩展矩阵键盘实现数字和英文字母输入,通过扩展EEPROM来扩展单片机的存储内存,用LCD1602液晶来显示商品的详细信息,扩展串口实现扫描枪扫描条码输入,以及串口通信。详细硬件电路设计主控芯片STC89C52资料介绍STC89C52单片机芯片如图3.1所示。图3.1单片机的模块图如图3.1所示为STC89C52RC单片机,这款单片机是增强型的8051单片机,可以任意选择6时钟/机器周期和12时钟/机器周期,它的指令代码完全兼容传统8051。其工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V单片机)
,工作频率范围:0~40MHz,用户应用程序空间为8K字节
,片上集成512字节RAM,其通用I/O口有32个,复位后的情况是:4组IO口为准双向口,P1口是一个内部直接带有上拉电阻的8位双向I/O口。对P1口写1时,通过内部的上拉电阻把端口拉到高电平,这样则可以作为输入口使用。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。P0口的输出是漏极开路,当P0口作为总线扩展用时,不需要接上拉电阻,当P0口作为普通I/O口使用时,需要接上拉电阻。P1口的输出缓冲器可驱动4个TTL电平的输入[3]。液晶显示模块设计采用LCD1602英文点阵液晶显示收银机的工作情况,在商品存储时,可以显示需要存储的商品信息,例如名字、单价、产地等;在商品销售时也可以显示相关信息,LCD1602是一种专门用来显示数字、英文字符的液晶模块,它由32个5*8点阵字符为位组成,每一个点阵字符位都可以显示一个字符。LCD1602的显示器的特点是它是很薄的显示器件,而且驱动电压较低,工作电流极小,可以和场效应管电路结合起来组成低功耗的系统,其模块内部自带有160个5*8的点阵字符型发生器。图3.2LCD的电路连接图如图3.2是LCD1602与单片机的连接图,液晶的3脚接精密电位器,接入电位器进行调节液晶显示器的偏压,这样可以调整液晶的显示对比度,此引脚电压为零时得到最强的对比度。4脚为RS数据命令选择端,当4脚为高电平时,可以对液晶进行数据字节的传输操作,当为低电平时,则是进行命令字节的传输操作。命令字节则是对液晶LCD1602的工作方式作设置的字节;数据字节,是用来在LCD1602上显示的字节。5脚R/W,读写选择端。当这个脚为高电平时,可以对LCD1602进行读数据操作,当为低电平时,可以对数据写操作。6脚E:使能信号,是对LCD1602的数据控制时钟信号,利用该信号的上升沿实现对LCD1602的数据传输。7到14脚是8为并行口,是LCD1602进行数据读写的数据口[4]。LCD1602引脚连接如表3.1所示:表3.1LCD1602与单片机的连接引脚连接说明引脚连接说明1电源地9P2.2接(STC89C52)23脚2+5V10P2.3接(STC89C52)24脚310K电阻2脚(10K电位器的中间抽头,1脚接+5V,3脚接地)11P2.4接(STC89C52)25脚4P1.7接(STC89C52)8脚12P2.5接(STC89C52)26脚5P1.6接(STC89C52)7脚13P2.6接(STC89C52)27脚6P1.5接(STC89C52)6脚14P2.7接(STC89C52)28脚7P2.0接(STC89C52)21脚1510欧姆电阻的1端,10欧姆电阻的另一端接+5V8P2.1接(STC89C52)22脚16接地如表3.1所示:1脚为VSS为电源地;2脚为VCC接5V电源正极;3脚为V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。4脚为RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器;5脚为RW为读写信号线,高电平时进行读操作,低电平时进行写操作;6脚为E端为使能端,高电平时读取信息,负跳变时执行指令;7~14脚为D0~D7为8位双向数据端;15~16脚为空脚或背灯电源。15脚背光正极,16脚背光负极[4]。1602的读写时序图如下:图3.3LCD1602的时序图如图3.3为LCD1602的读写时序图,R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据[8]。存储模块电路设计本次采用EEPROM进行对系统扩展内存,采用EEPROM24C02进行对单片机进行存储空间进行扩展,因为存储的商品只是存储他的单价,产地和条码,所以存储一个商品用不了多少空间,因此采用存储器24C02可以扩展512字节的数据存储空间。图3.4Eeprom电路连接图如图3.2是EEPROM的电路连接图,AT24C02的内部分成32页,存储容量为2KB,每页有8B,共有256页,操作时有两种寻址方法,分别是芯片寻址和片内地址寻址。其SDA引脚通常被外围器件拉高,SDA引脚的数据应在SCL为低时变化;当数据在SCL为高时变化,将视为下文所述的一个起始或停止命令;当SCL为高,SDA由高到低的变化被视为起始命令,必须以起始命令作为任何一次读/写操作命令的开始,当SCL为高,SDA由低到高的变化被视为停止命令,在一个读操作后,停止命令会使EEPROM进入等待态低功耗模式[9]。EEPROM的时序图如下所示:图3.5EEPROM的时序图如图3.5为EEPROM的时序图,从中可以看出有时钟和数据传输的方式,时钟和数据传输:SDA引脚正常状态下由外部器件拉高。SDA上的数据只有在SCL时钟信号为低的时候才能进行改变,在SCL为高时SDA上的数据表现为如下方式。开始条件:SCL为高,SDA由高变为低是一个开始条件,开始命令优先于所有的其他命令。结束条件:SCL为高,SDA由低变为高是一个结束条件,在一个读序列之后结束命令,会将EEPROM置于一个待机电源模式,响应:所有的地址和数据都是以8比bit的的形式进行存储和读取,也就是串行的传入或者传出EEPROM,在第九个时钟周期,EEPROM发出一个0作为收到一个字的响应信号[9]。串口通讯模块设计图3.6串口的电路连接图如图3.6是串口的设计,此设计可以用条码扫描器来扫描条码进行商品的存储和销售,扫描枪在对商品的标签上的条形码进行扫描时,通过串口通信传送到MCU的数值应该是一串13位的长度的数字串。MCU通过串口接收到扫描枪送出的数字串,然后对数字串进行判断,符合要求的进行商品的存储或者商品的销售。此外这个串口可以用来单片机系统与计算机之间的串行通信,可以通过串口给计算机发送数据,计算机在接收到数据后进行处理,将处理的结果通过界面显示在计算机屏幕上。此外图中的MAX232串口芯片可以转换电平,因为如果要与计算机进行通讯的话,计算机和单片机之间的电平是不一致的,所以要加串口转换芯片。单片机输出的是TTL电平,+5V表示高电平,0V表示低电平;而计算机的串口+12V表示高电平,-12V表示低电平,采用MAX232芯片可以将计算机的串口电平转换成合适单片机的电平[10]。键盘电路设计本次设计的键盘主是要实现从键盘能输入数字和英文字母,这样才能输入商品信息的条形码和英文名字以及单价。本次设计的键盘因为包含26个字母和十个数字,所以对16个键盘有特殊的要求,一个按键控制4个字母,一个按键控制左移,一个按键控制右移,一个按键控制确定。当在一个按键中需要选择4个字母中的一个时,通过左移右移键来确定位置,然后按下确认键就可以确定需要的字母。当然,也需要一个键来控制当前是数字输入状态,还是字母输入状态,这样就可以实现16个键来实现26个字母和10个数字输入。图3.7矩阵键盘如图3.7矩阵键盘的编码规则为:先读取键盘的状态,从而得到按键的特征编码。先从P1口的高四位输出低电平,低四位输出高电平,从P1口的低四位读取键盘的状态。再从P1口低四位输出低电平,再从P1口的高四位输出高电平,从P1口高四位读取键盘状态,将两次读取结果组合起来就可以得到当前按键的特征编码。本次设计的超市收银机中,只要对商品进行存储和销售,可以采用独立键盘的形式进行设计。这样的非编码键盘的按键排列成行、列。按键的作用只是简单地接通或者断开,不需要附加什么硬件电路,因此需要使用者进行软件编程,才能产生相应的键码。按键识别、防抖动和产生键码要通过软件进行处理。4×4的简易键盘,可以通过行扫描来确定是否有按键按下,确定已按键的行列位置。行扫描,就是按一定的顺序给每条行线置低电平,而其余各行线置高电平,并检测扫描每行时是否产生了列信号,此外,在此次设计中还多用两个设计键来控制商品的存储和销售,当按下S2键是对商品进行存储,当按下S3键时,是对商品进行销售[11]。复位和晶振电路设计单片机最小系统工作时,起振器起到关键的作用,若振荡器不规律地运行,那么得到的结果可能不是很正确。一般的晶振电路都是由一个晶振和两个瓷片电容组成的,而且两个瓷片电容的相连端要接地。晶振一般选11.0592M,这个频率是1.8432M的20倍。图3.8晶振电路连接如图3.8是晶振电路和复位电路的设计,复位电路是单片机最小系统不可缺少的一部分,当给单片机一个复位信号时,单片机会使程序从头开始执行;单片机中一般有两种复位方式:上电复位,在系统一上电时利用电容两端的电压不能突变的原理给系统一个短暂的低电平信号;手动复位,通过手动按钮给系统低电平,从而达到复位的效果,如果手一直按着复位键不放,系统将一直复位。温度测量电路设计本次采用DS180B20温度传感器作为温度测量的核心模块,其引脚排列和模块芯片图如图3.9所示:图3.9DS18B20模块图如图3.9引脚说明:GND(接地),DQ(数据I/O),VDD(可选电源电压),NC(无连接)。本次设计采用三极管型封装的DS18B20,其原理图连接如图3.10所示:图3.10DS18B20的连接图如图3.10采用DS18B20作为测温电路的连接图,DS18B20可达12位的数字值,分辨率为0.0625℃。DS18B20具有如下特点:可以设置为两种供电模式,即数据总线供电方式和外部供电方式。采用数据总线供电方式可以节省一根导线,但可能会导致测量温度的时间会久一点;而采取外部供电方式则多一根导线,但是测量速度会大大加快,所以采用一总线2路温度测量使用外部供电的方式进行测量。如下图3.11所示为DS18B20的时序图:DS18B20需要严格的单总线协议以确保数据的完整性。协议包括集中单总线信号类型:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。复位序列:复位和存在脉冲和DS18B20间的任何通讯都需要以初始化序列开始,初始化序列如下图所示。一个复位脉冲跟着一个存在脉冲表明DS18B20已经准备好发送和接收数据。在初始化序列期间,总线控制器拉低总线并保持480us以发出(TX)一个复位脉冲,然后释放总线,进入接收状态(RX)。单总线由5K上拉电阻拉到高电平。当DS18B20探测到I/O引脚上的上升沿后,在等待15-60us,然后发出一个由60-240us低电平信号构成的存在脉冲[5]。图3.11DS18B20的控制时序图扫描器原理本次设计采用的是AS-8110条码阅读器,器件图如图3.8所示,AS-8110条码阅读器具有以下功能:内部具有解码器,手持近距虹光条码阅读器,各种一维条码能被精确读取;具有7种提示音和音量可调的蜂鸣器,可根据使用环境的调节蜂鸣器的音量;多个内置接口,分别有RS-232、键盘接口、光笔及先进的USB接口。图3.8条码扫描器图3.8是AS-8110条形码阅读器,其有多种功能,有蜂鸣器提示采集到条码信息,外形美观,手握舒适,而已采用其作为扫描模块。当扫描器接触到到条形码后,能识别采集的话,蜂鸣器会响一声作为提示音,说明扫到了条形码。扫描器采用5伏供电,接到电路板上即可给扫描器供电。系统软件设计系统主程序设计流程图:开始初始化开始初始化打开串口中断调用商品存储程序存储完成跳出循环显示DS18B20测量的环境温度调用商品销售程序显示商品信息复位键复位是是是按key2?按key3?按key4?否否否图4.1主程序流程图图4.1为商品存储和销售系统的整体流程,当按下Key2键时,则调用商品存储程序,对商品的单价、编号、条码、产地存储好,再按下一次Key2键确认存储完成;当按下Key4键时,则调用商品销售函数,然后在LCD1602上显示出商品的相关信息;按下Key3键则是对DS18B20测量周围环境操作,按下复位键则是对单片机进行复位。对于串口中断程序,当扫描器扫描到条码时,程序会跳到串口中断函数那里,接下来就是判断是否有按键,当检测到有按键时,在判断是哪个按键,从而进行存储还是销售;当然也可以通过独立按键键盘来进行商品的存储和销售,独立键盘可以实现英文和数字输入。温度采集软件设计:DS18B20温度传感器内部有一个高速暂存的RAM和一个非易失的可电擦除的EEPRAM,而这个EEPRAM可以存放高温度和低温度触发器TH、T和结构寄存器。而这个暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。主要流程图如图4.2所示:开始开始定时器初始化和初始化DS18B20读取实时温度设定温度范围读存储器温度值,将温度存入缓冲区报警是否显示温度值温度超限?图4.2温度测量的流程图如图4.2系统上电后,首先加载EEPROM的上下限的温度值,显示实时温度值,然后根据设计需要的温度进行设定温度范围,然后判定环境温度是否超过设定的温度范围,当超过设定的温度范围时会启动报警,然后在次跳回到设定温度范围。只有当环境温度在设定的温度范围内,才不会启动报警。DS18B20的理论分析:温度传感器采集到的数据是以补码的形式存到暂存器RAM的第0、1两个字节中,单片机可以通过单线接口读到数据,读取时,一般都是低位在前,高位在后。而二进制中的前面5位是符号位,当测得的数据大于0,这5为数据为0,然后将测得数据乘以0.0625就可以得到实际的温度值,当测得温度小于0,则这5位为1,测得的温度取反后在加1然后乘以0.0625才可以得到实际的温度值。在DS18B20中,温度都是以1/2LSB(最低位是有效位)的形式(TEMP_READ),然后再从读计数器里面的值(COUNT_REMAIN),只需知道该温度处每一个摄氏度的计数个数(COUNTER_PER_C),就可以用下列公式计算出实际的温度值。TEMPRATURE(温度)=TEMP-0.25+DS18B20测量温度时采用特有的温度测量技术,将采集到的温度值转换成数值信号,测量得到的结果存到温度寄存器中,温度值和数值关系如下表所示:表一:温度值和数字量的关系温度数字值输出(2进制)数字值输出(16进制)+0.5℃00000000000010000008h+10.125℃000000001010001000A2h+25.0625℃00000001100100010191h+85℃00000101010100000550h+125℃000001111101000007D0h+0℃00000000000000000000h-0.5℃1111111111111111FFFFh-25℃1111111111001110FFCEh-55℃1111111110010010FF92h-25.0625℃1111111001101111FE6Eh-10.125℃1111111101011110FF5Eh键盘软件流程设计:4*4矩阵键盘的设计步骤:开始对第一列进行扫描,判断有无按键,如果没有按键,在依次对第二列、第三列、第四列进行扫描,如果扫描后没有返回到开始的状态,当一列有按键,那么接下来对第一行、第二行、第三行、第四行分别扫描,如果有按键按下就分别显示0、1、2、3;第二列、第三列、第四列依次这样类似的扫描得到相应数值,数值应该是0到9,字母是a到z共26个值。判断有无按键按下的方法是:首先是让置列线P1.4到P1.7为输入状态,然后从行线P1.0到P1.3输出低电平,接着读入列线数据,如果某一列线为低电平的话,则该列线有键闭合。第二步,行线依次轮流输出低电平,然后从列线P1.4到P1.7读入数据,如果有某一列是低电平,则对应行线上有按键按下。结合以上两步就可以确定按键的编号,但是按键闭合一次只能进行键功能操作,所以必须等到按键释放后,在进行键功能操作,否则按键一次,可能会进行同样操作多次。0XF0读端口0XF0读端口是否0XF0是否延时消抖是否0XF0是否寄存当前值X10X0F读端口寄存当前值X2X1位或X2得到按键值图4.3独立按键流图如图4.3为独立键盘的按键扫描流程图,根据有无按键按下来却定对应键的键值。如上程序是判断有无按键按下的部分程序,当PKey为真时表示有按键按下,为假时表示无按键按下。当有按键按下时,如果是行线就去对应行值,如果是列线,就取对应列值,然后返回按键的码值,接着等待按键释放。Eeprom通信流程设计应应答开始初始化总线起始信号否是发送数据发送数据应答是发送数据读数据否应答是发送数据结束是否否否否否否图4.4Eeprom读写流程图如图4.4所示EEPROM的读取开始为顺序读取,顺序读取由立即地址或者随机地址读取,在读数据器件收到一数据之后,通过确认应答来判断接下来的步骤,只要EEPROM在收到之后,便会继续增加数据码地址和串行输出数据码。如果达到存储器的极限时,数据码地址将会重复滚动,顺序读取也将继续下去,当读数据的器件不通过确认应答时,而通过产生一个停止应答时,顺序读取操作将会被终止。上位机显示设计图4.5上位机程序框图如图4.5所示,这是通过LABVIEW来设计商品在电脑上显示商品的各种信息,比如商品的单价,商品的编号,商品的产地,及生产日期。首先现在LABVIEW中存好商品的相关信息,当扫描枪扫描到条码时,通过串口传来13位数据,通过比较是否与存好的商品的条码一致,一致的话就显示商品的相关信息在显示界面上,不一致的话就显示商品不存在。图中包括有选择是进行存储还是销售的按钮,进行相关按钮就可以进行商品的存储和销售。图4.6显示商品信息界面如图4.6所示,这是在LABVIEW上显示销售时商品的相关信息界面,在图上可以可能到商品的单价,编号,生产日期和产地等信息。系统调试调试使用的仪器调试过程中,主要使用了下列的仪器:数字万用板 1台计算机 1台单片机开发板 1台扫描仪 1个独立键盘一个1个直流电源1台调试过程及误差分析对于所设计的系统的调试过程具体如下:首先先对制作好的硬件进行测试,再确保硬件各部分线路接触良好之后,在对系统电路板进行简单粗略的系统整合调试,据此来判断硬件与软件是否可以同步正常工作。在确保正常工作后,转而对系统软件进行编译调试,确认程序能实现软件要求的功能的前提下,连接硬件进行精确调试,直到完整的实现题目要求的功能,之后可以进一步修改软件程序,使之具有更完善的功能。硬件调试这一部分是对制作好的电路板进行详细的检查,包括硬件焊接、装配,还有对焊接好的电路板进行检测,测试电路连接是否良好,导线之间应该导通的是否导通。铜线与铜线之间是否存在短路的情况,这是很重要的检查,也是确保在接上元件后不会烧坏元件。具体步骤为:首先对腐蚀好的板子进行元件的安装,安装有一个原则,一般都是从矮的开始,这样方便焊;此外一边焊元件的同时要用万用表测试元件是否与原理图上的值一样,而且也要用万用表测试线路通不通,如果线路不通,对照着PCB板进行更改,直到正确为止。当焊好板子后,不要急于给系统板子上电,先对整个主控板进行上电,依照各芯片引脚资料,先对各个芯片的引脚电压进行测量,当发现测试结果与芯片资料的输出电压不同时,检查芯片是否接稳,从而进行加固焊接,在重复此步骤,倘若芯片电压依旧不正确,就要查阅相关芯片相关资料,或者检查原理图,或者更换芯片,直到芯片工作正常才可以进行软件硬件结合调试。测试过程中遇到的困难具体调试模块主要分为以下几个模块:LCD1602显示模块、主控模块、独立键盘模块、测温模块、扫描器模块。各模块开始测试时存在以下问题。主控芯片模块,刚开始给板子上电是,给系统供电的指示电源灯不亮,经过仔细检查发现焊接芯片底座有松动的现象,经过对芯片底座进行重新加固焊接后,上电后指示灯正常亮,至此,主控芯片电源供电正常。LCD1602显示模块:在下载液晶测试程序后,液晶无显示,转而进行电路连接是否正确进行检查。经过查阅资料资料后发现电路连接正常,就是没有显示,接着在软件中对所有单片机的I/O口置0,结果测试单片机的I/O输出电压是高电平,就像加了非门一样,经仔细检查也没发现那哪里出现问题,接着进行整个电路板的电路检查,结果依然没有发现那里有问题,就是线路太密,布局太紧,在考虑是不是导线之间的影响,结果在重做这个模块后下载程序后可以正确显示,所以应该是硬件电路存在一些问题,但是检查不出来;不过最后经过重新硬件的制作后可以正确显示了。独立键盘的检查:在连接硬件后下载程序,当按下按键时,液晶无法显示按键的码值,进而进行软件部分的程序检查,发现置的初值不正确,而且不小心把液晶的使能端程序给屏蔽了,经过在三修改程序,最终实现独立键盘输入英文和数字。各模块连接检查:在连接好各模块进行整个系统调试时,发现不能按照最初理论进行功能显示,首先当按键时就不能用条码扫描器进行扫描,而且也不可以进行按键切换进行温度显示,可能是程序还不够完善,正在修改中。(5)刚开始往Eeprom写数据的时候,在液晶上没有显示,只是简单地往地址里写数据都无法显示,对比资料也没发现程序哪里出现错误,然后就将程序从头到尾检查一遍,发现些如数据的地址不对,在更改好地址后,可以将商品信息成功存入Eeprom中。(6)串口设计接口刚开始连接扫描器时,扫描器无法扫描到条码,经过仔细检查发现原来是串口的2脚跟3脚接反了,经过改正之后,可以实现通过扫描器扫描条码进单片机中。参数测试商品的存储对商品存储有两个途径,可以通过条形码对条码进行扫描而后进行存储,也可以通过独立键盘对商品的相关信息进行存储。由于本次设计的键盘是4*4独立键盘,可以实现英文字符和数字输入,所以商品的相关信息是以英文或是数字方式存储,信息如表2表2:商品存储的相关信息:商品编号商品名称商品单价商品条码1029Beizi1069316883250431037qianbi269316883250511039gangbi1569316883250531043shiyanzhi369316883250571036bijiben469316883250501027tuoxie869316883250411041xaingpicha169316883250551044lunwenzhi569316883250581049shupian46931688325063如表2所示,商品的信息存储到Eeprom中,有商品的编号、商品名称、单价、还有条码编号;存储好之后,当需要要销售时,通过按键中断进行销售,也可以通过串口的扫描器来扫描进条码,当扫进来的条与存储好的条码一致时,就让该商品的编号、名称、单价、条码在液晶屏上显示,实现销售操作。温度测量如下图所示,当切换按键测量周围环境温度时可以显示当前的环境温度。图5.1温度显示如图5.1所示,当要进行周围环境温度测试时,通过按键可以进入到测温程序,通过温度传感器既可以测出周围的温度,温度以十进制的数字方式显示在LCD1602上。当然,当通过外界条件改变周围的环境温度时,也可以测出周围的环境温度。按键测试测试独立按键能否实现数字和英文的输入,如下图:图5.2键盘输入显示通过图5.2可以看到独立按键可以输入数字和英文字母,证明独立键盘可以实现0到9的数字输入,以及26个字母的输入。而液晶所显示的是条码的13位数字,也可以说明商品的条码可以存到单片机的内存中。条码枪测试商品销售通过使用条形码扫描器扫描条形码,当扫描枪扫到已经存过的商品条码时,液晶就会显示商品的信息,下图为商品的单价显示。图5.3商品价格显示有图5.3所示,当进行销售时,扫描器扫描商品的条码时,液晶上会显示商品的价格,由于只能显示两行,所以商品的名字、产地未在液晶上显示出来,可以实现让对应商品的信息显示出来,但只能显示其中一个。从能实现在液晶上显示商品的单价,也可以证明可以实现在单片机的内存中存储商品的相关信息。当然,是进行商品的存储时,是通过独立键盘输入还是通过扫描器的扫描输入,下图为选择的显示界面。图5.4按键输入或扫描输入如图5.4所示,当进行商品的存储时,可以通过按键进行商品信息的输入,也可以通过扫描器扫描条形码进行条码的存储。LABVIEW上销售测试当进行销售时,先在LABVIEW上把控件打到销售模式,然后利用扫描器扫描商品的条码,当扫描到存在的商品时,扫描到的13位数据就会从单片机上发送13位数据过来,LABVIEW在收到13为数据后,进行与存好的条码进行对比,存在的商品就会可在LABVIEW上显示商品的相关信息。结果如下图所示:图5.5显示商品信息界面如图5.5所示,是在扫描器扫描到条码后,在LABVIEW上显示商品的信息,如图可以看到商品的单价,产地,编号还有生产日期。结论本次设计简易超市收银系统,可以实现对商品的相关信息进行存储,可以实现从条码器扫描进商品的条码而进行存储,商品的相关信息可在LCD1602上显示,同时实现了通过按键中断来判断是进行商品的存储还是进行商品的销售。此外,还实现了从独立键盘上进行对商品信息的存储,实现了通过按键切换来显示当前的环境温度,实现了通过扫描器来进行商品的销售和存储,实现在EEPROM中存储100个商品信息。本次设计较为成功。但是本次设计也有很多不足,比如没能拓展实现1000个商品信息的存储,以及没能从独立键盘上输入汉字字符;在者,温度传感器那部分未能实现温度超限报警,而且温度测试精度不够;此外在液晶上显示的字符数据不是很清晰,让人看起来不是很舒服;执行销售操作时,未能显示商品的销售额,存储数量还有几个;没能实现从打印机打印销售清单,而且液晶上看不到当前的实时时钟,无法清楚知道当前的时间。在本次设计中应该增加实时时钟模块,便于顾客和超市管理员了解消费和收入的详情。以及应该在程序中能实现每销售一件商品后,对应得到存储商品数量应该减一,每种商品的数量可以进行实时更新。同时可以扩展键盘能实现全拼汉字、中英文输入和数字输入就更为完善了。当然,如果可以增加语音播报功能,读出商品的单价,总价以便找钱给顾客,让顾客清晰了解所消费的商品的单价以及单次消费的总金额那就更完美了,这些是需要去完善的模块。在本次设计中,我深刻体会到制作一个相对好一点的PCB板是有点困难的,不过在本次设计中,我了解了简易超市收银系统的整个工作原理和具体每一步的操作步骤,学会了设计一个独立键盘来设计一个能进行数字和字母输入的键盘,学会通过用扫描器来进行条形码的输入,而且学会了用温度传感器来进行环境温度的测量,并且可以在液晶上显示,同时可以通过EEPROM来进行扩展单品机的内存,而且通过本次的设计,对DXP、KEIL4、VC等编程画图软件更进一步掌握和运用。当然,在设计中,我感觉到自己的动手能力有点欠缺,要么对芯片引脚的焊接不好,要么就是弄断元件的引脚,而且对电路板的布局也不是很美观,不过通过此次设计让我加强了自己的动手能力和制作PCB板子的能力。
谢辞在本次的设计中,我之所以可以完成我的设计作品,完成大学最后的一步,顺利毕业,离不开老师和同学们的帮助,支持和关心,在本次设计完成的最后,我对他们表示由衷的感谢。在本次的设计中,刚开始时我觉得我自己的动手能力非常不足,但是经过这次设计之后,我觉得我的动手能力有了很大的提升,这对我以后的工作有很大的帮助,就算自己毕业了,以后仍旧会努力学习,多动手争取有较大的提升。感谢此次对我的毕业设计有启发的李莉老师,她不仅给了我设计上的启发,而且耐心指导我们,细心讲解我们设计过程中遇到的问题,老师用她丰富的教学经验和多年来的硬件知识解决了我在设计中遇到的许多问题,谢谢老师的耐心指导和讲解。经过这次的设计后,我相信我以后遇到相似的问题,自己应该可以自己分析问题的原因并且解决问题。同时我要感谢我们班同学的帮助,刚开始时我的电路布局一塌糊涂,元件封装也不对,不过由于我们班同学的热心帮助,帮我解决了电路布局不好问题,以及元件封装不对的问题,因为我们班同学的帮助,我可以顺利完成设计硬件电路。当然我的软件程序部分,遇到问题的时候,我们自己的同学也会给我一些建议和帮助,非常感谢他们的热心帮助。另外,我要感谢周围的同学,由于他们的监督下,大家都努力的完成设计,不敢偷懒,因为大家的互帮互助,才能使自己顺利完成此次设计,非常感谢他们。最后感谢母校对我四年来的培育,感谢老师同学们现出的关心和指导,感谢各位老师对我学习上的帮助,谢谢你们大家。参考文献周立功,张华.深入浅出ARM7(上册)[M].北京:北京航空航天大学出版社,2001.朱宇光.单片机应用新技术[M].北京:电子工业出版社.2000.白驹珩,雷晓平.单片计算机及其应用[M].北京:高等教育出版社.2004:1~100.朱华光.浅议LCD1602的编程技巧[J].电脑知识与技术.2010,9(18):4980~4982.gu20072034.基于MS32OF2812的液晶显示模块SO12864设计[OL]-/,2011.08.27/2015.06.05阎石.数字电路技术基础[M].北京:高等教育出版社,2006:179~180.[7]张金,张锋,卢胜.电子系统设计基础[M].北京:电子工业出版社,2011:176~191.[8]825621895.lcd1602时序图[OL]-/view/41a2324769eae009581becaa.html?re=view,2010.10.09/2015.06.05[9]王典洪,李东峰,刘兵.EEPROM与DSP的接口技术[J].
微处理机.
2008,4(2):30~31.[10]黄亮.基于AT89C51单片机的串口通信程序的设计[J].电子制作.2006(07):20~32.[11]merry_song.关于4*4矩阵键盘工作原理[EB/OL]./a/2015/04-30/341997.html,2015-04-30.[12]RashaShaheen,ArneWinterhof.Permutationsoffinitefieldsforcheckdigitsystems[J].Designs,CodesandCryptography,2010,57(3):23~45.[13]TakeshiOhbuchi,FujihikoMatsumoto.
Anewdesignofalinearlocal-feedbackMOStransconductorforlowfrequencyapplications[J].
AnalogIntegratedCircuitsandSignalProcessing,2013,75(2).
附录附录A电路原理图
附录BPCB板
附录CLABVIEW程序/********************************************************************** ***********************************************************************/#include<reg51.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar/****LCD1602命令/*显示模式指令#defineLCD_Display_mode0X38//设置16x2显示5x7点阵8位数据接口//*显示开/关及光标设置#defineLCD_shows00X0C//开显示不显示光标光标不闪烁#defineLCD_shows20X0E//开显示显示光标光标不闪烁#defineLCD_shows10X0F//开显示显示光标光标闪烁#defineLCD_shows30X08//关显示不显示光标光标不闪烁//*指针设置#defineLCD_cursor10X04//写一个字符地址指针减1#defineLCD_cursor20X05//写一个字符地址指针减1并屏幕右移#defineLCD_cursor30X06//写一个字符地址指针加1#defineLCD_cursor40X07//写一个字符地址指针加1并屏幕左移//*清屏指令#defineLCD_clear0x01//清屏指令数据指针清零所有显示清零///*忙状态字#defineLCD_WAY0x80//状态字///*宏定义显示起始地址#defineLCD_ADDH0X80//第一行地址0x80-0xA7#defineLCD_ADDL0XC0//第二行地址0xC0-0xE7*/#definejump_ROM0xCC //18B20#definestartv0x44#defineread_EEROM0xBE//连接1602引脚定义sbitE=P3^7; //1602使能sbitRW=P3^6; //1602读/写控制sbitRS=P3^5; //1602数据/指令控制sbitDQ=P3^4;//DS18B20数据口sbitscl=P1^1;//24c02SCLsbitsda=P1^2;//24c02SDAsbitwp=P1^0;//24c02WPuchartable[14]; //条码数组uchartable_t[14];ucharpd_bit=0; //条码数组下标ucharpd_num=0; //24c02中存储的商品数量ucharnum=0; //购物车商品数量uintmoney_pd=0; //购物价格ucharNew_rec=0; //条码中断标记ucharUART_buff; //条码枪串口数据寄存ucharbreak_flag=0; //退出标记位ucharcountt=0; //中断次数ucharcodetest[21]={1,10,147,176,127,7,157,'w','h','e','a','t','\0','\0','\0','\0','\0',48,0,0,0} ;ucharKeyscan(void);voidL1602_GB(ucharhang,ucharlie);voidL1602_string(ucharhang,ucharlie,uchar*p);voidL1602_char(ucharhang,ucharlie,charsign);voidL1602_init(void);voidwdata(uchardel);voidwcmd(uchardel);bitBusy(void);voidx24c02_write(ucharaddress,ucharinfo);ucharx24c02_read(ucharaddress);voidack(void);ucharreadx(void);voidwritex(ucharj);voidstop();voidstart(void);voidx24c02_init(void);voidflash(void);voiddelay();voidDelay_1ms(uinti);voiduart_init();voidwrite_byte(ucharval);ucharread_byte(void);voidwrite_bit(ucharbitval);ucharread_bit(void);ucharReset(void);//定义商品信息类型数据structpd_info{ unsignedcharname; unsignedcharprice;};structpd_infoinfo_pd[5]; //购物车//voidinput_pd()//{// structpd_infocodepd[5]={{88325015,"cooky",4},{88325027,"shoes",5},{88325024,"mungbean",4},{88325034,"banana",7}};////}/********************************************************************函数名:get_key()功能:按键判断与消抖输入:无输出:键值1 2 3 ?abc defghi4 5 6 ?jkl mno pqr7 8 9 确定stuvwxyz左移 0 右移 退出 空格********************************************************************/ucharget_key(){ ucharkey_buf; P2=0xf0; if(P2!=0xf0) { Delay_1ms(20); //???? if(P2!=0xf0) { key_buf=Keyscan(); P2=0XF0; while(P2!=0XF0); returnkey_buf; } else return0; } else return0; }/*********************************************************************名称:fin_pd(uchartable_t[14])*功能:查找条码 一个13位的条码分为低7位和高6位处理先对低七位进行比较,如果匹配再比较高6位,否则退出*输入:要查找的条码*输出:无***********************************************************************/ucharfin_pd(uchartable_t[14]){ ucharii=0,jj=0; ucharpd_code=1; //24c02地址寄存从1开始是因为第0位为已商品数量位 unsignedlonginthh=1000000; //数组数转换为长整型用到 unsignedlongintbarcode_t=0,barcode_h=0; //扫到的条码和内存中的条码寄存 for(ii=6;ii<13;ii++) //扫描条码数组低七位整合为一个长整型数字 { barcode_h+=(table_t[ii]-48)*hh; hh=hh/10; } pd_num=x24c02_read(0); //读取已存入的数量 24C02第一个存储地址永远保存的是内部存入的商品数量 for(ii=0;ii<pd_num;ii++) //根据商品数量决定要循环比较的次数 { for(jj=3;jj<6;jj++) //先获取低3字节进行判断 3个字节总共24位二进制数,可以表示一个最大为16777216的数足以表示低7位条码 { //存入规则为前6字节为条码,紧接着是10字节的名字,最后为1字节的价格为了方便运算一个商品占20字节,空闲为保留位 barcode_t=barcode_t|x24c02_read(pd_code+jj); Delay_1ms(1); if(jj!=5) barcode_t<<=8; //一个字节一个字节的提取 }// while(1)//查看两个比对数据调试用// { // wcmd(0x01); //// L1602_char(1,1,barcode_t/1000000+48);// L1602_char(1,2,barcode_t/100000%10+48);// L1602_char(1,3,barcode_t/10000%10+48);// L1602_char(1,4,barcode_t/1000%10+48);// L1602_char(1,5,barcode_t/100%10+48);// L1602_char(1,6,barcode_t/10%10+48);// L1602_char(1,7,barcode_t%10+48);//// L1602_char(2,1,barcode_h/1000000+48);// L1602_char(2,2,barcode_h/100000%10+48);// L1602_char(2,3,barcode_h/10000%10+48);// L1602_char(2,4,barcode_h/1000%10+48);// L1602_char(2,5,barcode_h/100%10+48);// L1602_char(2,6,barcode_h/10%10+48);// L1602_char(2,7,barcode_h%10+48);//// Delay_1ms(3000);// wcmd(0x01);// Delay_1ms(5000);// } if(barcode_t==barcode_h) //如果低7位条码匹配上了,读取剩下高六位来匹配 { // barcode_h 加入高位比较程序 info_pd[num].name=pd_code+6; //保存商品名在24C04中的存储地址 info_pd[num].price=pd_code+16; //保存价格存储地址 num++; //购物车商品数量加一 return1; //条码匹配返回1不匹配返回0 // break; } else { pd_code+=20; //跳到下一个商品开始地址继续比对 if(pd_code>=(pd_num*20)) //全部筛查完成,没有发现条码 { wcmd(0x01); L1602_string(1,1,"NOHAVE!"); L1602_string(2,1,"Nowreturn!"); Delay_1ms(3500); return0; // break; } } }}/*********************************************************************名称:voidpd_car()*功能:购物车显示*输入:无*输出:无***********************************************************************/voidpd_car(){ ucharii,jj,break_flag=0,num_t;// wcmd(0x01); money_pd=money_pd+x24c02_read(info_pd[ii].price);//总的商品价格等于所有商品价格之和 ii=0; num_t=ii; while(1) { switch(get_key()) { case1:break_flag=1;break; case2:++ii;if(ii>=num){ii-=1;num_t=0;}break; //下一个商品 case4:if(ii>0){ii--;num_t=0;}break; //上一个商品 default:break; } if(break_flag==1) { break; } if(num_t==0) //当商品发生变化时才扫描显示,避免闪烁 { num_t++; wcmd(0x01); //清屏 L1602_GB(2,1); L1602_string(2,1,"good:"); L1602_string(1,1,"num:price:."); L1602_GB(1,5); L1602_char(1,5,num+48); L1602_char(1,13,money_pd/100%10+48); L1602_char(1,14,money_pd/10%10+48); L1602_char(1,16,money_pd%10+48); for(jj=0;(jj<10)&&(x24c02_read(info_pd[ii].name+jj)!='\0');jj++) //轮流显示商品名字 { L1602_char(2,jj+1+5,x24c02_read(info_pd[ii].name+jj)); //读取商品名显示 } } //Delay_1ms(1); }}/*********************************************************************名称:do_key_abc(uchara)*功能:根据键值执行相应操作*输入:键值*输出:无***********************************************************************uchardo_key_abc(uchara){ switch(a) { case0:break; case1:break_flag=1;break case2:if(state) //有字符输入标记位为1时才执行操作//按下后右移一位选择; { ++lie_abc; //输入字符选择右移 if(lie_abc>3) //右移限定 lie_abc=3; wcmd(0x80+lie_abc-1); //执行右移 }break; case3:if(state==0) //没字符输入状态下执行 //空格 { ++lie_in; //产品名右移,相当于一个空格 wcmd(0xc0+lie_in-1); //执行右移 pd_buff.pd_name[i]=0; //写入产品名缓存 i++; //跳到下一位 }break; case4:if(state) //有字符输入标记位为1时才执行操作 //按下后左移一位选择; { ++lie_abc; //输入字符选择左移 if(lie_abc<1) //左移限定 lie_abc=1; wcmd(0x80+lie_abc-1); //执行左移 }break; //确定键按下 case5:if(state) { pd_buff.pd_name[i]=state+lie_abc; //写入产品名缓存 L1602_char(2,lie_in,state+lie_abc); // 显示选择的字符 i++; //跳到下一位 state=0; //字符按下标记清零 }break; case16:L1602_string(1,1,"abc"); //显示将要选择的字符ABC //abc L1602_GB(1,1); //开光标指示将要选择的位 lie_abc=1; //光标位置1 state=97; //标记有输入字符可供左右移动ascll码+偏移位lie_abc可得到准确字符 break; } if(break_flag==1) return0; else return1;}/*********************************************************************名称:do_key_123(uchara)*功能:根据键值执行相应操作*输入:键值*输出:无***********************************************************************/voiddo_key_123(uchara){ uintbb; if((pd_bit==13)&&(a!=1)&&(a!=5)&&(a!=13)) //限定13位输入 a=0; else switch(a) { case1:break_flag=1;a=0;break; //退出键按下 case2: a=0;break; case3:table[pd_bit]='0';++pd_bit;a=0;break; //0 case4: a=0;break; case5:a=3; if(pd_bit==13) //检查输入条码是否达到13位 { while(a--)//这是启动电源时,液晶显示:start(并闪烁3次) { L1602_string(1,1,"compare"); Delay_1ms(500); wcmd(0x01); Delay_1ms(500); } if(fin_pd(table)) //判断是否找到对应的条码 { pd_car(); //购买商品处理 pd_bit=0; wcmd(0x01); for(bb=0;bb<14;bb++) //清除条码缓冲区 { table[bb]='\0'; table_t[bb]=0; } } } else { L1602_string(1,1,"codesshouldbe"); L1602_string(2,1,"13bits"); Delay_1ms(2000); } a=0; break; case6:table[pd_bit]='9';++pd_bit;a=0;break; //9 case7:table[pd_bit]='8';++pd_bit;a=0;break; //8 case8:table[pd_bit]='7';++pd_bit;a=0;break; //7 case10:table[pd_bit]='6';++pd_bit;a=0;break; //6 case11:table[pd_bit]='5';++pd_bit;a=0;break; //5 case12:table[pd_bit]='4';++pd_bit;a=0;break; //4 case14:table[pd_bit]='3';++pd_bit;a=0;break; //3 case15:table[pd_bit]='2';++pd_bit;a=0;break; //2 case16:table[pd_bit]='1';++pd_bit;a=0;break; //1 default:a=0;break; } L1602_GB(2,2); L1602_string(2,2,table); L1602_string(1,1,"THEBARCODEIS:"); //显示将要输入的条码}/*********************************************************************名称:Main()*功能:主函数 主函数*输入:无*输出:无***************************************************************************************************************************/voidMain(void){ ucharKey_Value=0;//键值 ucharfuntion=0; uchari; unsignedcharTMPH,TMPL; uinttemp; L1602_init(); L1602_string(1,1,"CashRegister"); L1602_string(2,1,"Inputafuntion!"); x24c02_init(); //初始化24C02 wp=0; //使能24c02芯片读写 for(i=0;i<21;i++) { x24c02_write(i,test[i]); Delay_1ms(1);} uart_init(); while(1) { //加入另外四个功能按键判断给funtion Key_Value=get_key(); //扫描按键功能选择1购买商品2存入商品信息3温度显示 switch(Key_Value) { case1:funtion=1;TR1=1;ES=1;Key_Value=0;break; //开中断. case2:funtion=2;Key_Value=0;break; default:Key_Value=0;break; } if(funtion==1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年演出经纪人试题解析与答案
- 多角度演出经纪人资格证试题与答案
- 2024年演出经纪人资格证考点解析及试题与答案
- 2024年营养师资格认知试题及答案
- 2024年演出经纪人考试前准备清单:试题及答案
- 圆满完成的营养师试题及答案
- 如何高效学习演出经纪人资格证试题及答案未来趋势
- 营养师资格要求及试题解析
- 精确定位营养师考试的试题及答案
- 2024年营养师证复习指南试题及答案
- 河南省驻马店市泌阳县部分中学联考2024-2025学年八年级下学期3月月考数学试题(原卷版+解析版)
- 肺结核病人的心理护理
- 2025年开封文化艺术职业学院单招职业技能测试题库含答案
- 2025年辽宁冶金职业技术学院单招职业适应性测试题库有完整答案
- 2025年安徽扬子职业技术学院单招职业适应性测试题库(各地真题)
- 2025年湖北幼儿师范高等专科学校单招职业技能测试题库汇编
- 创新创业项目计划书撰写
- 2024年上海市杨浦区复旦大学附中自主招生数学试卷
- 2025年安徽警官职业学院单招职业适应性测试题库带答案
- 《汽车底盘构造与维修》专业课程标准
- 2025年中国外运股份有限公司招聘笔试参考题库含答案解析
评论
0/150
提交评论