LED和键盘扫描驱动程序演示实验

led和键盘扫描驱动程序演示实验
一、实验目的
本程序展示了如何编写基于small rtos 的键盘和led扫描驱动程序。
二、实验设备及器件
pc 机 一台
dp-51proc 单片机综合仿真实验仪 一台
三、实验步骤
1. 短接a4 区的jp11,使用导线将a4 区的 /pl、clk1 和q7 脚分别跟a2 区的p15、
p16 和p17 连接起来。将a4 区的clk2 和ser 脚接gnd。
2. 短接a5 区的jp10,使用导线将a5 的clk 和dinb 分别跟a2 区的p10、p11 连
接起来。将a5 区的dina 和/clr 脚接vcc。
3. 将a4 区j98、a5 区j5 分别连接到d1 区的j52、j53。如下:
p0 ――― led1 q0 ―――- key1
p1 ――― led2 q1 ―――- key2
p2 ――― led3 q2 ―――- key3
p3 ――― led4 q3 ―――- key4
p4 ――― led5 q4 ―――- key5
p5 ――― led6 q5 ―――- key6
p6 ――― led7 q6 ―――- key7
p7 ――― led8 q7 ―――- key8
4. 下载led_key.hex 文件到dp-51proc 中并运行。
四、实验参考程序主要部分
/****************************************************************
** small rtos(51)
** the real-time kernel(for keil c51)
** (c) copyright 2002-2004
** all rights reserved
** v1.20
*******************************************************************/
#include config.h
uint8 key_buffer[2];
uint8 show_key;
void led_show();
void get_key();
void init(void)
{
tmod = (tmod & 0xf0) | 0x01;
th0 = (65536 - (11059200 / 12) / 100) / 256;
tl0 = (65536 - (11059200 / 12) / 100) % 256;
tr0 = 1;
et0 = 1;
tf0 = 0;
}
void init_port(void)
{
p1 = 0xff;
}
/*************************************
**函数名称:void kdtxdbyte(uint8 kddata)
**功能描述:驱动74hc164,串转并
***************************************/
void kdtxdbyte(uint8 kddata)
{
uint8 i;
i = 8;
do
{
kdclk = 1;
if((kddata & 0x80)==0)
{
kddat = 0;
}
else
{
kddat = 1;
}
kddata < 0; i--)
{
key = (key<<1)|keyin;
keyclk = 1;
keyclk = 0;
}
return key;
}
/********************************************************/
main()
{
osinit();
init();
init_port();
ostaskcreate(led_show , null , 0);
while(1)
{
pcon = pcon | 0x01; /* cpu 进入休眠状态 */
}
}
/****************************************************
**显示任务
**功能:显示按键的状态
****************************************************/
void led_show(void)
{
ostaskcreate(get_key , null , 1);
while(1)
{
kdtxdbyte(show_key);
oswait(k_tmo , 1);
}
}
/****************************************************
**键盘扫描任务
**功能:获取键盘按键值
****************************************************/
void get_key(void)
{
while(1)
{
key_buffer[0] = key_scan();
oswait(k_tmo , 1);
key_buffer[1] = key_scan();
if(key_buffer[0] == key_buffer[1])
{
show_key = key_buffer[0];
}
oswait(k_tmo , 1);
}
}
五、实验例程简析
本驱动程序创建了两个任务:显示任务和键盘扫描任务。创建方法如下:
ostaskcreate(led_show , null , 0);
ostaskcreate(get_key , null , 1);
显示任务的优先级比键盘扫描任务的要高。在键盘扫描任务中调用key_scan()函数
获取按键的状态,为了实现按键的去抖动,在两次获取按键状态的中间调用了系统函数
oswait( )来实现延时,从而达到按键去抖动效果。实际上cpu 并不是在执行循环程序来实
现延时,而是通过任务切换使显示任务运行。等待键盘扫描任务延时时间到,并且显示任务
进入延时等待状态(调用oswait( )函数)时,键盘扫描任务才得以继续运行。
运行本程序的效果是按下某个键,相应的led 管就会发亮。松开按键,led 管熄灭。
以上的程序是led 和键盘扫描驱动程序在small rtos51 中应用的部分源代码,完整的源代
码请参考配套光盘中相关例子。

INDEMIND:服务机器人的冰与火之歌,“真价值”回归商业本质
车载GPS定位器一般安装在车辆的什么位置
VR一体机的消费者越来越多 需求的数量日益增多
还在为丢数据发愁吗?OM302完美解决问题
三分钟带你了解射频发射站信号实时监测系统
LED和键盘扫描驱动程序演示实验
在智能家居应用中如何选择家庭自动化系统
小米9备货不足影响消费体验_官方发布延期开售
如何制作暖色调LED聚光灯
方便操作的恒温控制器设计
仿人型机器人控制系统设计的几个问题
涡轮流量计测量流量的原理_涡轮流量计流量范围
雷军重新定义现货,小米9放货两秒又售罄,有人加价900元转卖
车规级激光雷达将成为新一代中国智能汽车崛起的基石
复旦微MCU推出FM33FR0xx系列开发板
振动传感器在全球定位系统中的检测应用
为基于MCU的SPI式外设应用优势及设计
高度传感器获得合资品牌头部车企定点
WSTS并指出,明年(2019年)全球半导体市场虽预估将持续呈现增长
什么是电压驻波比和回波损耗