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

合集下载

51单片机技术应用教程(C语言版)项目一 1个LED的闪烁设计与制作

51单片机技术应用教程(C语言版)项目一 1个LED的闪烁设计与制作

4.十进制整数转换为十六进制数可用除16取余法。
即用16不断地去除待转换的十进制数,直至商等于0为止。 将所得的各次余数,依倒序排列,即可得到所转换的十 六进制数。如下式所示:
即 38947 =9823H
16 38947
3
16 2434
2
16 152
8
16 9
9
0
1.1.2 符号数的表示法
1. 机器数与真值 (1)机器数:在计算机中,常用数的符号和数值部分一起编码的方法表示符号数, 较常用的有原码、反码和补码表示法。这几种表示法都将数的符号数码化。机器中 编码表示的数,正号用“0”表示,负号用“1”表示 (2)真值:数值连同符号“+”或“-”称为机器数的真值。一般书写中的数。
技能要求
1.会识别MCS-51单片机; 2.市场调研单片机系列产品,了解单 片机市场行;
3.会搭建单片机最小应用系统; 4.会检测1个LED灯基本电路; 5.会简单使用Keil u Vision与Proteus软 件设计与仿真调试程序并进行硬件 设计。
6.会ISP在线下载。
51单片机技术应用活页式教程(C语言版)
3.请根据资料用Proteus设计“简易指示灯设计”硬件图,下载其程序的机器代码到 AT89C51单片机芯片中,查看仿真结果,并分析仿真结果。请您将硬件图所需元器 件与仿真分析结果写在下面的方框中。
51单片机技术应用活页式教程(C语言版)
项目一:1个LED灯闪烁设计与制作
知识 链接
1.1计算机中的数和编码
51单片机技术应用活页式教程(C语言版)
项目一:1个LED灯闪烁设计与制作
【引导学习2】
我们已经学习了解了AT89C51单片机的引脚,在1个LED的闪烁设计与制作之前,我们要先学习 单片机的基础知识。下面请运用信息查找等方法请完成如下问答题: 1.将下列十六进制无符号数转换为十进制数。 2CH,4FEH,378H,100H,CADH

使用按键自动控制LED闪烁及蜂鸣器鸣叫—while语句、自增自减语句

使用按键自动控制LED闪烁及蜂鸣器鸣叫—while语句、自增自减语句

4、关系有以下几种: (1)==:等等于。测试是否相等。如2==3,测试2等等于3,结果不等,假关系值为0. (2)!=:不等于。如,2!=3,成立,结果为1(真)。 (3)〉:大于。如,a〉10,假设a的值为5,则为假关系;若a的值为11,则为真关系。 (4)<:小于。如,i〈k+100,真假取决于I,k的值。 (5)>=:大于或等于。如,2>=2,3>=2,都为真。 (6)〈=:小于或等于。如,2<=2,为真;3<=2,为假。
while

条件表 达式

