//键盘扫描处理,无按键返回0,有按键返回键值,键值对应于keycode[]下标值。8条(以P2为例)口线24按键
//键盘码也可定义为局部数组变量
unsigned char code keycode[]=
{0x00,0xee,0xde,0xbe,0xed,0xdd,0xbd,0xeb,0xdb,0xbb,0xd7,0xe7,0xb7,0x7b,0x7d,0x7e,0x77,
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0x7f,0xbf};
unsigned char keyread(void)
{ unsigned char i,j,x,k1,k2;
P2=0xff;
if(P2!=0xff)
{k1=P2;
delay();
P2=0xff;
if(P2!=0xff)
{for(P2=0xff;P2!=0xff;P2=0xff)
x=k1;}
}
else{x=0;
}
//以上判断接地按键
//以下判断交叉按键(反转法)
if(x==0)
{P2=0x0f;
if(P2!=0x0f)
{delay();
P2=0x0f;
if(P2!=0x0f)
{k1=P2;
P2=0xf0;
if(P2!=0xf0)
{k2=P2;
for(P2=0xf0;P2!=0xf0;P2=0xf0)
x=k1^k2;}
}
}
else{x=0;} }
if(x==0){i=0;}
else{i=j=0xff;
do{i++;j++;
if(keycode[i]==x){j=24;}
else if(j==24){i=0;}else{;} }
while(j!=24);}
return(i);
}
void delay()//延时
{ unsigned char b;
for (b=0;b<=0xff;b++)
{
for (b=0;b<=0xff;b++)
{;}
}
}
关键字:8条口线 24按键 C51
引用地址:
8条口线24按键的C51源程序
推荐阅读最新更新时间:2024-03-16 15:17
一种基于C51单片机的非抢占式的操作系统架构
摘 要:从Keil C51的内存空间管理方式入手,着重讨论实时操作系统在任务调度时的重入问题,分析一些解决重入的基本方式与方法:分析实时操作系统任务调度的占先性,提出非占先的任务调度是能更适合于Keil C51的一种调度方式。为此,构造这一实时操作系统,并有针对性地介绍此系统的堆管理方法、任务的建立以厦任务的切换等。 关键词:51单片机 实时操作系统 任务重八调度 目前,大多数的产品开发是在基于一些小容量的单片机上进行的。51系列单片机,是我国目前使用最多的单片机系列之一,有非常广大的应用环境与前景,多年来的资源积累,使51系列单片机仍是许多开发者的首选。针对这种情况,近几年涌现出许多基于51内核的扩展芯片,功能越来越齐全,速
[单片机]
Keil C51编译及连接技术
主要介绍Keil C51的预处理方法如宏定义、常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现。 教学目标 1.了解Keil C51的预处理方法,主要有宏定义#define、常用的预处理指令#define、#error、#if 、#else、#elif、#endif、#ifdef、#ifndef 、#undef 、#line 、#pragma 及文件包含指令#include。 2.了解small、compact、large三种编译模式信代码优化方法。 3. 掌握C51模块内部调用汇编程序的三种方法,理解C51模块与汇编模
[单片机]
C51编程7-数码管(工作原理1)
如果将单片机的比喻计算的主机,而按键相当于电脑的输入设备(键盘或者鼠标),那么LED灯可以作为输出设备的显示器;如果8位数据,使用8个LED显示数据表示,相当于是以二进制显示数据,非常不利于阅读。 为了追求成本低,便于阅读,人们生产出数码管,通过控制数码管直接显示对应的数字,如下图所示。 共阴数码管与共阳数码管 数码管实际上是8段LED组成(7段LED+1个圆圈),LED的接线有两种方式,第一种将LED负极接在一起,称为共阴数码管,图1;第二种将正极接在一起,称为共阳数码管,图2。 图1 图2 从上两图可以看出,共阴数码管通过给正极高电平可以导通LED,而共阳数码管通过给负极低电平可以导通点亮LED。
[单片机]
深入理解C51对标准ANSIC的扩展
深入理解并应用C51对标准ANSIC的扩展是学习C51的关键之一。因为大多数扩展功能都是直接针对8051系列CPU硬件的。大致有以下8类: 8051存储类型及存储区域 存储模式 存储器类型声明 变量类型声明 位变量与位寻址 特殊功能寄存器(SFR) C51指针 函数属性 具体说明如下(8031为缺省CPU)。 第一节 Keil C51扩展关键字 C51 V4.0版本有以下扩展关键字(共19个): _at_ idata sfr16 alien interrupt small bdata large _task_ Code bit pdata using reentrant xdata compact sbi
[单片机]
C51单片机的3*3矩阵键盘程序
#include reg51.h #include dis.h /**延时1**/ //用于消抖 void delay1(void) {uchar i; for(i=0;i 200;i++); } /****延时2**********/ void delay2(void) { uchar i,j,s; for(i=250;i 0;i--) for(j=250;j 0;j--) for(s=5;s 0;s--); } /****串口初使化****/ void chuankou_init(void) { TMOD=0X20; //定时器1,方式2,8位 计数器 SCON=0x40; //方式1,而不允许
[单片机]
课程设计:矩阵键盘扫描显示(c51反转法)
//矩阵键盘扫描程序 //采用翻转识别法(相对代码少一些) #include reg52.h #define uchar unsigned char #define uint unsigned int uchar key=0; //共阳数码管编码如下(0-15) uchar code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //函数声明 void display(uchar Duan_value); void delay(uchar t); void
[单片机]
Keil C51使用教程---软件使用详解(二)
第一节 Keil C51编译器的控制指令 C51编译器的控制指令分为三类:源文件控制类,目标文件控制类及列表控制类。 1. 源文件控制类 NOEXTEND:C51源文件不允许使用ANSI C扩展功能。 DEFINE(DF):定义预处理(在C51命令行)。 2. 目标文件(Object)控制类: COMPACT LARGE SMALL 选编译模式 DEBUG(DB) 包含调试信息,以供仿真器或dSCope51使用。 NOAMAKE(NOAM) 禁止AutoMake信息记录 NOREGPARMS 禁止用寄存器传递参数 OBJECTEXTEND(OE) Object文件包含附加变量类型信息 OPTIMIZE(OT) 指定优化
[单片机]
C51单片机和电脑串口通信电路图与源码
C51单片机和电脑串口通信电路图与源码 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如电脑的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,我们采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。我们采用了三线制连接串口,也就是说和电脑的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对我们来说已经足够使用了,电路如下图所示,MAX232的第10脚和单片机的11脚连接,第9脚和单
[单片机]