电子科学与技术单片机按键扫描数码管显示C语言程序按键扫描数码管显示程序共定义了6个键的功能:K1、K2、K3、K4以及K5、K8组成的一对复合键,其中K2,K3为连击键,K5为上档键。在正常工作模式下按K1则切换至状态,在...
电子科学与技术
单片机按键扫描数码管显示C语言程序
按键扫描数码管显示程序共定义了6个键的功能:K1、K2、K3、K4以及K5、K8组成的一对复合键,其中K2,K3为连击键,K5为上档键。在正常工作模式下按K1则切换至状态,在设定模式下按K1键循环选择4个数码管中的某个,被选中的数码管闪烁,此时单按K2键显示数值加1;常按K2显示数值以一定速度递增,同时数码管停止闪烁,当K2松开,数码管恢复闪烁,显示数值停留在K2松开前的值上。K3完成的功能和K2类似。其完成减操作。这2个键只有在设定状态才有效,可以有效防止误操作。K4为确认键,按下该键回到正常显示状态,所有指示灯熄灭,数码管显示刚刚设定的数值。K5+K8这对复合键执行复位操作,任何情况下同时按下K5和K8或先按下K5再按下K8,所有数码管的显示全为0,指示灯全灭,进入正常显示状态。同时程序还对如下几个异常操作进行了处理:
1. 2个或多个功能键同时按下
2. 一个功能键按下未释放,又按另一个功能键,然后再松开其中一个功能键
3. 先按下功能键再按下上档键
4. 多个上档键和一个功能键同时按下,此时不做处理。等到松开其他上档键,只剩下一个上
5. 档键和一个功能键时才执行这对复合键;或松开所有上档键,处理单一功能键。 /*******************************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
#define RCtrl 0x20 //定义上挡键 第5键
#define RConti 0xfe //定义连击键 第6键
#define N 2 //去抖年龄下限
#define MaxRate 50 //重复前的延迟值 600ms
#define MinRate 20 //重复速度 240ms
#define leddark 83 //闪烁时灭时间1s
#define ledshow 83 //闪烁时亮时间1s
#define decimal 0x80 //小数点的段数
#define KEY_DDR DDRC
#define KEY_PORTO PORTC
#define KEY_PORTI PINC
#define OUT 0x3f
#define IN 0xc0
#define KeyValue 0x3f
#define LEDD_DDR DDRB
#define LEDD_PORTO PORTB
up51s005 ---按键扫描程序 (C51,asm) up51s006 --- S51/52看门狗演示(C51,asm) up51s007 --- 24c01读写 (C51,asm) up51s008 --- 串行通迅 (C51) up51s009 --- LCD显示 (C51) up51s010 --- 计数器 (C51,asm)
原标题:51单片机按键扫描C程序大二上学期做过80 的按键程序,当时项目要求实现按键控制 屏显示并且接收GPRS传来的数据。当时为了节省成本,就去大西电子市场买来8*8的LED块,然后自己一点一点的拼接成128*16的。做...
原标题:51单片机按键扫描C程序
大二上学期做过80 的按键程序,当时项目要求实现按键控制 屏显示并且接收GPRS传来的数据。当时为了节省成本,就去大西电子市场买来8*8的LED块,然后自己一点一点的拼接成128*16的。做完之后虽然可以运行,但是很勉强,尤其是 程序没有下面这位哥写得简洁缜密,所以就贴过来,以后用到的时候直接研究:
unsigned char key,key_h,kpush;
unsigned int key_l;
//按键连接到p1.0、p1.1、p1.2
void int_t0(void) 1 {
unsigned char dd,i;
TL0=TL0+30;TH0=0xfb; //800
/* 按键判别 */
if ((P1&0x7)==0x7) {
if ((key_l>30)&&(key_l30)) { //释放按键,如果之前按键时间少于1秒,读入键值
key=kpush;
}
if ((++key_h)>200) key_h=200;
key_l=0;
if (key>=0x80) key=0; //如果之前的按键为1秒,清除键值
} else {
kpush=P1&0x7;
key_l++;
if ((key_l>800)&&(key_h>30)) { //如果按键超过1秒,键值加0x80标志键
key=kpush|0x80;
key_h=0;
key_l=0;
}
}
}
void main(void) {
TMOD=0x1;TR0=1;ET0=1;EA=1;
while (1) {
while (!key) {}
switch (key) {
case 1:break;
case 2:break;
}
}
}
责任编辑:
入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样基本实验:LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实验等单片机的定义分类和...
希望对大家有帮助!!!
入门有针对性的解决一些简单的实际问题,边理论边实践学一样会一样
基本实验:LED流水灯,数码管显示,键盘控制,音乐播放,继电器控制I2C通信实验,串口通信实验,红外线遥控信号解码实验等
单片机的定义分类和内部组成
1单片机就是中央处理器CPU,随机存储器RAM。只读存储器ROM。定时、计数器和各种输入输出接口I/o接口电路等部件集成在一块电路芯片上的微型计算机。
2,1分类按制造工艺分:HMOS和CHMOS CHMOS包括80c51等中间加了C功耗要小
适合便携式手提式和野外作业。
2分类按不同容量的存储器配置分:51子系列和52子系列
51表示单片机最后一位数字为1作为标志。片内带有4KbROM或EPROM(Erasable Programmable ROM,可擦除可编程ROM,128BRAM,两个16位定时器/计数器和5个中段器52系列是增强型各项指标都高。
AT89S51是AT89C51的升级版支持ISP在线更新程序ISP(Internet Service Provider
内部集成看门狗计时器等。
3.1串行接口就是接口数据传送
3.2中断控制系统接收中断请求如定时时间到,需要鸣笛报警类似stop to do停下来去执行ROM中特定的每段程序,执行完后再继续执行先前中断的程序
时钟电路控制节拍工作。
一个典型的单片机应用系统包括输入电路,单片机,输出电路
把他想象成电脑。
单片机的应用:
p5
十六进制A10B11C12D13E14F15
记A10和D13点得13点F15不是F16
十六进制加H
逻辑数据的运算
逻辑与。。。两个输入一个输出中间加一个恒定5v电压
有0为0,全1出1
逻辑或有1为1,全0出0;
字长通常与计算机内部的寄存器和运算器数据总线的宽度一致
实例1功能感受protues仿真单片机播放《渴望》主题曲
运用protues打开仿真原理图。
对单片机进行处理编辑edit component,选取目标文件hex
Clock frequency 时钟频率
Ok
原理图编辑窗口没有滚动条,可通过预览窗口该表原理图的可视范围。
Protues双击右键删除
先单击鼠标右键,可通过鼠标左键可以编辑元器件的属性
鼠标右键来删除画错的连线
中键缩放原理图
新建即保存新建设计文件
Junction dot mode连接点
Subcircuit mode 子电路 lab用总线时会用到
Terminals mode 终端接口,有VCC地输出输入等接口
Device pins mode 器件引脚用于绘制各种引脚。
Graph mode 仿真图表,用于各种分析,如noise analysis
Tape recordermode录音机
Generator mode 信号发生器
Voltage probe mode 电压探针仿真图表用
Current probe mode 电流探针仿真图表用
Virtual instruments mode虚拟仪表有示波器可显示工作波形
Resistors 电阻
Capacitors电容
Crystal晶振
Radianl electrolytic圆柱形电解电容
Keywords输入resistors 470r或功率先选择元器件后放元器件
Led+yellow
Drag object 拖动对象
Editi properties 编辑属性
Rotate clockwise 顺时针旋转90°
Rotate anti-clockwise 逆时针旋转90°
X-mirror 水平翻转
Y-mirror 垂直翻转
删可以右键双击
双击鼠标左键编辑label
放置电源和地必须编辑正确的label如VCC地GND
各元器件引脚通过总线的连接并不表示真正意义上的电气连接,需要添加网络标号。
要运行双击单片机
基本
电源5V
振荡电路:单片机是一种时序电路,必须施加脉冲信号才能工作。在它的内部有一个时钟产生电路,只要接上两个电容和一个晶振即可正常工作。P30
复位电路;启动后让单片机从初始状态开始执行程序。
EA一横:接正电源端,表示使用内部程序存储器。
注意:观察仿真效果时,晶振电路,复位电路和EA引脚和电路的连接可以省略。
Keil软件源程序后缀。C必须手工输入,表示为c语言程序,让keilc51采用对应的c语言的方式来编译源程序。
#include包含51单片机寄存器定义的头文件
将新建的源程序文件加载到项目管理器右击source group文件add c文件
单片机不能处理c,必须将c转换成二进制或十六进制代码,汇编或编译。
用鼠标右键点击target 进入options fortarget确认output选项中create hex
file:///Z:\TEMP\msohtmlclip1\01\clip_image002.jpg重新构造所有目标
程序烧录器及烧录软件的使用
单片机软硬件系统仿真成功后,要真正投入实际应用,必须将程序烧写入单片机芯片,A51程序烧录器和
先将COM接口(用作数据通信)与计算机的COM接口(RS-232)连接好,然后将单片机安插在烧录器的插座中,再用一根USB线将USB接口与计算机的USB接口连接,让计算机通过这根USB线向烧录器提供+5V电源
使用烧录器前,手动设置一些,参数标签页,根据COM口,设置好串口,波特率设置为28800;
点击自动擦除器件命令,点击打开文件命令选择单片机文件十六进制文件hex 再点击打开点击自动写器件。
实例4用单片机控制一个灯闪烁
Led灯亮存在电压差和正向偏置
延迟函数
Void main(void)// 两个void分别表示无须返回值和没有参数传递
{
Unsignedint i;//定义无符号整数,最大65535
For(i=0;i