语句组 真
调到后面
While执行流程
4、While循环有以下几种形式
(I)while(条件);
//只有条件,没有语句,常用来等待一个“信号”
(2)while(条件)语句; //只有一条语句,省略花括号。
(3)while (条件)
{
语句1;
语句2;
……ain(){
08 unsigned char kCount=0;
//按键计次数变量
09 LED1=on;LED2=LED3=LED4=off; //开机LED1点亮
10 delay(55550);delay(55550); //延时1S左右
11 while(1){
12
/*按键处理部分/
13 if(k==0){
14
delay(200);
//按键延时消抖
15
if(k==0){
16
kCount=(kCount+1)%6; //循环加1
17
while(k==0); //等待按键释放
18
}
19 }
20 /*灯控制功能部分*/ 21 if(kCount==0){LED1=LED2=LED3=LED4=off}; //初始 及第6次全熄灭 22 else if(kCount==1){LED1=on;LED2=LED3=LED4=off};//按 第一次,LED1点亮 23 else if(kCount==2){LED1=LED2=on;LED3=LED4=off};//按 第二次点亮LED1、LED2 24 else if(kCount==3){LED1=LED3=on;LED2=LED4=off};//按 第三次点亮LED1、LED3 25 else if(kCount==4){LED1=LED4=on;LED2=LED3=off};//按 第四次点亮LED1、LED4 26 else if(kCount==5){LED1=LED2=LED3=LED4=on}; //按 第五次,点亮全部

msp430Led按键控制灯亮程序

msp430Led按键控制灯亮程序

1.Led灯控制程序#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD; //关闭看门狗//P1DIR = 0x41;//P1OUT = 0x41; //程序点亮led1//P1DIR |=BIT0+BIT6;//P1OUT |=BIT0+BIT6; //程序点亮led2P1DIR |=BIT0;P1OUT |=BIT0;P1DIR |=BIT6;P1OUT &=~BIT6;while(1){P1OUT ^=BIT0;P1OUT ^=BIT6;__delay_cycles(1000000);} //led交替亮,持续1s2.Led按键控制灯亮#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR &=~BIT3;P1DIR |=BIT0;P1IES |=BIT3;P1IE |=BIT3;_EINT();_BIS_SR(LPM0_bits+GIE);}#pragma vector=PORT1_VECTOR__interrupt void PORT1_ISR(void){int i;char pushkey;pushkey=P1IFG&BIT3;//第三位中断标志位for(i=0;i<1000;i++)//短暂延时软件去抖if((P1IN&pushkey)==pushkey){P1IFG=0;//中断标志清零return;}if(P1IFG&BIT3)//判断按键是否按下{P1OUT^=BIT0;}P1IFG=0;return;}3.矩阵键盘和数码管程序#include <msp430g2553.h>#include"Key&Display.h"//unsigned char Receive(void);void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;Init_4lines_Mode();//初始化4线工作模式Send_Command(CH452_RESET);//CH452芯片内部复位Send_Command(KeyDisplay_ON);//允许显示驱动并启动键盘扫描//开中断,P2.0接CH452的DOUT引脚,当有键按下时,DOUT上产生由高到低的脉冲// P2SEL &= ~(BIT6+BIT7);P2IE|=BIT0;P2IES|=BIT0;P2IFG&=~BIT0;_EINT();while(1){}}//中断处理函数#pragma vector = PORT2_VECTOR//中断处理程序,接收到DOUT脉冲信号时,运行之__interrupt void Port2(void){unsigned char Keyvalue;Send_Command(CH452_GET_KEY);//单片机向CH452发送读取按键代码命令Keyvalue=Key_Read();// Keyvalue=Receive();switch(Keyvalue){case 0x40://按键K0按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis00);//第0位数码管显示0break;}case 0x41://按键K1按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis01);//第0位数码管显示1break;}case 0x42://按键K2按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis02);//第0位数码管显示2break;}case 0x43://按键K3按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis03);//第0位数码管显示3break;}case 0x48://按键K4按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis04);//第0位数码管显示4break;}case 0x49://按键K5按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis05);//第0位数码管显示5break;}case 0x4A://按键K6按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis06);//第0位数码管显示6break;}case 0x4B://按键K7按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis07);//第0位数码管显示7break;}case 0x50://按键K8按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis08);//第0位数码管显示8break;}case 0x51://按键K9按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis09);//第0位数码管显示9break;}case 0x52://按键K10按下{Send_Command(Dis00);//第0个数码管显示字符"0"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x53://按键K11按下{Send_Command(Dis01);//第0个数码管显示字符"1"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x58://按键K12按下{Send_Command(Dis02);//第0个数码管显示字符"2"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x59://按键K13按下{Send_Command(Dis03);//第0个数码管显示字符"3"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5A://按键K14按下{Send_Command(Dis04);//第0个数码管显示字符"4"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5B://按键K15按下{Send_Command(Dis05);//第0个数码管显示字符"5"Send_Command(Dis11);//第1个数码管显示字符"1"break;}default:break;}P2IFG&=~BIT0;}4.红灯0.2秒闪一次,绿灯0.8秒闪一次#include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &=~XTS; //配置时钟BCSCTL3 |=LFXT1S_2;IFG1 &=OFIFG;P1DIR |=BIT0+BIT6; // P1.0,P1.6 output P1OUT &=~BIT0; // P1.0,P1.6置0 P1OUT &=~BIT6;TACCR0 = 12000-1; //1秒定时,产生中断TACCR1 = 2400; //频率0.2*12000,定时0.2秒TACCR2 = 9600; //定时0.8秒TACTL = TASSEL_1 + MC_1+TAIE; // ACLK, 增计数模式TACCTL1 |=CCIE; // TACCR1中断使能TACCTL2 |=CCIE; // TACCR1中断使能_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A(void){switch( TA0IV ){case 2: P1OUT ^= BIT0; // 捕获/比较寄存器TACCR1break;case 4: P1OUT ^= BIT6;break; // 捕获/比较寄存器TACCR2case 10: break; // 未使用,计数达到TACCRO时执行中断,即1秒执行一次}}5.PMW波控制led灯亮度#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR |=BIT6; //方向寄存器P1SEL |=BIT6; //功能寄存器TACTL=TASSEL_2+MC_1+ID_0; //定时器A控制寄存器选择增计数模式TACCTL1 |=OUTMOD_3; //捕获/比较控制寄存器TACCR0=1000-1;TACCR1=10;_BIS_SR(CPUOFF);}。

使用按键自动控制LED闪烁及蜂鸣器鸣叫—函数的封装及调用

使用按键自动控制LED闪烁及蜂鸣器鸣叫—函数的封装及调用

单片机技术及应用
评价等级 完成任务最终评价等级
(评价参考:自评20%、组评30%、师评50%)
8
任务小结
•学生小结:总结自己收获; •教师小结:强调程序的核心思想,编 程的要点,以及程序错误查找方法。
9
课后任务
•利用所学知识实现同时控制两个LED灯 循环点亮。学生利用课余时间完成任务, 并将程序拍照传给教师QQ。
函数定义举例如下:

delay
//无参数无返回值函数定义
{
}

delay( unsigned int i) //有参数无返回值函数定义
{
}

unsigned int sum(unsigned char a,unsigned char b)//有参数有返回值函数定义
{
unsigned int k;
//用于存放返回值的变量
评价内容
1.安全用电
2.设备及器材的安全
3.记录整理完整准确 4. 符合6S管理理念 1、函数的概念及作用 2、函数的定义 3、函数的参数 4、函数的返回值 5、函数的调用
自评
小组评价 教师评价
优☆ 良△ 中√ 差×
汇报展示
1.作品展示(可以为实物作品展 示、PPT汇报、简报、作业等形 式)
2. 语言流畅,思路清晰
……
return k;
//返回值
}
四、函数的参数
C51语言的函数采用参数传递方式, 使一个函数可以对不同的变量数据 进行功能相同处理,在调用函数时 实际参数被传入到被调用函数的形 式参数中,在执行完函数后使用 return语句将一个和函数类型相同 的返回值返回给调用语句。 函数定义好以后,要被其他函数调 用才能被执行。定义函数时在函数 名称后面的括号里列举的变量名称 为“形式参数”;调用函数时,函数 名称后面的括号里的变量称为"实 际参数"。

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮

C语言使用定时器的方法控制LED灯以1S的速度闪亮最近因为赶不上提高班的进度,老师给的教程总是断断续续的,所以我打算跟11月1号通过考试的网友们一起学习,呵呵,这也是我一教训来着,在三维里学习要坚持一步一个脚印,坚持必有奇迹,但也要跟得上大家,以后再忙也要努力实现计划了,不能再像这次一样,因为所谓的考试落下了好几堂课,不过也没有关系,能够吸取点教训总是好的。

我可以先给自己点时间多学些其它的基础知识。

今天开始学单片机的计数器了,呵呵,可能是一直因为用C语言编程序我定时老是定不准的原因,当得知学会定时/计数器后可以让单片机C语言定时准确后,我感觉学它真的很有动力,虽然编一个简单的程序也花了我好长时间,但编出来的感觉却是那么的爽快,我觉得要学会定时/计数器,关键是要学会编程控制 TCOM,TMOD,及TH和TL吧。

主要是TH和TL的准确运算。

还有就是完时以后怎么样让其跟循环语句配合使用。

今天所编的程序是利用单片机定时器控制LED灯以1S 的速度闪烁,我的晶振是12MHZ的,首先是让计时器0.02S进行一次溢出,使TF1=1,其次是利用I++循环50次,加起来为1S。

程序如下: #include;sbit LED = P1^2;void main(){unsigned char i;TMOD |= 0x10;TMOD &= 0xdf;TH1 = 0xb1;TL1 = 0xdf;TCON |= 0x40;while(1){if(TF1==1){TF1 = 0;TH1 = 0xb1;TL1 = 0xdf;i++;if(i==50){i=0;LED=~LED;}}}}。

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

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

用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语句判断是否到达所要求的时间后,执行相应操作。

stm32 编程题

stm32 编程题

stm32 编程题以下是一个简单的STM32编程题,要求实现一个LED闪烁程序:1. 硬件连接:将一个LED灯连接到STM32的GPIO端口上,例如GPIO_PIN_0。

2. 编写程序:使用C语言编写一个简单的STM32程序,实现LED灯的闪烁功能。

具体要求如下:a. 初始化GPIO端口,设置GPIO_PIN_0为输出模式。

b. 循环使LED灯闪烁,每次闪烁时间间隔为1秒。

c. 在程序中添加延时函数,以便控制LED灯的闪烁频率。

以下是一个简单的示例代码:```cinclude ""include "stm32f10x_"include "stm32f10x_"include "stm32f10x_"void delay(uint32_t ms) {TIM3->CNT = 0;TIM3->ARR = ms;TIM3->CR1 = TIM_CR1_CEN;while (TIM3->CNT < ms);}int main(void) {// 初始化GPIO端口和时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitTypeDef GPIO_InitStructure;GPIO__Pin = GPIO_Pin_0;GPIO__Mode = GPIO_Mode_Out_PP;GPIO__Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1) {// 点亮LED灯GPIOA->BSRR = GPIO_Pin_0;delay(500); // 延时500毫秒// 熄灭LED灯GPIOA->BSRR = (uint16_t) ~GPIO_Pin_0;delay(500); // 延时500毫秒}}```在这个示例代码中,我们使用TIM3定时器实现了一个简单的延时函数`delay()`,该函数接受一个参数ms,表示需要延时的毫秒数。

c51闪烁一个led灯的程序

c51闪烁一个led灯的程序
P14插针是8个LED的输出插针,使用8P杜邦线从P14的8个插针连接到单片机P1口。
/*-----------------------------------------------
内容:点亮P1口的1个LED灯闪烁
该程序是单片机学习中最简单最基础的,
通过程序了解如何控制端口的高低电平
------------------------------------------------*/
//用于改变闪烁频率
L1=1; //将P0.0口赋值1,对外输出高电平
Delay(10000);
//主循环中添加其他需要一直工作的程序
}
}
/*------------------------------------------------
延时函数,含有输入参数unsigned int t,无返回值
unsigned int是定义无符号整形变量,其值的范围是
0~65535பைடு நூலகம்
------------------------------------------------*/
void Delay(unsigned int t)
{
while(--t);
}
#include<reg52.h> //包含头文件,一般情况不需要改动,
//头文件包含特殊功能寄存器的定义
sbit L1=P1^0;//用sbit关键字定义L1到P1.0端口,
//LED是自己任意定义且容易记忆的符号
void Delay(unsigned int t); //函数声明
/*------------------------------------------------
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验目的:
熟悉ARM程序开发的一般流程,掌握编译器和链接器的选项设置,以及观察在编译链接后,程序中各种符号,子程序和段所在的ARM内存空间中的地址,最终使程序能够从起始的汇编代码跳到C程序的main()函数中去运行。
开发工具:
ADS
1.2
源代码:
分两个文件,init.s和Main.c,具体在文后列出。
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; }
出现的问题和解决办法:
1、刚开始编译不通过,后来发现在汇编语句中,delay标号没有顶格书写。
2、程序下载进RAM后大多数情况下无法正常运行(偶尔也能成功),总是跳进SWI异常处理中去,而且在Debug Log窗口中提示“Can't set more breakpoint”,刚开始以为真的是断点设多了,虽然我自己并没有设置断点,但以为是AXD自动设置的,于是在AXD的Configure Processor选项卡中,去掉了所有的勾勾,可问题依然存在;后来又以为是没有定义ARM中断跳转和其他模式下的堆栈的缘故,但加进了相关语句后还是没有解决问题!为了这个问题我抓掉了好几根头发,终于在崩溃之前找到了原因所在,原来是在开发板上把ARM设置成了从NANDFLASH启动!其实这本来也没什么错,但问题是我的开发板上已经预装了Win CE系统,于是乎,冲突就这样发生了!解决办法有两个,一是擦除Win CE系统,二是拨动板子上的一个开关,使ARM从NOR FLASH启动。我当然选择后者。
while
(1) /*不断的循环*/{if((rGPFDAT&0x0002)==0) /*检测按键S4是否按下*/{rGPBDAT=0xfc; /*使GPB0输出高电平,GPB1输出低电平,LED3灯会灭,LED4灯会亮*/
delay(0xff); /*调用汇编延迟函数*/
rGPBDAT=0x03; /*使GPB0输出低电平,GPB1输出高电平LED3灯会亮,LED4灯会灭*/
;下面是延迟子程序
EXPORT delay
delay
sub r0,r0,#1 ;r0=r0-1
cmp r0,#0x0 ;将r0的值与0相比较
bne delay ;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr ;返回
END ;程序结束符
************************************************************************************
extern int delay(int time); /*声明汇编函数*/
void Main(){rGPFCON=0x0; /*设置I/O口的GPF1为输入*/
rGPFUP=0xff; /*禁止GPF端口的上拉*/
rGPBCON=0x0005; /*设置I/O口GPB0,GPB1为输出属性*/
rGPBUP=0xff; /*禁止GPB端口的上拉*/
/*PORT F寄存器预定义*/
#define rGPFCON (*(volatile unsigned *)0x560050)
#define rGPFDAT (*(volatile unsigned *)0x560054)
#define rGPFUP (*(volatile unsigned *)0x560058)
选项设置:
在ARM Assembler和ARM C Complier中的Architecture orProcessor选择ARM920T;在ARM Linker的Output选项卡,RO base设置成0x31000,RWbase可以为空(这个选项在仿真调试阶段可以空着,但若要烧入FLASH中运行,则必须设置);另外为了观察程序中各种符号,子程序和段所链接的地址,又在ARMLinker的Listings选项卡中,勾上了Image Map和Symbols
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();
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个程序(距今似乎快要一年了),具体为:
以上这些程序都是用ADS
1.2编译链接的,其实说穿了就是把ARM当成单片机在用!现在公布其中一个实验:
按键控制实验。
对于LED实验,就不再单独叙述了,因为实在太简单了,而且现在这个程序已经完全包含了LED实验所涉及到的一切东东!
实验说明:
用按键S4控制LED3和LED4的亮灭:
按下S4不动时,LED3和LED4同时闪烁点亮,放开S4后,LED3和LED4同时熄灭。
四、程序具体实现
实验要求开机复位后,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<reg
52.h>
#include<absacc.h>
#include"
7279.h"
#define uchar unsigned char
#define uint unsigned int

(2010-02-24 21:12:44)标签:
循环闪烁周期led灯按键杂谈
一、设计题目
二、程序功能:
开机复位后,LED0到LED7全部点亮,所有LEDPort持续2S后熄灭,然后等待按键,按0键LED7以
0.8S周期闪烁,按1键LEDPort以1S周期闪烁。
三、总体设计思想
用中断方式实现定时器的定时,然后通过键盘中断程序实现通过对按键的操作来实现相应的周期闪烁。
init.s:
AREA Init,CODE,READONLY ;该伪指令定义了一个代码段,段名为Init,属性只读
ENTRY ;程序的入口点标识
EXPORT __ENTRY
__ENTRY
ResetEntry
mov sp,#0x0c7000 ;定义堆栈指针
IMPORT Main ;声明主函数Main
BL Main ;调用主函数
Main.c:
/*C语言函数
*/
/*PORT B寄存器预定义*/
#define rGPBCON (*(volatile unsigned *)0x560010)
#define rGPBDAT (*(volatile unsigned *)0x560014)
#define rGPBUP (*(volatile unsigned *)0x560018)
实验总结:
为了上面所说的第二个问题,花了我不少时间,但也正是因为这个问题的出现,使得我对ADS的很多“冷门”的选项设置,也彻底研究了一遍,另外还迫使我去看了ADS
1.2自带的文档Build Tools-Warning and Errors,为以后快速地定位和解决程序中的错误打下了基础。
程序代码如下:
delay(0xff); /*调用汇编延迟函数*/}else{rGPBDAT=0xff;}}}
1、LED控制实验:
使开发板上的LED3和LED4交替着亮灭
2、按键控制实验:
用按键控制开发板xxLED的亮灭
3、串口UABiblioteka T通信实验:用ARM的串口与PC机进行通信,包括发送和接收
4、LCD显示实验:
相关文档
最新文档