超市收银系统胡晟
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机接口课程设计试验报告
――超市收银系统计算机0211班胡晟 012002014308
一.课程设计目的,要求及条件:
掌握接口硬件开发平台的使用方法,利用现有的实验平台和PC机,组成一个微机模拟应用系统;
掌握基本接口电路的综合应用
掌握接口电路的驱动程序和界面软件的设计与编制,学会调试与测试接口软件的一般方法;
结合实际应用,设计一微机应用系统,要求该系统综合应用并行接口、串行接口,时间接口、中断接口、模拟接口,等等,实现微机系统对模拟信号的采集、转换、并行输入,输出,远距离传送,以及远程控制、检测并显示.
二.设计内容
根据以上任务,需进行如下工作:
◆数据采集系统接口设计(包括电路和程序设计与实现)
◆微机并行通信接口设计(包括电路和程序设计与实现)
◆微机时间远程监督并显示(包括电路和程序设计与实现)
◆双机串行通信设计(包括电路和程序设计与实现)
◆远程控制﹑检测﹑显示接口及界面的设计与实现.
题目
35 设计完成超市收银系统
一个主控机对应多个下位机,主控机存储商品资料,并输出相关信息,下位机从执行部件读入商品号,到主控机查询资料,并显示资料.商品查询成功有声音提示,收银统计时有音乐背景.输入商品号,在主机上查询商品价格并发回给终端,由主机计价,终端机可以打印数据,交易结束,有主机向终端发送总价.
三.设计要求
◆自行设计可以根据自己的设计,适当增加元、器件,自己设计电路,配合实验台使用,实现预定功能。
编程语言可采用汇编语言或C/C++。自选。
编程环境采用MF集成开发环境。MF在系统机上已经安装好。
◆ 8255接口
端口地址分配:PA口为300H,PB口为301H,PC口为302H,命令口为303H。
◆ 8251接口
端口地址分配:命令/状态口为309H,数据(出/入)口为308H。
◆ 8253/8254定时接口
端口地址分配:T0=304H,T1=305H,T2=306H,命令口=307H。
◆开关,音乐发生器
四.设计步骤
主要分成上位机和下位机。上位机主要是一个数据库的作用,用来接收下位机传过来的商品号,返回商品信息。下位机输入数据,并显示信息,播放音乐。
首先完成串口的设计,让两台机子能进行简单的通信,然后设计上位机和下位机的主要程序,再在下位机上添加8255的控制,最后再连接音乐发生器。
五.设计思想
首先用8255作为主控,口c下连接一个开关,下位机判断8255的0x302口的输入,如果按下,程序才能继续执行。然后是8251的串口传输。先判断是否键盘有案件,如果是esc,则推出,如果是其他,则传送,没有键盘输入时,为接收状态。字符sletter接收键盘输入,检查8253的TXRDY状态,如果准备好,从8251输出。上位机接收到商品号,判断后,执行不同的函数。在上位机中,存储商品信息的是一个结构体数组,上位机将每个结构数组中的信息以单个字符的形式传送到下位机。如果下位机输入的是‚y‛,说明这次交易结束,上位机判断后,调用totle函数,返回总价。在传送总价是,先要吧总价int型转换成字符数组,然后从8251传送,下位机接到数组后,直接显示。同时,上位机返回一个z字符,下位机接收到这个字符后,开始播放音乐。
下位机的流程图
八.源程序
下位机的程序如下: #include
#include
#include
#include
#define data51 0x308 //8251A 数据口
#define ctrl51 0x309 //8251A 命令/状态口
#define ctrl55 0x303 //8255命令口
#define timer2 0x306 //8253的2号计数器端口
#define timctl 0x307 //8253命令口
#define factor 16 //波特率因子16
unsigned long int clk = 1193182;//8251输入时钟频率(十六进制表示) int tc_table[8]={
110, // 0=110bps
150, // 1=150b/s
300, // 2=300b/s
600, // 3=600b/s
1200, // 4=1200b/s
2400, // 5=2400b/s
4800, // 6=4800b/s
9600 // 1=9600b/s
};
const unsigned long CLK = 1193180; // 声明时钟频率
const unsigned char INTR = 0X1C; // 声明中断号
short int *pFreq; // 声明音频指针
short int *pTimeDelay; // 声明延时指针
short int nFreq[] = {
//声明歌曲‚两个老虎‛的音乐频率
262,294,330,262,
262,294,330,262,
330,349,392,
330,349,392,
392,440,392,349,330,262,
392,440,392,349,330,262,
294,196,262,
294,196,262,
};
short int nTimeDelay[] = {
//声明歌曲‚两个老虎‛的音乐延时
8,8,8,8,
8,8,8,8,
8,8,16,
8,8,16,
4,4,4,4,8,8,
4,4,4,4,8,8,
8,8,16,
8,8,16
};
void Playing(void)
{ outportb( 0x303, 0x80); // 初始化8255
outportb( 0x303, 0x0c); // 置pc6=0 禁止8253通道2的gate引脚 outportb( 0x303, 0x00); // 置pc0=0 禁止7408
outportb( 0x307, 0xb6); // 初始化8253
pFreq = nFreq; // 取歌曲的第一个音频
pTimeDelay = nTimeDelay; // 取歌曲的第一个时延
while (*pFreq&&!kbhit())
{
outportb( 0x306, (unsigned char)(CLK / *pFreq % 256));