单片机C语言LED灯点亮程序完全版
- 格式:docx
- 大小:13.39 KB
- 文档页数:7
单片机c语言闪烁灯程序Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】1.闪烁灯1.实验任务如图所示:在端口上接一个发光二极管L1,使L1 在不停地一亮灭,一亮一灭的时间间隔为秒。
2.电路原理图图系统板上硬件连线把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示块”区域中的L1 端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢下面具体介绍其原理:2如图所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒机器周期微秒MOV R6,#20 2 个机器周期2D1: MOV R7,#248 2 个机器周期2 2+2×248=498 20×DJNZ R7,$ 2 个机器周期2×248 498DJNZ R6,D1 2 个机器周期2×20=4010002因此,上面的延时程序时间为。
由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时10ms,以此为基本的计时单位。
如本实验要求秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1 所示,当端口输出高电平,即=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当端口输出低电平,即=0 时,发光二极管L1 亮;我们可以使用SETB 指令使端口输出高电平,使用CLR 指令使端口输出低电平。
5.程序框图如图所示3图汇编源程序ORG 0START: CLRLCALL DELAYSETBLCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时秒 D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C 语言源程序#include <>sbit L1=P1^0;void delay02s(void) //延时秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s(); 4L1=1;delay02s(); }}。
1. 闪烁灯1. 实验任务如图4、1、1 所示:在P1、0 端口上接一个发光二极管L1,使L1 在不停地一亮灭,一亮一灭的时间间隔为0、2 秒。
2. 电路原理图图4、1、13. 系统板上硬件连线把“单片机系统”区域中的P1、0 端口用导线连接到“八路发光二极管指示块”区域中的L1 端口上。
4. 程序设计内容(1). 延时程序的设计方法作为单片机的指令的执行的时间就是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0、2 秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序就是如何设计呢?下面具体介绍其原理:2如图4、1、1 所示的石英晶体为12MHz,因此,1 个机器周期为1 微秒机器周期微秒MOV R6,#20 2 个机器周期2D1: MOV R7,#248 2 个机器周期2 2+2×248=498 20×DJNZ R7,$ 2 个机器周期2×248 498DJNZ R6,D1 2 个机器周期2×20=4010002因此,上面的延时程序时间为10、002ms。
由以上可知,当R6=10、R7=248 时,延时5ms,R6=20、R7=248 时,延时10ms,以此为基本的计时单位。
如本实验要求0、2 秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2). 输出控制如图1 所示,当P1、0 端口输出高电平,即P1、0=1 时,根据发光二极管的单向导电性可知,这时发光二极管L1 熄灭;当P1、0 端口输出低电平,即P1、0=0 时,发光二极管L1 亮;我们可以使用SETB P1、0 指令使P1、0 端口输出高电平,使用CLR P1、0 指令使P1、0 端口输出低电平。
led点亮电路的c语言程序设计以下是一个简单的使用C语言编写的LED点亮电路的程序:
c
#include <stdio.h>
#include <wiringPi.h>
#define LED_PIN 4
int main(void) {
初始化wiringPi库
if (wiringPiSetup() == -1) {
printf("wiringPi初始化失败!\n");
return 1;
}
设置LED引脚为输出模式
pinMode(LED_PIN, OUTPUT);
while (1) {
点亮LED
digitalWrite(LED_PIN, HIGH);
delay(1000); 延时1秒
关闭LED
digitalWrite(LED_PIN, LOW);
delay(1000); 延时1秒
}
return 0;
}
这个程序使用了WiringPi库,因此在编译之前需要先安装WiringPi库。
可以使用下面的命令在树莓派上安装WiringPi库:
sudo apt-get install wiringpi
编译程序使用下面的命令:
gcc -o led led.c -lwiringPi
然后运行程序:
./led
这个程序会让LED灯每隔1秒钟点亮和熄灭一次,不断循环。
在Raspberry Pi 的GPIO引脚中,将LED的正极连接到GPIO 4引脚,负极连接到地线上。
单片机控制LED灯点亮在嵌入式系统开发中,单片机控制LED灯是入门阶段必不可少的实验。
本文将介绍如何在单片机中使用C语言编程控制LED灯点亮。
硬件准备本实验所需硬件材料如下:•单片机主板•LED灯•杜邦线根据图示,将单片机主板上的引脚和LED灯连接起来。
单片机引脚 LED灯P0.0 +端GND -端软件准备我们选择Keil uVision作为编程环境来编写代码。
在开始编写代码之前,需要下载并安装Keil uVision软件。
新建工程在Keil uVision软件中,通过菜单Project -> New µVision Project新建一个工程。
新建工程新建工程在弹出的对话框中,选择保存工程的路径,命名工程名字,选择MCU型号并确定。
选择MCU型号选择MCU型号添加源文件在Keil uVision软件中,将编写的源代码文件添加到工程中。
选择菜单Project -> Add New Item,在弹出的对话框中选择新建一个源文件。
添加源文件添加源文件编写代码以下是控制LED灯点亮的C语言代码#include <STC89C5xRC.H>int main(void){while(1) {P0 = 0x01; // P0.0 点亮LED灯}}程序的执行流程如下:1.定义一个无限循环,反复执行控制LED灯点亮的操作。
2.将P0.0 IO口设为高电平,点亮LED灯。
编译和烧录完成编写代码之后,可进行编译和烧录。
选择菜单Project -> Build Target进行编译,将生成的hex文件烧录到单片机上即可。
本文介绍了如何在单片机中使用C语言编程控制LED灯点亮的操作。
通过对硬件和软件的介绍,读者可以学习到单片机的基础知识与相关编程知识,对深入学习嵌入式系统和单片机开发有很大的帮助。
用c语言编写点灯程序点灯程序是指利用C语言编写的一段代码,可以控制硬件设备上的LED灯进行开关操作。
在嵌入式系统开发领域,点灯程序是入门级的示例程序,也是初学者熟悉硬件编程的重要一步。
我们需要了解一些基本的硬件知识。
在嵌入式系统中,LED灯是一种常见的输出设备,它通常由一个电源引脚和一个控制引脚组成。
通过控制引脚的高低电平,我们可以控制LED灯的亮灭状态。
在C语言中,我们可以通过操作硬件寄存器来控制LED灯的状态。
下面是一个简单的点灯程序示例:```#include <stdio.h>#include <wiringPi.h>#define LED_PIN 0int main(){// 初始化wiringPi库if (wiringPiSetup() == -1){printf("初始化wiringPi失败!\n");return 1;}// 设置LED引脚为输出模式pinMode(LED_PIN, OUTPUT);while (1){// 点亮LED灯digitalWrite(LED_PIN, HIGH);delay(1000); // 延时1秒// 熄灭LED灯digitalWrite(LED_PIN, LOW);delay(1000); // 延时1秒}return 0;}```以上代码使用了wiringPi库来进行GPIO控制。
首先,我们需要在程序中引入`wiringPi.h`头文件,并且定义LED引脚的宏。
接下来,在`main`函数中,我们先初始化wiringPi库,然后将LED引脚设置为输出模式。
在主循环中,我们使用`digitalWrite`函数将LED引脚的电平设置为高电平,从而点亮LED灯。
然后,通过`delay`函数延时1秒钟。
接着,我们将LED引脚的电平设置为低电平,熄灭LED灯,并再次延时1秒钟。
这样循环执行,LED灯就会周期性地亮灭。
1 例子1 第二个灯亮
#include<reg52.h>
void main()
Pl=Oxfd;
#include<reg52.h>
Sbit D1=P1A O:
Void main()
1
D1=O
'注意:稍微改程序时需重新hex化例了2第?个灯亮#include<reg52.h> 〃52单片机头文件sbit ledl=Pl A0://单片机管脚位声明
void main() 〃主函数
{
led 1=0; 〃将单片机P1.0 口清零
whiled); 〃程序停止在这里,在后面会讲到为什么这样写。
}例子3第・?个灯亮
#include<reg52.h> //52 单片机头文件
void main() 〃主函数
{
Pl=0xfe; 〃将单片机P1 口的8个口由高到低分别赋值为I111I1I0 whiled); 〃程
序停止在这里,在后面会讲到为什么这样写。
}
2 例1 第三个灯闪烁fii?循环#include<reg52.h> sbit D2=P1A2: unsigned int a; void main()
I
D2=0;
for(a=0;a<= 10000;a++){};
D2=l;
fbr(a=0;a<=10000;a++){};
}
例/ 2第三个闪烁while 循环
#include<reg52.h>
sbit D2=P1A2: unsigned int a;
void main()
a=5000;
D2=0; while(a —); a=5000;
D2=l;
while(a-);
}
2.#include<reg52.h> //52单片机头文件sbit ledl=Pl A0: 〃单片机管脚位声
明
void mai n() 〃主函数
unsigned int i; 〃定义?个int 型变量whiled)
i=50000; 〃变量賦初值为50000 led仁0; 〃点亮灯
while(i —); // 延时
i=50000;
ledl=l; 〃熄灭灯
\vhile(i —);
3 例子1 3 57灯同时亮#include<reg52.h> 〃52 单片机头文件sbit ledl=Pl A0; 〃
单片机管脚位声明
sbit led3=Pl A2; 〃单片机管脚位声明
sbit led5=Pl A4; 〃单片机管脚位声明
sbit led7=Pl A6; 〃单片机管脚位声明
void mai n() 〃主函数
led 仁0: 〃将单片机Pl.o 口淸零
led3=0: 〃将单片机P1.2 口淸零
led5=0: 〃将单片机P1.4 口淸零
led7=0: 〃将单片机P1.6 口淸零
while( 1); ——〃程疗:停止在这里,在后面会讲到为什么这样
写
例子2 1 3 57同时亮
#in clude<reg52.h> 〃52 单片机头文件
void mai n() 〃主函数
I
Pl=0xaa;〃将单片机P1 口的8个口由高到低分别赋值为10101010例了? 3流水灯?个?个接着亮不循环#include<reg52.h> 〃52单片机头文件
void mai n() 〃主函数
unsigned int i:〃定义?个int 型变量whiled)
仁50000: 〃变量赋初值为500()0
Pl=0xfe:〃点亮第?个
灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
Pl=Oxfd; 〃点亮第二个灯while(i —); 〃延时
i=50000: 〃变呈赋初值为50000
PI=Oxfb: 〃点亮第三个灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
Pl=0xf7; 〃点亮第四个灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
Pl=Oxef; 〃点亮第五个灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
Pl=Oxdf; 〃点亮第六个灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
Pl=Oxbf; 〃点亮第七个灯
while(i —); 〃延时
i=50000: 〃变量赋初值为50000
PI=0x7f; 〃点亮第八个灯
while(i —); 〃延时
whiled); 〃程序
停止在这里,在
彳列 f 4 #include<reg52.h> #include <inlrins.h> #define uint unsigned int #define uchar un sig ned char uchar teinpjmnLnuml
sbit beep二P2A3;
void delay(uint);
void main()
1
temp=Oxfe;
while(l)
{
for(num 1 =O:num 1 <3;num 1 ++)
{
for(num=0:num<8:num++)
{
Pl=temp;
beep=O; delay(lOO); temp=_crol_(temp」); PI=Oxff: beep=l;
delay(lOO);
}
}
for(numl=0 :numl<3:numl++)
{
for(num=0:num<8:nuin++)
{
Pl=temp; beep=O; delay(lOO); temp=_cror_(temp. 1); Pl=Oxff;
beep=l; delay(lOO);
}
}
whiled);
void delay(uint z)
{
uinl x.y;
for(x=z:x>0;x —) for(y=l 10;y>0:y —);
4延时子程序
void delay()
uint x;
for(x=100:x>0;x —){}:
For 的嵌套
void delay() {
uint x,y;
for(x= 100:x>0;x-)%小括号后不加分号
与下句隔开(或者{ for(y=600:y>0:y —);})#include<reg52.h> 例子l#includevwg52? h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=PI A O:
void delay(); %注意分号不能少
void main()
i
while(l)
{
Dl=0;
delay();
D1 = I;
delay();
}
void delay()
I
uint x,y; for(x=100:x>0;x-) for(y=600;y>0:y —);
}
带参数的比不带参数的要方便
例r 2 无参和有参的对比#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit D1=P1A O;
//void delay();
void delay(uint);%带?个参数的,参数类型必须要写,参数可不写。
比如可以写成uint z<,也可以带多个参数
void main()
{
xvhile(l)
{
DI=0: delay(1200);%亮2 秒Dl = l;
delay(1200);
/*
void delay()
1
uint x.y; for(x=100:x>0:x-) for(y=600;y>0:y-);
}*/
void delay(uint z)
I
uint x;
uchar y;
for(x=z:x>0;x-) for(y=20;y>0:y-);
例 f 3#include<reg52.h> #define uint unsigned int #define uchar unsigned char sbit D1=P A1O; void
delay(uint); void main()
{
while(l)
{
Dl=0; delay(1200);
Dl = l;delay(1200);
void delay(uint z)
I uint x;
uchar y; for(x=z;x>0;x —) for(y=20:y>0;y —);
5 循环左移三位如10100101 (a5) -00101101(2d)。