-
用
C
语言编写程序实现通过按键使
LED
灯周期闪烁
(2010-02-24
21:12:44)
标签:循环闪烁周期
led
灯按键杂谈
一、设计题目
二、程序功能:
< br>开机复位后,
LED0
到
LED
7
全部点亮,所有
LEDPort
持续
2S
后熄灭,然后等待按键,按
0
p>
键
LED7
以
0.
8S
周期闪烁,按
1
键
LEDPort
以
1S
周期闪
烁。
三、总体设计思想
用中断方式实现定时器的定时,
然后通过键盘中断程序实现通过对按键的操作来
实现相应的
周期闪烁。
在我编写的实验程序中我用到了定时器中断和外部中断。
程序共分为两个模
块,
一个为定时
器模块,一个为键盘中断程序模块,在主函数中
,首先实现所有
LEDPort
点亮,然后通过
中断方式实现定时
2S
,在定时器
num==20
时,设定全局变量为标志位
flag=1,
然后再主
函数中设定条件,通过标志位的变化实现所有
LEDPort
持续
2S
后熄灭。然后进入循环,
等待按键,在按键中断服务程序中使用
switch
语句实现通过改变
num1
的值来实现
LED7
的闪烁周期。设定标志位
b=0
,在主函数中使用
if
语句通过判断
b
的值来改变
LED7
的亮
灭情况,同时相应的
b
值会取反。
四、程序具体实现
实验要求开机复位后,
LED0
到
LED7
全部点亮
2S
后熄灭。<
/p>
在主函数中使用
LEDPort=0x00;
这条语句实现所有灯都亮,使用中断方式实现定时器定时
2S
,因为实验要求
20ms
溢出,
所以
设定
num=100,
在定时器中断服务程序中使用
if
语句判断条件
,
当<
/p>
num
加到
100
,
也
就是说
2S
时间到时,执行
flag=1;
语句(先设定全局变量
p>
flag=0
)
。然后在主函数中使
用
while
语句规定只有在
flag=0
时才执行所有
LEDPort
点亮的操作。
2S
时间到后,所
< br>有灯熄灭。然后进入
while
循环,等待用户按键。用
户按键后,通过使用
switch
语句,
实验按
0
键,
num1=20,
p>
按
1
键,
num1
=50,
。而在主函数中,当按下
0
键
或者
1
键时,
num1
就有了固定的值,通过
if
语句判断是否到达所要求的
时间后,执行相应操作。在本
实验中,
要求实现
LED7
的周期闪烁,
我先设定一个标志位
b=0;
默认
LED7
灭
,
;
然后在主
函数中在定时时间到达<
/p>
后,
通过判断和改变
< br>b
的值来实现
LED7
的亮灭情
况。
然后使
num=0;
使定时器继续
从新定
时,不停循环实现
LED7
的周
期闪烁。
程序附录:
#include
#include
#include
#define
uchar unsigned char
#define uint unsigned int
sbit ad_busy = P3^2;
sbit key=P3^3;
uchar num;
uchar num1;
bit
b;
uchar flag=0;
uchar keynumber;
#define LEDPort XBYTE[0x9000]
//
void Init(void)
{
IE|=0x04;
TCON=0x01;
}
void
Time0_Init(void)
端口地址
{
TMOD|=0x01;
TH0=0xB8;
TL0=0x00;
ET0=1;
TR0=1;
}
void Time0(void) interrupt 1
{
TH0=0xB8;
TL0=0x00;
num++;
if(num==100)
flag=1;
}
void ISR_INT1(void) interrupt 2
{ keynumber=Read7279();
while(!key);
switch(keynumber)
-
-
-
-
-
-
-
-
-
上一篇:财务管理英文笔试题
下一篇:微机系统的硬件由哪几部分组成