170 likes | 369 Views
硬件实验扩展题设计思路介绍. 浙江大学光电系 王晓萍. 实验一:扩展题 3 采用外部中断的电平触发方式,编写并运行程序,观察运行结果。记录一次按键动作,进入中断的次数。. 主程序流程. 中断程序流程. 中断初始化. 计数器单元加一. 初始化 计数器单元. 中断返回. 等待中断. 实验二:设计型实验 2. 主程序流程. 画出流程并设计程序实现采用定时器设计一分钟倒计时器。. 初始化定时器 T=50ms. N. 50ms 计数器为 0 ?. 初始化 50ms 计数器为 20. Y. 50ms 计数器为 20 ;秒计数器减 1.
E N D
硬件实验扩展题设计思路介绍 浙江大学光电系 王晓萍
实验一:扩展题3 采用外部中断的电平触发方式,编写并运行程序,观察运行结果。记录一次按键动作,进入中断的次数。 主程序流程 中断程序流程 中断初始化 计数器单元加一 初始化 计数器单元 中断返回 等待中断
实验二:设计型实验2 主程序流程 画出流程并设计程序实现采用定时器设计一分钟倒计时器。 初始化定时器T=50ms N 50ms计数器为0? 初始化50ms计数器为20 Y 50ms计数器为20;秒计数器减1 把秒计数器数值显示到LED上 初始化秒计数器为60 秒计数器为0? N 查询方式 等待溢出 Y 结束 50ms计数器减1
实验二:扩展题1 画出流程并设计程序实现24小时的实时时钟显示。 DBUF的分配 预先在显示缓冲区设置当前时间的小时、分钟、秒; 或利用按键输入当前时分秒,并按左边形式保存到DBUF。 在利用单片机中的定时器,实现1秒定时,通过程序实现一个数字实时时钟。 小时高位 小时低位 分高位 分低位 秒高位 秒低位
主程序流程 实验二:扩展题1流程 从键盘得到时分秒并存入DBUF; 定时和中断初始化; 50ms计数器置为20; 秒标志清0. 50ms中断程序流程 秒高位为6 N 50ms计数器减1 Y N 秒标志=1? N 50ms计数器为0? 秒高位置0 分低位加1 Y Y 秒低位加1; 秒标志清0 ……… 置秒标志为1 秒低位为10? N 小时高位为3? N 重置50ms计数器为20; Y Y 秒低位置0 秒高位加1 小时高位置0 中断返回
实验三:设计型实验3 用按键输入自己的学号,并在动态数码管上显示出来。 主程序流程 DBUF及指针初始化 N 有键按下? 显示程序 Y 判断键值 更新指针指向的DBUF位; 指针加1 N 指针移出DBUF? Y 重置指针
实验三:扩展实验1 循环显示6个数码管的边缘各段,形成一个运动着的大边框。 说明:段码和位码按照 大循环的顺序先制成2 张表存放在程序中,供 程序查询。 初始化 主程序流程 如:从第2个数码管的a段开始显示: TAB1:DB:01,01,01,01,01,02,04,08 08,08,08,08,08,04,02,01 TAB2:DB:02,04,08,10H,20H,20H,20H,20H, 02,04,08,10H,01,01,01,01 1秒延时程序 查表获得位码 要显示的段码共16段; 每个段码对应一个位控信号 查表获得段码 输出段码位码
主程序流程 实验三:扩展实验2 利用连击现象,当按键时间长于2秒时,每0.5秒在个位上加1,连续累加,直到按键释放。 初始化工作 按键计数器清0; DBUF清0 0.5秒延时 有键按下? N 按键计数器清零 Y 按键计数器为4? N 按键计数器加1 Y DBUF+1 显示DBUF值
实验三:扩展实验3 基于静态显示模块电路,画出流程并设计程序实现数码管从右到左滚动显示自己的学号的所有位数; 主程序流程 初始化DBUF DBUF 6个单元与6个数码管具有映射关系,改变DBUF内容,数码管显示内容即改变。 显示DBUF 延时0.5s DBUF 循环左移
初始化DBUF 主程序流程 实验三:扩展实验3 基于动态显示模块电路,画出流程并设计程序实现数码管从右到左滚动显示自己的学号的所有位数;(软件延时) 显示DBUF 延时10ms 10ms计数器+1 10ms计数器为50? N Y DBUF 循环左移
实验三:扩展实验3 基于动态显示模块电路,画出流程并设计程序实现数码管从右到左滚动显示自己的学号的所有位数;(中断显示) 中断程序程序流程 读取指针指向DBUF值 查表得到段码 主程序流程 输出段码 和位码 初始化中断DBUF指针 位码右移 指针+1 初始化DBUF 位码 指针移出DBUF? N 延时0.5s Y DBUF 循环左移 返回 初始化指针 和位码
实验四:设计型实验2+3 用中断方式编写A/D转换程序,每秒以100ms的间隔采集8次,求8次结果的平均值,保存到内部RAM40H开始的单元,共采集30秒钟。 中断服务程序设计原则:尽量简短,通过设置标志的方式,将大段程序转移到主程序中实现。 100ms用定时器的中断方式实现,A/D转换用查询方式;静态显示和动态显示均可以;30s钟后结束采样;每s结果既保存又显示。
定时中断初始化 按键扫描 显示刷新 通信 启动AD转换 50ms次数清零 100ms次数清零 Flag100ms清零 秒数=30 转换结束? N 其他处理 DBUF初始化 Y 秒数-1 =0? 读结果 暂存 N Flag100ms=1? 关闭中断 N 100ms次数=8? Y Flag100ms清零 100ms次数+1 结束 Y Y 求平均,保存 修改DBUF内容 100ms次数=9? 100ms次数<=8? N N =10,1s到 Y
50ms中断程序 50ms次数+1 50ms次数=2? N Y Flag100ms置位 50ms次数清零 中断返回
实验四:扩展型实验1 轮流采集8个通道信号,并进行显示。 设:输入的是8个温度信号,要求以1s的周期轮流采集8路温度,并显示通道号和该通道的温度值,以此循环反复。 显示缓冲区 传感器量程T:0~100℃; 输出电压U:0~5V; A/D转换结果D:00H~FFH; 实际温度的计算t=100/255×D ℃
定时中断初始化 读结果 50ms次数清零 计算温度值 显示刷新 Flag1S置位 修改DBUF 其他处理 DBUF初始化 通道+1 Flag1s =1? N N 通道号为8? Y 指向通道0地址 Y 更新指针指向通道0 启动AD转换 转换结束? N Y
50ms中断程序 50ms次数+1 50ms次数=20? N Y Flag1s置位 50ms次数清零 中断返回