按键扫描程序
上电时, 点亮P00口LED
按下K1时, LED向右移一位
按下K2时, LED向左移一位
#include
#include
unsigned char scan_key();
void proc_key(unsigned char key_v);
void delayms(unsigned char ms);
sbit K1 = P1^4;
sbit K2 = P1^5;
main()
{
unsigned char key_s,key_v;
key_v = 0x03;
P0 = 0xfe;
while(1)
{
key_s = scan_key();
if(key_s != key_v)
{
delayms(10);
key_s = scan_key();
if(key_s != key_v)
{
key_v = key_s;
proc_key(key_v);
}
}
}
}
unsigned char scan_key()
{
unsigned char key_s;
key_s = 0x00;
key_s |= K2;
key_s <= 1;
key_s |= K1;
return key_s;
}
void proc_key(unsigned char key_v)
{
if((key_v & 0x01) == 0)
{
P0 = _cror_(P0,1);
}
else if((key_v & 0x02) == 0)
{
P0 = _crol_(P0, 1);
}
}
void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i 120; i++);
}
}
关键字:51单片机 键盘扫描 程序讲解
引用地址:
51单片机之键盘扫描方式程序讲解
推荐阅读最新更新时间:2024-03-16 14:30
关于51单片机使用printf进行串口调试的方法
//关于51单片机使用printf进行串口调试 //重定义代码,可以使用printf给串口发送数据 char putchar(char c) { ES=0;//关串口中断 TI=0;//清除标志位 SBUF=c;//发送数据 while(!TI);//等待数据发送 TI=0;//清除标致位 ES=1;//开串口中断 return c; }
[单片机]
51单片机系列——单总线通信方式——DS18B20温度检测的设计
这个电路仿真的原理是因为:根据普中科技上的编程(一模一样),但用proteus7.8仿真的时候却仿真不出来,经过小编的一段时间的思考解决了用软件仿真DS18B20温度检测的电路。我先讲仿真电路图与源码分享给大家。 仿真电路图: temp.h //温度检测模块头文件 #ifndef __TEMP_H_ #define __TEMP_H_ #include reg52.h //---重定义关键词---// #ifndef uchar #define uchar unsigned char #endif #ifndef uint #define uint unsigned int #endif //--定义使用
[单片机]
基于C51单片机的家庭防盗报警系统
从实际出发,设计一种家庭用、与电话线连接、操作简单、工作稳定可靠的远程智能防盗报警装置。当人们外出时,往往希望实施自动监测报警以使家庭财产免受损失。针对这一需求,研制出了一系列自动报警系统,如门磁式、触摸式和红外线监测自动报警系统等。本文将介绍的远程智能防盗报警装置,可同时监视多个重要点(如门、窗等),发现盗情及时拨叫号码,并能利用普通电话线进行告警信号呼叫,其性能稳定可靠,实用性、适用性强,且具有较高的灵活性。 基本工作原理 如图1所示,远程智能防盗报警装置由信号检测电路、复位电路、电话号码输入电路、89C51单片机、语音电路、模拟摘机挂机电路、DTMF编码发送电路、铃流信号检测电路和忙音信号检测电路等
[单片机]
51单片机测量脉冲周期
要求:测量脉冲的周期 思想:用定时器和外部中断(下降沿触发中断),当第一个下降沿时,触发外部中断,此时开始计时。当第二个下降沿时,此时停止计时,此时的时间就是脉冲的周期。 程序: #include reg51.h #include intrins.h #define uLint unsigned long int uLint cycle_t = 0 ;//脉冲周期时间 sbit in = P3^2 ; bit start = 0 ; void Int0 (void) interrupt 0 { if(start == 0)//第一次下降沿开始计时 { cycle_t = 0 ; TL0 = 0 ; }
[单片机]
一种基于51单片机的多任务机制及应用
引言 传统的单片机程序一般采用单任务机制,单任务系统具有简单直观、易于控制的优点。然而由于程序只能按顺序依次执行,缺乏灵活性,只能使用中断函数实时地处理一些较短的任务,在较复杂的应用中使用极为不便。嵌入式多任务操作系统的出现解决了这个问题。在多任务系统中,可以同时执行多个并行任务,任务之间可以相互跳转。但是嵌入式操作系统在提供强大功能的同时,也带来了代码量大、结构复杂、对硬件要求较高、开发难度大且成本高等问题。而很多时候只需要实现简单的多任务操作就可以满足实际需要,本文设计的这种简单的多任务机制,在只增加极少量C语言代码的前提下,不需使用汇编,无需对原本的程序进行大改动,就可以实现多任务操作。 实时操作系统RTOS的
[单片机]
【自学51单片机】9 -- 步进电机原理、蜂鸣器原理,单片机IO
【自学51单片机】9 -- 步进电机原理、蜂鸣器原理,单片机IO口的结构,上下拉电阻 1、单片机IO口的结构 单片机IO口有四种结构:准双向IO,开漏输出、强推挽输出和高阻态输出。内部结构如下图。 T1和T2为MOS管,靠电压导通的原件。(1)准双向IO口特点:内部输出为1,才能正常读取外部信号。(2)开漏输出特点:必须外加上拉电阻,不然单片机IO电平是个不确定的态。(3)强推挽输出特点:可输出或输入高电流,驱动能力强。(4)强阻态特点:状态取决与外部输入。 标准51单片机P0默认开漏输出。 2、上下拉电阻 上下拉电阻:上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻也起限流作用,下拉电阻同理。 上拉电
[单片机]
51单片机教程第3讲-控制引脚
在51单片机教程第1讲中,我已经说过,学单片机就是两个内容,一个是学习控制单片机引脚,一个是学习单片机内部寄存器的配置。这一讲,来学习如何控制51单片机的引脚。 控制单片机的引脚,分为两个知识点,一个是怎么让引脚单片机输出高低电平,一个是怎么检测接入到引脚上的电平是高还是低。我们有时候会听到这样的话:“此单片机有几个IO口?”这里说的IO口,就是输入(input)输出(output)接口。一般情况下,单片机的引脚当中,除了电源引脚和晶振引脚,其它的都是IO口。当我们控制单片机的引脚高低时,我们把引脚当做输出引脚;当我们需要检测连接到单片机引脚上的电平时,我们把引脚当做输入引脚使用。 使引脚P1.5输出高电平,可以这样写: P1=0
[单片机]
TMS320VC5402与51单片机的接口设计
TMS320VC5402(VC5402)是德州仪器公司推出的具有较高性价比的定点数字信号处理器。VC5402增强外设由软件等待状态发生器、锁相环时钟发生器、6通道直接存储器访问(DMA)控制器、增强型8位并行主机接口(HPI)等组成。两个可编程的多通道缓冲串口(McBSP)能够全双工、快速地与其他同步串口进行数据交换,硬件连接简单,串口的工作模式和传送数据的格式可通过编程实现。DSP和单片机之间的通信一般利用双口RAM,通过串口或DSP的HPI接口实现。 利用双口RAM实现 CY7C026是CYPRESS公司生产的16k×16B高速双口静态RAM,存取速度小于25ns。他具有真正的双端口,可以同时进行数据存取,两个端
[嵌入式]