超市收银系统胡晟

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 //kbhit();

#include //printf();

#include //delay();

#include //exit(0);

#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));

相关文档
最新文档