单片机实验3 单片机人机接口设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

void Delay()
//延时函数
{
第2页 共6页
单片机原理及应用——单片机人机接口设计
unsigned int i; for(i=0;i<2000;i++); }
unsigned char KeyScan(void) //用于扫描输入的信号
{
unsigned char keycode;
if(key0==0)
case UP : keycount++;if(keycount>15) keycount=0; //如果 keydata 是加法,就将 keycount 做加法运算 break;
case DOWN : if(keycount==0) keycount=15;else keycount--; //如果 keydata 是减法,就将 keycount 做减法运算


进入主函数,进行初始化设置 调用相应函数,获得按键的输入
N
有按键
输入?
Y
通过对按键的扫描,进行相 应的加减清零计数
将运算结果赋值给指定端口 P5
七、实验源代码:
#include<stdio.h>
#include<c8051f020.h>
#define NO_KEY 0xFF
#define CLEAR 0x0A
及应用——单片机人机接口设计
按键 0(清 LED0 零)
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
1
0
1
0
1
0
1
0
1
0
1
LED1
0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
LED2
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
第6页 共6页
keycode=CLEAR; CLEAR 的值
//如果输入的是清零键,就赋值给 keycode
else if(key1==0)
的值
keycode=UP;
//如果输入的是加法键,就赋值给 keycode UP
else if(key2==0)
keycode=DOWN; //如果输入的是加法键,就赋值给 keycode DOWN 的 值
二、实验内容 1. C8051F020 单片机按键(3 个)和 LED(4 个)显示接口电路设计、制作与调 试。 2. 用按键输入脉冲,在 P1 口按 16 进制计数方式点亮发光二极管。其中一个按 键为加法计数键,一个按键为减法计数键,最后一个为清零键。
三、实验说明 通过本实验,掌握单片机简单人机交互接口电路的设计、制作和调试方法和
#define UP 0x0B
#define DOWN 0x0C
sbit key0=P1^0;
sbit key1=P1^1;
sbit key2=P1^2;
unsigned char code led[16]={0xFF,0xFE,0xFD,0xFC,0xFB,0xFA,0xF9,0xF8,0xF7,0xF6,0xF5,0xF4 ,0xF3,0xF2,0xF1,0xF0};//设定显示字数组共 16 位
VDD
2. 独立式按键接口电路
R
图 5 LED 接口电路
VDD
R K1 K2 K3
图 6 独立式按键电路
第1页 共6页
单片机原理及应用——单片机人机接口设计
3. 程序流程图:
编写各个模块
设置独立式按键,定义端口
延 用 设判 时 于 定断 函 扫 消输 数 描 除入
输 抖的 入 动截 的 的止 信 函函 号 数数 的
break; } P5=led[keycount]; //输出,将数组中的对应 keycount 赋值给 P5 Keyoff();
//停止输入 } } 七、实验结果:
通过 P1 端口与外电路板的连接实现用三个按键分别控制 4 盏 LDE 灯的显 示的功能。按键 0、1、2 分别控制 LDE 灯显示所译码的加、减、清零,(详细见 下表)符合实验设计的要求。
LED3
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
按键 1(加 按键 2(减
法)
法)
X
X
X=1,完成 加法功 能,若为 1,则由上 往下跳转 状态;X=0 则不变化
X=1,完成 减法功 能,若为 1 则由下 往上跳转 状态;X=0 则不变化
八、实验总结:
通过这次实验,我们掌握了单片机简单人机交互接口电路的设计方法;更 加进一步熟悉 C8051F020 单片机 I/O 口交叉开关设置和 I/O 端口的使用;同时 掌握独立式按键和 LED 显示接口电路和程序设计方法。
else
keycode=NO_KEY; //如果没有输入,就赋值 keycode NO_KEY 的 值
return(keycode);
//返回 keycode 的值
}
unsigned char KeyInput(void)
//设定消除抖动的函数
{
unsigned char keybuff,keydata; //keybuff 是缓存 keydata 的变量
//通过延时 20ms 确认输入
void Keyoff(void)
//判断输入的截止
{
unsigned char keydata;
do
{
keydata=KeyScan();
}
while(keydata!=NO_KEY); //如果 keydata 无输入,就停止,否则不断扫描 输入
}
void main(void)
程序设计方法。进一步熟悉 C8051F020 单片机的 I/O 口交叉开关和振荡器及配 置使用;熟悉 C 语言的模块化程序设计方法。
必须用模块化方法进行 C 语言程序设计。
四、实验仪器和设备 PC 机、Keil uVision2 软件,C8051F020 单片机,EC3 在线仿真器。
五、实验原理
1. LED 显示接口电路
WDTCN=0xAD;
keydata=0x0A;
第4页 共6页
单片机原理及应用——单片机人机接口设计
while(1) {
keydata=KeyInput(); switch(keydata) {
case CLEAR : keycount=0; //如果 keydata 是清零,就将 keydata 赋值为 0 break;
{
unsigned char keycount=0;
unsigned char keydata;
OSCXCN = 0x67;
Delay();
//等待系统晶振延时
while(!(OSCXCN&0x80)); //检查系统晶振是否稳定
OSCICN = 0x88;
//如果晶振稳定了,就启用外部晶振
WDTCN=0xDE;
设定显示字数组共16voiddelay延时函数调用相应函数获得按键的输入编写各个模块设置独立式按键定义端口进入主函数进行初始化设置通过对按键的扫描进行相应的加减清零计数将运算结果赋值给指定端口p5有按键输入
单片机原理及应用——单片机人机接口设计
一、实验目的 1. 掌握单片机简单人机交互接口电路的设计方法。 2. 进一步熟悉 C8051F020 单片机 I/O 口交叉开关设置和 I/O 端口的使用。 3. 掌握独立式按键和 LED 显示接口电路和程序设计方法。
keybuff=NO_KEY;
keydata=NO_KEY;
keydata=KeyScan();
//扫描输入
if(keydata!=NO_KEY)
{
keybuff=keydata;
第3页 共6页
单片机原理及应用——单片机人机接口设计
Delay(); keydata=KeyScan(); if(keybuff!=keydata) keydata=NO_KEY; } return(keydata); }
相关文档
最新文档