第一范文网 - 专业文章范例文档资料分享平台

实验二

来源:用户分享 时间:2025/10/13 11:56:24 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

2.1.3 键盘控制实现流水灯原理

本实验中采用键盘扫描子函数,函数返回值则是按键的编号。通过返回的键值即可跳到不同流水灯的模式。

下面用一个例子对控制方法进行说明。实现按下 BlueSkyC51 开发板上任意一个按键都会令与P0.0 相连的 LED0 状态翻转,即亮变灭或灭变亮。main.c程序如下: #include #include

#define uchar unsigned char #define uint unsigned int sbit LED0 = P0^0;

void Delay_ms(uint time) {

uinti,j;

for(i = 0;i

void main() {

uchar key; while(1) {

key = Key_Scan();

//在 while(1)里面不断循环执行按键扫描程序Key_Scan(),Key_Scan()不断 将按键的返回值赋给变量 key

if(key != 0) //key!=0 说明有按键被按下 {

LED0 = !LED0; } } }

程序中加粗的那部分,由key = Key_Scan()读出键值,由if语句进行判断,即可实现不同流水灯功能。

2.2 键盘控制LED灯程序(关键程序逐条加注释)

做出了两种流水灯的控制模式,如下: 2.2.1 程序一

实现按下 BlueSkyC51 开发板上任意一个按键都会令与P0.0 相连的 LED灯由上至下,依次点亮一个,进行循环。程序如下:

使用键盘扫描,从LED0开始,按下任意键使灯左移。 #include #include #include

#define uchar unsigned char #define uint unsigned int

#define LED_PORT P0 //定义跑马灯连接的端口 sbit LED0 = P0^0;

voidDelay_ms(uint time) {

uinti,j;

for(i = 0;i

void main() {

uchar key;

uchar temp = 0xFE; while(1) {

LED_PORT = temp;

key = Key_Scan();//在 while(1)里面不断循环执行按键扫描程序Key_Scan() if(key != 0) //key!=0 说明有按键被按下 {

temp=_crol_(temp,1); //循环左移一位 } } }

2.2.2 程序2

按下键值为1,2,3,则分别实现上述2.1.2中三种流水灯的运行。每一次按下键值进入一种流水灯后,需要先复位才可按下其他键值实现另一种流水灯。程序如下:

#include #include #include

#define uchar unsigned char #define uint unsigned int

#define LED_PORT P0 //定义流水灯连接的端口

voiddelay_ms(uint time) {

uinti,j;

for(i = 0;i

void main() {

uchar key;

while(1) //一直循环 {

key = Key_Scan();//在 while(1)里面不断循环执行按键扫描程序 if(key==1) {

uchar temp = 0xFE; while(key==1) {

LED_PORT = temp;

Delay_ms(500);//延时 0.5s

temp=_crol_(temp,1); //循环左移一位 } }

else if(key==2) {

uchar temp = 0x80; while(key==2) {

LED_PORT = temp;

Delay_ms(500);//延时 0.5s

temp=_cror_(temp,1); //循环左移一位 } }

else if(key==3) {

while(1) {

uchar temp = 0x01; uchari;

for(i=0; i<8; i++) {

LED_PORT=~temp; // temp中的数据取反后送P1口 delay_ms(500); // 延时 temp=temp<<1; // temp 中数据左移一位 }

temp=0x80; // 赋右移初值给temp for(i=0; i<8; i++) {

LED_PORT=~temp; // temp中的数据取反后送P1口 delay_ms(500); ; // 延时 temp=temp>>1; // temp 中数据右移一位 } } } else {

uchar temp = 0xff; LED_PORT = temp; } } }

该程序是用if语句对键值进行筛选,也可以使用switch语句,相关程序在附录中给出。

三、实验步骤及调试过程

1、C51语言程序的编写与调试

依照手册上的例子及课件上的例题,对相关程序进行了理解,编写了键盘控制流水灯的程序(实验原理2.2中已给出)。

打开keil软件,经过新建工程等操作,开始程序的编译。编译过程中,遇到一些问题,并将其解决,直至编译成功。现将问题总结如下: 1.1 调试程序一

问题(1):程序直接复制的不完全手册上的,对对程序进行说明的”//”后面的话写在复制时部分文字跳到了下一行,被认为是程序中的语句,导致程序调试时显示错误 解决:删除空行。修改 // 后面的说明性的文字,使其不在程序中出现。 1.2 调试程序二

问题(1):调试时,显示 TEXT2.C(23): 警告 C206: '_crol_': missing function-prototype

解决:利用循环左移函数_crol_()。它是在intrin.h头文件中定义的一个函数,因此要调用此函数必须先把intrins.h头文件包含进去,该指令是:#include,把头文件包含进去后就可以在程序中调用函数_crol_()了 问题(2):错误 C141: syntax error near 'unsigned'

搜索更多关于: 实验二 的文档
实验二.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c34lbm0vz418xzko02xoc4ddq3430jm00yc3_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top