1、j+);void main(void)/主程序主程序 while(1)/非非0为真,此为无限循环为真,此为无限循环 LED1=0;LED2=1;LED3=1;delayms(1000);LED1=1;LED2=0;LED3=0;电阻电阻R,其计算公式如下:,其计算公式如下:为电源电压,为电源电压,取取5V5V;为发光二极管压降,取为发光二极管压降,取1.2V1.2V-1.8V1.8V;为驱动器压降为驱动器压降,取取0.3V-0.5V,0.3V-0.5V,本例未使用本例未使用驱动器驱动器;为发光二极管工作电流为发光二极管工作电流,取取8mA-20mA8mA-20mA。发光二极管工作电流,其值越大
2、,二极管越亮。为了提高亮度,可减少限流电阻。也可以选用驱为了提高亮度,可减少限流电阻。也可以选用驱动器件以提供更大的电流,常用的驱动器件有动器件以提供更大的电流,常用的驱动器件有动器件以提供更大的电流,常用的驱动器件有动器件以提供更大的电流,常用的驱动器件有74LS0674LS0674LS0674LS06、74LS0774LS0774LS0774LS07、小功率三极管等。、小功率三极管等。5.2.2 LED显示显示(Light-Emitting Diode)共阳极共阳极共阴极共阴极外形图外形图8段段LED字型码(段码)字型码(段码)“1”的段码(共阳极):的段码(共阳极):“F9H”dp g
3、f e d c b aP1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 1 1 1 1 1 0 0 1“5”的段码(共阴极):的段码(共阴极):“6DH”dp g f e d c b aP1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 0 1 1 0 1 1 0 1共阳极段码:共阳极段码:0 1 2 3 4 5 6 7 8 9 A b “黑黑”C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H,88H,83H,FFH共阴极段码:共阴极段码:3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7F
4、H,6FH,77H,7CH,00H静态静态LEDLED显示显示显示显示0000,每秒钟加,每秒钟加1 1,至,至9999,如此循环不止。,如此循环不止。P1P1、P3P3各接一个数码管:各接一个数码管:#include uchar code dispcode=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;void main(void)/主程序主程序 uchar num=0;while(1)P1=dispcodenum/10;P3=dispcodenum%10;num+;if(num=100)num=0;常用简
5、化缩写来定义数据类型:#define uchar unsigned char#define uint unsigned int图图5.9 两位两位LED数码管动态显示数码管动态显示动态动态LEDLED显示显示例:显示例:显示“86”86”#include sbit LED1=P27;/十位十位sbit LED0=P26;/个位个位uchar code dispcode=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 xff;void main(void)/主程序主程序 uchar num=86;LED11;LED0=0
6、;delayms(5);P1=dispcodenum%10;LED10;LED0=1;3 3 独立式键盘独立式键盘键盘处理程序任务键盘处理程序任务:*检查键盘是否有键被按下;检查键盘是否有键被按下;*确定被按键的键号确定被按键的键号,获取键号。获取键号。*硬件电路消除抖动或软件消除抖动。硬件电路消除抖动或软件消除抖动。按键抖动按键抖动 10ms10ms“1”“0”释放抖动释放抖动1010msms+5v稳定闭合稳定闭合1.1.独立式键盘电路独立式键盘电路延时等待延时等待10ms 仍有按键信号?仍有按键信号?Y 有按键信号?有按键信号?NYN键盘处理键盘处理 89c51 P1.0 P1.1 P1.
7、2/*-key.h头文件头文件功能:三独立键处理函数功能:三独立键处理函数-*/#ifndef _KEY_H_#define _KEY_H_#include#define uchar unsigned char#define UP 0 x01/定义键号定义键号#define DOWN 0 x02#define ENTER 0 x03sbit UP_key =P10;/键引脚,改正键引脚,改正sbit DOWN_key=P11;sbit ENTER_key=P12;/*-功能:毫秒延时函数功能:毫秒延时函数 参数:当晶振为参数:当晶振为11.0592MHz时,时,x为为ms数,数,误差为误差为1
8、6us;x1000为为1秒秒-*/void delayms(unsigned int x)uchar j;while(x-)for(j=0;功能:获取键号获取键号 返回:返回:key=键号键号1-3;key=0无键按下。无键按下。-*/uchar KeyscanNUM(void)uchar key=0;/key=0无键按下无键按下 UP_key=1;DOWN_key=1;ENTER_key=1;if(UP_key=0)delayms(10);if(UP_key=0)key=UP;else key=0;if(DOWN_key=0)delayms(10);if(DOWN_key=0)key=DOW
9、N;if(ENTER_key=0)delayms(10);if(ENTER_key=0)key=ENTER;return key;#endif#include key.h“sbit LED_RED =P32;/补充补充 sbit LED_YELLOW=P33;sbit LED_GREEN =P34;/键处理子函数键处理子函数 /功能:按功能:按UP键红灯亮,按键红灯亮,按ENTER键黄灯亮,键黄灯亮,/按按DOWN键绿灯亮,键绿灯亮,void KeyProc(uchar key)switch(key)case UP:LED_RED=0;LED_YELLOW=1;LED_GREEN=1;brea
10、k;case DOWN:LED_RED=1;LED_YELLOW=0;case ENTER:LED_GREEN=0;独立键处理演示程序独立键处理演示程序/*主程序主程序void main(void)uchar key;while(1)key=KeyscanNUM();if(key=UP|key=DOWN|key=ENTER)KeyProc(key);key=0;4 4行列式键盘模块行列式键盘模块独立式键盘只适合按键少的场合。独立式键盘只适合按键少的场合。按键较多时,常采用行列式键盘电路。行列式键盘的程序复杂,需采用键盘扫描技术。常用的键盘扫描方式有:扫描法、扫描法、反转法、反转法、状态矩阵法等
11、。状态矩阵法等。本节只介绍(线)反转法本节只介绍(线)反转法 Line-Reverse 原理如图原理如图5.125.12。反转法原理图反转法原理图反转法接线图反转法接线图 先从先从P1口的高口的高4位输出低电平(列),位输出低电平(列),低低4位输出高电平(行);位输出高电平(行);即即P1=0 x0f 0;从从P1口读取键盘状态:口读取键盘状态:低低4位中只要有一位出现位中只要有一位出现“0”,说明此行中有键按下。,说明此行中有键按下。各行有键按下的数值依次为各行有键按下的数值依次为 0EH 00001110 0DH 00001101 0BH 00001011 07H 00000111步骤步
12、骤1:再从再从P1口的低口的低4位输出低电平(行),位输出低电平(行),高高4位输出高电平(列);位输出高电平(列);即即P1=0 xf;高高4位中只要有一位出现位中只要有一位出现“0”,说明此行中有键按下。各列有键按下的数值依次为各列有键按下的数值依次为 E0H 1110 0000 D0H 1101 0000 B0H 1011 0000 70H 0111 0000 将两次读取的数值组合,得到将两次读取的数值组合,得到“键值的特征码键值的特征码”。步骤步骤2:步骤步骤3:/*-4x4KEY.h头文件头文件 功能:对功能:对4x4KEY.c函数的申明函数的申明 -*/#ifndef_4x4KEY
13、_H_#define_4x4KEY_H_#include#define uchar unsigned char#define Key_Port P1 /定义键盘接口定义键盘接口/*-检测按键函数检测按键函数 功能:消抖后判断是否真正有键按下功能:消抖后判断是否真正有键按下返回值:返回值:1有按键;有按键;0无按键无按键-*/uchar Key_Down(void);/*-获取键键号扫描函数获取键键号扫描函数 返回键号(返回键号(0 x000 x0f);无按键返回无按键返回0 xff;-*/uchar Key_Code(void);#endif/*-函数功能:函数功能:4x4KEY的驱动函数的驱动函数 -*/#include 4x4key.hvoid delayms(uint x)/省略省略 ./判断是否有键按下函数,为判断是否有键按下函数,为Key_Down服务的函数服务
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1