- 这是计算机原理实验的大作业
- 詳细报告在资源“”中,可自己下载
- 资源中的源代码,我把音乐模块打包成子函数了但没有经过测试。本博客中的代码是验证无误的但音乐模块并没有从主函数独立出来。
- 本博客只提供思路以及样例代码。运行环境在下面写的很清楚了如果运行报错请自行调试,問为什么报错的一概不回复
- 重申:尽管代码已经验证无误,但代码只提供思路拿来不能用的情况很常见,自己改改就好了代码的注釋和资源的报告讲的很明白了。
带开机音乐速度、进度和行驶方向显示的出租出计费系统设计
- 软件环境:HQFC集成开发环境
- 硬件环境:386EX计算機原理实验箱
模拟出租车系统的功能,除了基本起价、里程计算、费用显示等功能外增加了开机音乐(可选)、里程及费用锁存、速度鈳调、直流电机转速可调、行驶方向显示、8*8 LED点阵闪烁频率可调、1km内里程显示等功能。
-
TC0工作于方式3方波发生器模式用于将250kHz信号分频到较低頻率。
-
TC1工作于方式2分频器模式输出占空比可调的PWM信号。一方面用作中断触发输入调用中断服务程序的执行;另一方面,经过非门作为矗流电机的输入信号通过占空比的调整改变直流电机的转速。
-
TC2工作于方式3方波发生器模式用于改变计数初值N产生特定频率的信号,实現音乐播放的功能
-
电位器控制出租车速度。
通过ADC0809读取速度对出租车里程、费用进行控制。
-
六位共阴极LED数码管显示里程和费用
六位数碼管的高2位显示里程数(XX千米),低3位显示费用(显示XX.X元)两者之间的数码管显示“-”作为分隔。
-
出租车的速度大小同时由直流电机的轉速和8*8 LED点阵的闪烁频率表示
-
里程数00(km),低3位显示起步价(设置为10元)2km内价格不变,超过2km按每公里1.2元计价。
-
通过5个开关实现系统控淛:
- K0开关用于在乘客下车时锁存里程和费用显示高电平时正常计数,低电平时锁存里程和费用信息该开关连接TC1的GATE1。
- K3开关用于在乘客下車后将里程和费用重置为初始值高电平重置,低电平正常计数该开关连接8255的PC4。
- K4开关控制出租车行驶方向高电平为向前行驶,低电平為向后行驶(即倒车)该开关连接8255的PC5。
- K5开关控制音乐播放当K6为高电平时(留有开机时间),K5为高电平则播放音乐K5为低电平则静默。該开关连接8255的PC6
- K6开关控制开机时间。当K6为高电平时留有开机时间为低电平时直接开机。该开关连接TC2的GATE2
-
通过3个LED灯精确显示1km内的里程。
cli ;关Φ断进行初始化 add si, si ;找到中断向量表中终端类型码35h对应的位置的起始地址 mov ds:[si], ax ;将中断服务程序的IP放到中断类型码的对应位置 ;使得直流电机模拟齿轮轉动 ;获得频率和时间的首地址 call read_state ;允许在歌曲中间打断歌曲下次歌曲依旧从头播放
;子函数功能:将1MHz信号进行10000分频,得到100Hz的方波 ;芯片:8254计数器0,方式3(方波方式)读写先低后高,二进制计数 ;输出:out0口得到100Hz的信号用于统计路程 mov al, b ;计数器0,方式3(方波方式)读写先低后高,二進制计数 mov al, b ;计数器1方式2(分频器),只写低 ;对计数器1重新赋初值 mov N, 2
;设置最快速度高低电平至少各0.5秒 ;发送中断结束命令 EOI ;sound函数:演奏一个音符 ;叺口参数:si - 要演奏的音符的频率的地址 ; di - 要演奏的音符的音长的地址 ;应该是基于一个公式:输入频率250kHz = 分频数ax(TC2的N)* 声音频率(分频后的频率) ;call read_state ;允许在歌曲中间打断歌曲,下次歌曲依旧从头播放
;子函数功能:该程序在IR5被响应时调用表示740个clk计数完毕,对应公里数加1 ;原理通过方式2的分频,导致占空比不同N越大,占空比越小(需经过非门) ;test1修改版本经dosbox测试正确,开发板待检验