按键控制移位显示
来源:互联网 发布:linux怎么写shell脚本 编辑:程序博客网 时间:2024/05/22 17:43
应邀写个“按键移位”的程序。
要求使用4×4矩阵键盘,数码显示器。键盘接在P1,数码显示器接在P0、P2口。
电路、以及运行后的显示效果如下:
插图链接:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/album/item/0827e94dde7e2ba3d62afcca.html#
插图链接:http://xiangce.baidu.com/picture/detail/f13851b8e95c7608774aa47fc8a754749636421f
C语言的控制程序如下:
//=======================================================
#include <AT89X51.H>
char disp_buff [] ={0, 0, 0, 0, 0, 0, 0, 0};//显示缓冲单元
//-------------------------------------------------------
delay1ms(unsigned int t) //1ms延时函数
{
unsigned int i, j;
for(i = 0; i < t; i++) for(j = 0; j < 120; j++);
}
//-------------------------------------------------------
void display(void) //显示函数
{
char code table[] = { //共阴数码管的段码
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};
char code wei[] = {128, 64, 32, 16, 8, 4, 2, 1};//位选代码
char i;
for (i = 0; i < 8; i++) {
P2 = 0; //先消隐
P0 = ~table[disp_buff [i]]; //取反,用于共阳数码管
P2 = wei[i];
delay1ms(2);
}
}
//-------------------------------------------------------
unsigned char keyboard(void) //扫描键盘函数
{
char i, j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
for(j = 0; j < 4; j++) { //循环扫描四行
P1 = Buffer[j]; //在高四位分别输出一个低电平
temp = 0x01; //计划先判断第0位
for(i = 0; i < 4; i++) { //循环扫描四列
if(!(P1 & temp)) //从低四位,截取1位
return (i + j * 4); //如果为0就返回按键值
temp <<= 1; //判断的位,左移一位
} }
return 16; //判断结束,没有键按下,返回16
} //呵呵,实质性的语句不过8行,就是这么简练!
//-------------------------------------------------------
void main(void)
{
unsigned char i, key;
while(1) { //无限循环
display(); //显示一遍
key = keyboard(); //读出一遍键盘
if (key < 16) { //如果有人按键
//--------------------进行按键处理
disp_buff [7] = disp_buff [6];
disp_buff [6] = disp_buff [5];
disp_buff [5] = disp_buff [4];
disp_buff [4] = disp_buff [3];
disp_buff [3] = disp_buff [2];
disp_buff [2] = disp_buff [1];
disp_buff [1] = disp_buff [0];
disp_buff [0] = key;
//--------------------处理结束,去等待按键释放
for (i = 0; i < 20; i++) display();//稍稍延时
while(key < 16) { //等待按键释放
key = keyboard(); //再读
display(); //别忘了显示
} } } //无限循环
}
//=======================================================
题目来自《百度知道》,利用QQ进行的交流,最终,求知者得到了满意的结果。
- 按键控制移位显示
- avrstudio 5 按键控制led移位
- 按键控制数码管显示
- 按键控制数码管显示
- 按键控制显示
- 按键控制显示LED亮度
- 按键控制电机显示速度
- 按键控制单个数码管显示
- 并行口实现数字0~9、A~F、L、U、P、n总共19个键盘,将按键的结果用7段数码管(例如:7SEG-MPX-CA-BLUE)显示(可选——按键控制移位)出来
- 外中断(按键)控制数码管显示
- LED显示按键控制 CT1642、PT6964(1)
- 控制虚拟按键的显示与隐藏
- DAC按键控制加减LCD显示
- 用遥控器控制LCD显示按键数值
- ubuntu下按键移位
- AVRmeg16单片机实现按键控制LCD1602的数据显示
- 4*4矩阵按键控制数码管显示0-F
- 按键控制led
- 用C语言编写程序,判断输入的一个字符串是否是回数
- 数据键入与排序程序--80x86汇编语言
- 数码管动态显示 汇编 60进制
- 基于51单片机的交通灯C语言程序设计
- 51单片机利用74HC595驱动数码管
- 按键控制移位显示
- 用汇编语言编写查表程序
- #UML#UML类图
- 关于51单片机外部中断的触发方式
- 51单片机的4×4键盘识别与74LS164驱动数码显示
- 智能交通灯
- 利用单片机控制频率合成器 MC145151-2 的输出频率
- 用80x86汇编语言读写系统时间
- 用80x86汇编语言编程:输入后反序显示