单片机实验报告(3)

2018-12-17 10:53

实验四 矩阵键盘扫描实验 自我完成实验

1、实验要求

D1~D8 八个发光二极管构成彩色旋转灯,D9~D13 为档位指示灯,一档旋转速度最慢(周期 1s,D13 亮),二档较快(周期 0.8s,D12 亮),三档更快(周期 0.6s,D11 亮),四档再快(周期 0.4s,D10 亮),五档最快(周期 0.2s,D10 亮)。四个按键 KEY0-KEY1于设定旋转方向为顺时针旋转或者逆时针旋转,KEY2-KEY3 用于增快或则减慢旋转速度。

2、编程思路

按键扫描的方式可以采用前面示例程序中的方法:线反转法或行扫描法。可以用汇编语言 实现,也可以用 C 语言实现。建议如前面示例所示,汇编采用行扫描法,C 语言用线反法。 程序控制流程是:首先初始化设置默认运行参数,然后读取按键,识别键码,并根据键码 的不同执行运行参数调整,最后根据当前的运行参数执行发光二极管 D1-D8 的轮流旋转。

速度的控制通过控制调用延时程序的次数来决定,假设延时程序的延时长度为 5ms。延时 程序可以按如下方式实现(假设晶振频率为 12MHz): void delays() {

uchar t,ms;

ms=5; //延时 5ms

while(ms--) for(t=0;t<120;t++); }

或者采用内嵌汇编来实现: void delays() {

#pragma asm

MOV R2,#50 //;5ms 延时程序 DL1:MOV R1,#48

DL2:DJNZ R1,DL2 // ;内循环 100us NOP

DJNZ R2,DL1 //;中循环 10ms #pragma endasm }

旋转彩灯线反转法 C 语言程序控制流程图

(1)主控流程图 (2)键盘扫描子程序 Keyscan 流程图

旋转彩灯行扫描法汇编控制流程图

3、实验步骤

① 根据上述实验内容,参考 1.2.2,在 Proteus 环境下建立图 3.11 所示原理图,并将其 保存为 keyscan_self.DSN 文件。

② 根据(2)和(3)编写控制源程序,将其保存为 keyscan_self.asm 或 keyscan_self.c。 ③ 将源程序添加到 U1 中,并构造(build)该程序。 ④ 执行仿真过程观察秒表程序功能是否正确。

4、源程序

#include\#include\

#define uchar unsigned char #define uint unsigned int sbit g0=P0^4;

uchar code T_TABLE[]={200,160,120,80,40};//周期值表 uchar code key_code[]={0x22,0x12,0x21,0x11};

void delay()//延时5ms { uchar t,ms; ms=5; while(ms--) for(t=0;t<120;t++); }

void main() { int aa=0xfe; uint dir=1; uint speed=0; int temp,temp2,keycode; int j,key; g0=0; while(1) { P3=0x30; temp=P3; if((temp&0x30)!=0x30)//按键检测 { delay(); delay();


单片机实验报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:安全标准化 现场勘察及整改方案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: