用C语言编写程序实现通过按键使LED灯周期闪烁

更新时间:2023-11-27 11:32:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

用C语言编写程序实现通过按键使LED灯周期闪烁(2010-02-24 21:12:44) 标签:循环闪烁周期led灯按键杂谈 一、设计题目

二、程序功能:

开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键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后熄灭。在主函数中使用LEDPort=0x00;这条语句实现所有灯都亮,使用中断方式实现定时器定时2S,因为实验要求20ms溢出,所以设定num=100,在定时器中断服务程序中使用if语句判断条件,当num加到100,也就是说2S时间到时,执行flag=1;语句(先设定全局变量flag=0)。然后在主函数中使用while语句规定只有在flag=0时才执行所有LEDPort点亮的操作。2S时间到后,所有灯熄灭。然后进入while循环,等待用户按键。用户按键后,通过使用switch语句,实验按0键,num1=20,按1键,num1=50,。而在主函数中,当按下0键或者1键时,num1就有了固定的值,通过if语句判断是否到达所要求的时间后,执行相应操作。在本实验中,要求实现LED7的周期闪烁,我先设定一个标志位b=0;默认LED7灭,;然后在主函数中在定时时间到达

后,通过判断和改变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)

{

case 0:num1=20;break;

case 1:num1=50;break;

default:break;

} }

void main(void) {

b=0;

Init();

Time0_Init();

EA=1;

while(!flag)

{ LEDPort=0x00; }

LEDPort=0xff;

num=0;

while(1)

{

if(num==num1)

{ if(b)

{LEDPort=0x7f;b=0;}

else

{ LEDPort=0xff;b=1;}

}

} num=0; }

LED和按键控制实验 在我刚买ARM开发板时,曾经一共做过4次实验,写过4个程序(距今似乎快要一年了),具体为:

1、LED控制实验:使开发板上的LED3和LED4交替着亮灭 2、按键控制实验:用按键控制开发板上LED的亮灭

3、串口UART通信实验:用ARM的串口与PC机进行通信,包括发送和接收

4、LCD显示实验:在240×320的LCD上显示R,G,B三段color,以及在LCD上显示BMP格式的图片,后来又加了一段程序,使ARM能用UART0接收来自PC机的BMP图片,并在LCD上显示之。

以上这些程序都是用ADS1.2编译链接的,其实说穿了就是把ARM当成单片机在用! 现在公布其中一个实验:按键控制实验。

对于LED实验,就不再单独叙述了,因为实在太简单了,而且现在这个程序已经完全包含了LED实验所涉及到的一切东东!

实验说明:用按键S4控制LED3和LED4的亮灭:按下S4不动时,LED3和LED4同时闪烁点亮,放开S4后,LED3和LED4同时熄灭。

实验目的:熟悉ARM程序开发的一般流程,掌握编译器和链接器的选项设置,以及观察在编译链接后,程序中各种符号,子程序和段所在的ARM内存空间中的地址,最终使程序能够从起始的汇编代码跳到C程序的main()函数中去运行。 开发工具:ADS1.2

源代码:分两个文件,init.s和Main.c,具体在文后列出。

选项设置:在ARM Assembler和ARM C Complier中的Architecture or Processor选择ARM920T;在ARM Linker的Output选项卡,RO base设置成0x31000000,RW base可以为空(这个选项在仿真调试阶段可以空着,但若要烧入FLASH

本文来源:https://www.bwwdw.com/article/29et.html

Top