P1 接 8 个独立按键,P2 接 8 个 LED,要求用按键控制 LED 的发光状态
来源:互联网 发布:mac的桌面 编辑:程序博客网 时间:2024/05/01 07:46
/*
P1.0~P1.5 接的 6 个按键,分别对应控制 P2.0~P2^5 所接的 6 个 LED。
按一下 P1.0 的按键,P2.0 接的 LED 就长亮,重复按一下,LED 就熄灭;
这 6 路都如此控制。
P1.6 和 P1.7 的按键控制对应的 P2.6 和 P2.7 所接的 2 个 LED。
但是要求输出是 100ms 交替闪烁的信号。
按一下 P1.6 的按键,P2.6 接的 LED 就以100ms的间隔闪烁,重复按一下,LED 就熄灭;
P1.7 与 P2.7 的控制关系也是如此。
下列程序已经调试通过,可以满足上述要求。
仿真截屏如下:
图片链接:http://xiangce.baidu.com/picture/detail/93d80b5bd9e3be333f45174afb0e9eee071f831c
*/
#include <AT89X51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
//-----------------------------------------------------------
uchar aa, bb, cc, dd; //设定变量.
//-----------------------------------------------------------
void delay(uint ms)
{
uchar t;
while(ms--) for(t = 0; t < 123; t++);
}
//-----------------------------------------------------------
void main(void)
{
TMOD = 0x01; // T0定时方式1
TL0 = (65536 - 50000) % 256; //50ms@12MHz
TH0 = (65536 - 50000) / 256;
TR0 = 1; //启动定时器0
IE = 0x82; //中断允许.
bb = 0x3f;
cc = 0;
while(1) {
aa = P1; //读入按键.
if (aa < 255) { //如果有按下.
delay(10); //延时消抖.
aa = P1; //再读.
if (aa < 255) { //如果仍然按下.
if (aa == 255 - 1) bb ^= 1; //根据按键,分别处理.
if (aa == 255 - 2) bb ^= 2; //这里也可以使用 case 语句.
if (aa == 255 - 4) bb ^= 4;
if (aa == 255 - 8) bb ^= 8;
if (aa == 255 - 16) bb ^= 16;
if (aa == 255 - 32) bb ^= 32;
if (aa == 255 - 64) bb ^= 64;
if (aa == 255 - 128) bb ^= 128;
P2 = (cc & 0xc0) + (bb & 0x3f);//输出.
while(aa < 255) aa = P1; //等待按键松开.
} } }
}
//-----------------------------------------------------------
void T0_INT() interrupt 1
{
TL0 = (65536 - 50000) % 256; //50ms@12MHz
TH0 = (65536 - 50000) / 256;
dd++;
dd %= 4; //4,代表200ms
if (dd == 0) { //如果时间到了.
if ((bb & 64) == 64) cc ^= 64; //按照指定位取反.
else cc |= 64; //关闭指定位.
if ((bb & 128) == 128) cc ^= 128;
else cc |= 128; //关闭指定位.
P2 = (cc & 0xc0) + (bb & 0x3f); //输出.
}
}
//-----------------------------------------------------------
//提问者对于答案的评价:程序很好,因为有了你的无私帮助,让我们这些菜鸟更快的融入单片机世界,感谢。
//原题网址:http://zhidao.baidu.com/question/287237680.html
- P1 接 8 个独立按键,P2 接 8 个 LED,要求用按键控制 LED 的发光状态
- 8个独立按键控制LED
- P1口外接8个LED,通过按键控制,实现左右移动的流水灯
- 51 汇编语言编程:8个按键控制8个LED
- 51 汇编语言编程:8个按键控制8个LED
- 8051汇编 8个按键分别控制8个LED
- 独立按键控制led灯
- 简单的按键控制LED
- S3C2440 用按键控制LED
- 中断——按键控制LED状态
- 4个按键控制51单片机上的4个LED灯
- 按键控制led
- 按键控制led驱动
- 按键控制led驱动
- 按键控制led应用程序
- 按键控制LED
- ARM按键控制LED
- 按键控制led亮灭
- 晒晒新买的“百度旋转音箱”
- 比较两个无符号数的大小
- jQuery/Json/Ajax基础知识
- 驱动大尺寸数码管的方法与电路
- linux下清除svn账号和密码
- P1 接 8 个独立按键,P2 接 8 个 LED,要求用按键控制 LED 的发光状态
- 设计一个显示ASCII码的程序
- 统计一个字符串中某个字母的个数
- LA2678
- C语言编程:8051单片机系统的时钟为11.0592MHz,把0~99从串行口输出
- 四个按键控制四个数字递增
- VS2015 ERROR
- 用C语言按照冒泡法进行数字排序
- C++ STL--stack/queue 的使用方法