XDU 2024秋 大三下 微机原理课程设计 点阵式LCD动态显示系统设计
见 demo/video_20240316_090406.mp4
A1区(液晶屏) - A3区(系统总线)
CS - CS2 使得12864的地址空间为0260H~026FH
RW - A0 1为读,0为写
RS - A1 1为读写数据,0为写指令
CS1/2 - A2 1为控制左半屏,0为控制右半屏
对应的地址已在头文件中配置好宏了
只使用方式0,PB为输出,PC0为输入,PA和PC高四位用不上,初始化为输出。
初始化字为0x81
PC0 <- KL1
PB -> 列信号A1~A8
D3区(8255) - A3区(系统总线)
CS - CS1 使得8255地址空间为0270H~027FH
A0 - A0
A1 - A1
D3区(8255) - F5区(4x4按键)
JP24-1(PC0) - JP31-1(KL1)
JP20(PB0~7) - JP37(列信号A0~A7)
对应地址值已在头文件中配置好宏了,注意PC地址就是行信号地址,PB地址就是列信号地址
只需要和8255连接,不需要连系统总线。
默认公交车路线: (Deprecated) 神戸大橋->港口岛北公园->風見鶏の館->鱼鳞之家->山麓線&北野通り->Hotel Monterey Kobe->織田家長屋門->兵庫県立弓道場
0火车站->1文海酒店->2张家坊->3赣江大桥->4岭上村->5天际光电->6中国石化->7仁安医院
单独写好打印每个站出站和进站信息的函数。
按键:
0-上/下行
1-进一站
2-出站
4-广告
5-退一站
6-进站
初始:显示“欢迎使用报站器”
设置全局状态:station = 0~7,对应8个站
不停查询按键,当查询到有按键按下时,检测是哪个按键按下。
如果是"2",表示出站,根据station调用对应显示出站信息的函数
如果是"6",表示进站,根据station调用对应显示进站信息的函数,同时station++, station &= 0x7。当过完最后一站时会从第一站重新开始。
程序假设一次只能按下一个按键
- (已测试)延迟时间修改为0,只要显示图案后不清楚就不需要延迟
- (已测试)顺序出站时,当station为7就没字了。增加nextStation函数来处理下一站问题。 顺序,且station=6,再调用nextStation,不仅会让station+1,还会把方向改为逆序。逆序,且station=1,不仅会让station-1,还会把方向改为顺序。
- (已测试)按下改station或direction的按键时,需要故意做一段延迟,不然极易由于长按而导致连续改几次station或direction。
- (已测试)回退一站时,如果station是各自方向的起始站的话,就不回退。
- (已测试)逆转方向时,如果逆转的结果为station为0,逆向,就不逆转,保持顺序;如果逆转结果为station为7,顺向,也不逆转,保持逆向。
需要用KL1取反来作为中断源IR0。实验箱上没有非门,使用138译码器来作为非门使用。
F7区(138译码器) -
A - VCC
B - VCC
C - F5区(16x16键盘)KL1
G1 - VCC
G2A - GND
G2B - GND
Y8 - B3区的IR0
B3区8259:
CS - A3区CS3 地址范围为0250H - 025FH
A0 - A3区A0 偶地址只用0250H,奇地址只用0251H
INT, INTA - A3区INTR,INTA
其他连线还是和往常一样,这里只加了KL1引发中断,但之后扫描键盘的时候还是得靠从PC0读KL1的值
8259初始化:
ICW1: 0001 0 0 1 0 0x12 上升沿 单片 不写ICW4
ICW2: 0x8 中断向量码为0x8
OCW1: 0xfe 除了IR0,其他都屏蔽
ICW4: 默认全0,一般嵌套,非缓冲方式,非自动EOI
OCW2: 0x20 一般EOI命令
语音模块操作模式为MCU。
B1区(ISD1420) - D3区(8255)
JP5(地址端) - JP23(PA) PA为输出
REC, PLAYE, PLAYL - PC4, PC5, PC6(PC高4位为输出)
这样8255的初始化字为1 000 0 00 1 0x81