程序名称:5个IO口扫描10个按键
作 者:jumpmysoul
日 期:2009年5月22日
程序功能:用P1口的P00~P04实现10个按键的扫描,并将键值用一个数码管显示
proteus仿真电路如下:
#include
#define uchar unsigned char
#define uint unsigned int
#define SEG P0
uchar code tab[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x08};//共阳数码管段码
void delay1ms(uint);
uchar press_key();
void display();
/
uchar press_key()
{
uchar keyval;
P1=0xfe; //第一行送0
if(P1!=0xfe)
{
delay1ms(1);
if(P1!=0xfe)
{
if(P1==0xfc) //‘1’按下
keyval=1;
else if(P1==0xfa) // ‘2’按下
keyval=2;
else if(P1==0xf6) // ‘3’按下
keyval=3;
else if(P1==0xee) // ‘4’按下
keyval=4;
}
}
P1=0xfd; //第二行送0
if(P1!=0xfd)
{
delay1ms(1);
if(P1!=0xfd)
{
if(P1==0xf9) //‘5’按下
keyval=5;
else if(P1==0xf5) // ‘6’按下
keyval=6;
else if(P1==0xed) //‘7’按下
keyval=7;
}
}
P1=0xfb; //第三行送0
if(P1!=0xfb)
{
delay1ms(1);
if(P1!=0xfb)
{
if(P1==0xf3) // ‘8’按下
keyval=8;
else if(P1==0xeb) // ‘9’按下
keyval=9;
}
}
P1=0xf7; //第四行送0
if(P1!=0xf7)
{
delay1ms(1);
if(P1!=0xf7)
{
if(P1==0xe7) //‘10’按下
keyval=10;
}
}
return(keyval); //返回键值
}
/***************************************键值显示子函数*********************
//入口参数:无
//返回参数:无
//调用子函数:press_key()
//函数功能:将键值用数码管显示出来
//*********************************************************************************
void display()
{
uchar i;
i=press_key();
SEG=tab[i];
}
关键字:51单片机 C编程 IO口扫描
引用地址:
51单片机C编程(七、5个IO口扫描10个按键)
推荐阅读最新更新时间:2024-03-16 14:33
51单片机-闪烁的LED
延时是单片机入门必学的应用! 1.序 上一讲我们已经实现点亮一盏灯,但是很多时候程序的执行都是要死循环的,不能让程序像是停在那里不执行了。所以这一讲在前面的原理图基础上实现让LED2从点亮一段时间到熄灭一段时间再点亮一段时间如此循环下去,实现闪烁LED2的功能。 2.代码普及 我们知道CPU执行一条语句是很快的,如果我们这样写程序来实现灯的闪烁: #include reg52.h sbit LED2 = P0^0; sbit ADDR2 = P1^2; sbit ADDR1 = P1^1; sbit ADDR0 = P1^0; sbit ENLED = P1^4; sbit ADDR3 = P1^3;
[单片机]
7-基于51单片机的二氧化碳浓度检测报警系统仿真
具体实现功能 由STC89C52单片机+二氧化碳传感器+LCD1602液晶显示屏+按键+蜂鸣器+指示灯+电源构成。 具体功能: ①二氧化碳传感器测得二氧化碳数据后经过单片机处理,由LCD1602实时显示,第一行显示测得的浓度值,第二行显示报警阈值; ②可通过按键设置二氧化碳报警阈值; ③测得的甲醛浓度在正常范围时,绿灯亮,超过报警阈值时,红灯亮,蜂鸣器响,开始声光报警。 单片机介绍 51单片是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C51为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具
[单片机]
基于51单片机的OLED显示图片文字
一、前言 从性能来说OLED屏幕分辨率相对较高,引脚也少很多,占用的I/O口会少很多。从功耗来说首先oled显示屏不需要背光灯,当有电流通过时,这些有机材料就可以发光,而且3.3V~5V之间都可以使用。从外观来说体型更小,重量更轻更薄,可用来制作许多小型显示设备。这次我使用的是四个引脚的0.95寸oled显示屏,进行文字图片的循环显示。 二、OLED模块介绍 1、液晶显示屏 液晶显示器,为平面超薄的显示设备,它由一定数量的彩色或黑白像素组成,放置于光源或者反射面前方。液晶显示器功耗很低,因此倍受工程师青睐,适用于使用电池的电子设备。它的主要原理是以电流刺激液晶分子产生点、线、面配合背部灯管构成画面。 液晶显示器的工作原理:液晶
[单片机]
MCS51单片机的定时器/计数器概念 非常好的寄存器关系图
一、MCS-51单片机的定时器/计数器概念 单片机中的定时器和计数器其实是同一个物理的电子元件,只不过计数器记录的是单片机外部发生的事情(接受的是外部脉冲),而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件;MCS-51单片机的晶振经过12分频之后提供给单片机的只有1MHZ的稳定脉冲;晶振的频率是非常准确的,所以单片机的计数脉冲之间的时间间隔也是非常准确的,这个准确的时间间隔是1微秒; MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的工作频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令
[单片机]
采用VB软件与AT89S51单片机的温度测控系统设计
0 引言 在现代测控系统中,由于PC机具有强大的数据处理能力和良好的用户交互界面,单片机具有较强的现场抗干扰能力及良好的性价比,因此以PC机为上位机实施用户控制和以单片机为下位机进行实时数据采集的分布式智能化控制系统无疑具有很好的应用前景。本文中单片机实现了温度检测,具有较好的实时性;PC机完成了数据显示、存储及统计分析,绘制了实时温度曲线,并对系统目前所处状况做出了评判。两者之间以串行口进行通信联络。 l 数据采集系统的硬件基础 该系统的下位机选择Atreel公司的AT89S51单片机作为控制核心,负责采集现场温度值。温度传感器将温度转换为电压信号,经模/数转换器ADC0809转换成8位数字量,并经AT89S
[单片机]
51单片机+GSM_TC35接收短信并处理(第三层)
趁热打铁,完成了前面的第一层和第二层,到第三层有种水到渠成的感觉。与前面两层不同的是,第三层是将西门子TC35I_GSM模块作为接受终端来使用。但我手机发送指定的指令给GSM模块的SIM卡时,51单片机进行处理判断,执行相应操作。至此,我的GSM模块3层练就完成! GSM_receive.c //*********************************GSM接收终端 //2012-12-2 #include reg51.h #include string.h #define uchar unsigned char #define uint unsigned int #define Buf_Max 10
[单片机]
DDS技术的数控信号发生器51单片机控制程序
;***************************************************** ; 基于DDS技术的数控信号发生器控制程序 ; ; 正弦波1 Hz -10MHZ ; ; 单片机 STC12C5410AD ; ; AD9850 50MHZ 晶振 ; ;***************************************************** ;****************************************************
[单片机]
基于8051单片机和SJAl000芯片实现智能传感器网络的设计
前 言 随着自动化程度的提高和信息的网络化进程, 所需要的测控点和测控参量越来越多, 使得一个自动控制系统日益庞大而复杂。对于一个系统来说, 需要的传感器数目成倍增加。为了使各智能仪表与上位机能实时、高速、准确地通信, 选择较理想的现场总线则是很关键的。现场总线是开放型控制系统, 是用于现场总线仪表与控制室之间的一种全数字化、串行、双向、多站的通讯网络 。CAN 是其中很有发展前景的一种现场总线。在网络化的系统中, 每只传感器作为一个智能节点挂接在CAN 总线上, 整个系统如图1所示。 1、 CAN 总线的技术特点 a) CAN 通信速率为(5kB/s)/10km、(1MB/s)/40m ,其节点数可达110 个, 传输介质采
[单片机]