单片机 8个按键分别控制8个LED灯 C语言代码
- 格式:pdf
- 大小:53.71 KB
- 文档页数:1
单片机八个灯依次亮的编程汇编语言哎呀,这可是个不小的挑战啊!不过,既然咱们已经走到了这一步,那就得好好想想怎么才能让单片机的八个灯依次亮起来。
别着急,我会尽力帮助你的。
我们得了解一下单片机的基本知识。
单片机就是一种集成电路芯片,它可以把所有的功能都集成在一个小小的芯片里。
而这次的任务就是要让单片机控制八个灯依次亮起来。
听起来好像很简单,但其实还是有很多细节需要注意的。
那么,我们现在就开始吧!我们需要了解单片机的输入输出端口是什么样子的。
通常情况下,单片机的输入输出端口都是通过一些小电阻和电容来实现的。
我们可以通过这些电阻和电容来控制电流的流动,从而实现对灯的控制。
接下来,我们需要了解一下单片机的时钟信号是什么。
时钟信号就是单片机工作的基础,它决定了单片机每秒钟可以执行多少次指令。
因此,在编写程序的时候,我们必须要考虑到时钟信号的影响。
好了,现在我们已经准备好了所有的工具和材料,可以开始动手做实验了!我们需要把单片机连接好电路图中的引脚。
这里要注意一下,每个引脚都要连接正确无误才行哦!
接下来,我们需要编写一个简单的程序来控制单片机的工作。
这个程序应该包括以下几个部分:首先是初始化程序,用来设置单片机的各个参数;然后是循环程序,用来控制灯的亮灭;最后是延时函数,用来控制灯亮的时间间隔。
写完程序之后,我们就可以把它烧录到单片机里面去了。
这个过程也很重要哦!如果烧录失败了,那么我们的努力可就白费了。
我们只需要把开关一打开,就可以看到八个灯依次亮起来了!哇塞,真是太神奇了吧!这一切都是因为我们用智慧和汗水创造出了这样一个奇迹!。
单片机8个led灯循环点亮程序一、前言单片机是一种非常重要的电子元件,它可以通过编程来实现各种功能。
其中,点亮LED灯是最基础的操作之一。
本文将介绍如何使用单片机8个LED灯循环点亮。
二、硬件准备1. 单片机:STC89C52RC或其他8051系列单片机;2. LED灯:8个;3. 电阻:8个(220欧姆);4. 面包板:1个;5. 杜邦线:若干。
三、程序设计首先,我们需要了解一些基本的概念和知识:1. 端口:单片机的I/O口被称为端口,其中P0、P1、P2、P3四个端口分别对应着不同的引脚。
2. 输出:通过控制端口输出高电平或低电平来控制外部设备。
3. 延时函数:为了让程序在执行时停留一段时间,需要使用延时函数。
接下来,我们开始编写程序。
具体步骤如下:1. 定义引脚首先,我们需要定义每个LED所对应的引脚。
这里我们将8个LED分别连接到P0口的0~7引脚上。
sbit led0=P0^0;sbit led1=P0^1;sbit led2=P0^2;sbit led3=P0^3;sbit led4=P0^4;sbit led5=P0^5;sbit led6=P0^6;sbit led7=P0^7;2. 定义延时函数为了让程序在执行时停留一段时间,我们需要定义一个延时函数。
这里我们使用循环来实现延时。
void delay(unsigned int i){while(i--);}3. 循环点亮LED灯接下来,我们就可以开始循环点亮LED灯了。
这里我们使用for循环来实现。
void main(){while(1){for(int i=0;i<8;i++){switch(i){case 0:led0=1;break;case 1:led1=1;break;case 2:led2=1;break;case 3:led3=1;break;case 4:led4=1;break;case 5:led5=1;break;case 6:led6=1;break;case 7:led7=1;break;}delay(50000);switch(i){case 0:led0=0;break;case 1:led1=0;break;case 2:led2=0;break;case 3:led3=0;break;case 4:led4=0;break;case 5:led5=0;break;case 6:led6=0;break;case 7:led7=0;break;}}}}四、总结通过以上步骤,我们就可以实现单片机8个LED灯循环点亮的程序了。
单片机二进制八个led灯计数以下是一种可能的实现方式:```c#include <reg52.h>sbit LED1 = P1^0; // 定义 LED1 连接的引脚sbit LED2 = P1^1; // 定义 LED2 连接的引脚sbit LED3 = P1^2; // 定义 LED3 连接的引脚sbit LED4 = P1^3; // 定义 LED4 连接的引脚sbit LED5 = P1^4; // 定义 LED5 连接的引脚sbit LED6 = P1^5; // 定义 LED6 连接的引脚sbit LED7 = P1^6; // 定义 LED7 连接的引脚sbit LED8 = P1^7; // 定义 LED8 连接的引脚unsigned char count = 0; // 计数器变量void delay() {unsigned int i, j;for(i = 0; i < 100; i++) {for(j = 0; j < 1000; j++) {}}}void main() {while(1) {LED1 = count & 0x01; // 判断计数器的最低位是 0 还是 1LED2 = (count >> 1) & 0x01; // 判断计数器的第二位是 0 还是 1 LED3 = (count >> 2) & 0x01; // 判断计数器的第三位是 0 还是 1 LED4 = (count >> 3) & 0x01; // 判断计数器的第四位是 0 还是 1 LED5 = (count >> 4) & 0x01; // 判断计数器的第五位是 0 还是 1 LED6 = (count >> 5) & 0x01; // 判断计数器的第六位是 0 还是 1 LED7 = (count >> 6) & 0x01; // 判断计数器的第七位是 0 还是 1 LED8 = (count >> 7) & 0x01; // 判断计数器的最高位是 0 还是 1count++; // 计数器加 1delay(); // 延时一段时间}}```这段代码使用了 P1 口的 8 个引脚分别连接到 8 个 LED 灯,通过不断改变P1 口的引脚状态来实现二进制计数。
8个led灯循环点亮程序汇编语言asm.
ORG 0000H.
AJMP MAIN.
ORG 0030H.
MAIN:
MOV A, #0FEH ; 初始点亮第一个LED(1111 1110)LOOP:
MOV P1, A.
LCALL DELAY.
RL A ; 循环左移。
SJMP LOOP.
DELAY:
MOV R7, #250 ; 外层循环次数,可以调整延时时间。
D1:
MOV R6, #250.
D2:
DJNZ R6, D2.
DJNZ R7, D1.
RET.
END.
在这个程序中:
1. 程序从地址`0000H`开始,跳转到`MAIN`程序段。
2. 在`MAIN`程序段中,先将`A`的值设置为`0xFEH`,然后把`A`的值赋给`P1`口来点亮第一个LED。
3. 接着调用`DELAY`子函数进行延时,然后通过`RL A`指令将`A`中的值循环左移一位,这样就可以依次点亮下一个LED。
4. `DELAY`子函数通过两层循环来实现简单的延时功能。
`R7`和`R6`作为循环计数器,通过`DJNZ`指令来控制循环次数,从而达到延时的目的。
单片机8个灯循环点亮汇编语言
以下是一个使用汇编语言编写的单片机程序,实现8个灯循环点亮的效果:
```asm
; 定义 I/O 端口
LED_PORT equ P1
; 定义延时函数
DELAY_MS MACRO ms
MOV R7, #ms
LOOP:
MOV R6, #250
DELAY_LOOP:
NOP
DJNZ R6, DELAY_LOOP
DJNZ R7, LOOP
ENDM
ORG 0H
START:
MOV A, #01H ; 将 0x01 存入累加器 A
LOOP:
MOV LED_PORT, A ; 将累加器 A 的值写入 LED 端口
DELAY_MS 200 ; 延时 200ms
ADD A, A ; 将累加器 A 的值左移一位
ANL A, #0FH ; 将累加器 A 的高四位清零,并保存到累加器 A
CJNE A, #00H, LOOP ; 如果累加器 A 的值不为 0,则继续循环
SJMP START ; 重新开始循环
```
这个程序使用了`LED_PORT`作为连接LED灯的I/O端口,并定义了一个`DELAY_MS`宏来实现延时功能。
在`START`标签处开始执行程序,将0x01存入累加器A,然后进入主循环
`LOOP`。
主循环中,首先将累加器A的值写入LED端口以点亮对应的LED灯,并延时200ms。
然后将累加器A的值左移一位,并将高四位清零,并保存回累加器A。
接着判断累加器A的值是否为0,如果不为0,则继续循环。
如果为0,则重新开始循环。
这样,程序会不断循环8个灯的点亮顺序,直到程序结束。
单片机课程设计—8个按键控制8个LED自动设定控制流水灯东北石油大学实习总结报告实习类型生产实习实习单位东北石油大学实习基地实习起止时间 7月7日至 7月16日指导教师刘东明、孙鉴所在院(系)电子科学学院班级电子科学与技术15-2 学生姓名学号7月 16日目录第1章按键控制流水灯设计 (1)1.1 实习目的 ..................................................... 错误!未定义书签。
1.2 实习要求 ..................................................... 错误!未定义书签。
第2章电路工作原理 (2)2.1 STC89C52单片机工作原理 (2)2.2 LED工作原理 (3)2.3按键工作原理 (3)2.4整体电路图 (5)2.5 本章小结 (6)第3章 C程序设计 (7)3.1 程序设计流程图 (7)3.2实验结果 (8)3.3 本章小结 (9)总结及体会 (10)参考文献 (11)附录 (12)第1章按键控制流水灯设计1.1实习目的本次实习以STC89C52单片机为控制核心。
经过它实现对八盏LED灯的亮灭进行设定,并在设定完成之后能够按照之前的设定实现流水灯效果。
外部电路为按键控制流水灯。
P0口控制八盏灯,P1口控制矩阵键盘,P2口控制独立按键,程序利用单片机内部计时器中断实现流水效果。
要求流水灯能够自行设定、暂停、复位,工作稳定,可靠性高。
生产实习的主要目的是培养理论联系实际的能力,提高实际动手操作能力。
本专业的生产实习旨在广泛了解实际单片机电子产品工作的全过程,熟悉电子产品的主要技术管理模式,并在实习的操作过程中学习掌握电子产品的焊接安装调试的实际操作技能。
巩固和加深理解所学的理论,开阔眼界,提高潜力,为培养高素质大学本科人才打下必要的基础。
透过学习,是理论与实际相结合,能够使学生加深对所学知识的理解,并为后续专业课的学习带给必要的感性知识,同时直接了解本业的生产过程和生产资料,为将来走上工作岗位带给必要的实际生产知识。
单片机控制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语言如何实现8个LED流水灯来回流动?第一部分参考程序#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int//--------------------------------void DelayMS(uint ms){uchar t;while(ms--) for (t=0;t<120;t++);}//----------------------------------void main(){P2= 0xfe;while (1){P2 =_crol_(P2,1);DelayMS(200);}}2012-06-14 17:06 芯DZ|分类:C/C++|浏览267次现在只能从左到右循环流动,怎么才能从左到右再从右到左流动呢?#include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit beep=P2^3;uchar p1e;void delay(uint a);void main(){p1e=0xfe;P1=p1e;while(1){p1e=_crol_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}}void delay(uint a){uint x,y;for(x=a;x>0;x--)for(y=150;y>0;y--); }提问者采纳2012-06-14 17:51char i;while(1){for(i=0; i<7; i++){p1e=_crol_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}for(i=0; i<7; i++){p1e=_cror_(p1e,1);delay(55);P1=p1e;beep=0;delay(55);beep=1;delay(55);}}CYF0316|六级p1e=_cror_(p1e,1);追问这个只是向右移吧...我是说向左移动到第8个LED后再从第8个向左移,实现来回流动回答1,赋值2,右移动3,再赋值4,左移动你程序都写出了只是把程序COPy 粘帖到下面把p1e=_crol_(p1e,1); 改成p1e=_cror_(p1e,1); 就好了呀第二部分参考、归纳、总结得正确程序(仅供参考)#include <AT89X51.H>#include <intrins.h>#define uchar unsigned char#define uint unsigned intvoid DelayMS(uint ms) {uchar t;while(ms--) for (t=0;t<120;t++);}void main(){ char i;P2= 0xfe;while (1){for(i=0; i<7; i++){P2 =_crol_(P2,1);DelayMS(200);}for(i=0; i<7; i++){P2 =_cror_(P2,1);DelayMS(200);}}}以下是附加文档,不需要的朋友下载后删除,谢谢班主任工作总结专题8篇第一篇:班主任工作总结小学班主任特别是一年级的班主任,是一个复合性角色。
51单片机控制P2口8位LED灯左移C语
言程序
此程序控制P2.0~P2.7口8个LED(P2.0~P2.7)灯逐个依次点这,又从(P2.7~P2.0)这样的顺序一直到全部被点亮。
#include ;//头文件
void delay(unsigned int x)//延时函数
{
while(x--);
}
void main(void)
{
unsigned char i;//定义一个无符号字型局部变量i 取值范围0~255
delay(50000);
P2=0xfe;
for(i=0;i<8;i++)//加入for循环,表明for循环大括号中程序循环执行8次
{
delay(50000);//调用延时函数,更改延时的x变量的值可以更改延时长短,用于改变闪烁频率
P2<<=1;
}
}
知识要点:
1、<<符号。
这个是左移符号,P2<<=1;等效于
P2=P2<<1;
例如:temp=15;
temp<<=1;
15二进制为00001111,左移1位后,右端自动补0,变
成00011110,此时temp=30;数值左移一位相当于乘以2,反之右移一位相当于除以2.。
东北石油大学实习总结报告实习类型生产实习实习单位东北石油大学实习基地实习起止时间 2018年7月7日至2018年7月16日指导教师刘东明、孙鉴所在院(系)电子科学学院班级电子科学与技术15-2学生姓名学号 15090124022018年 7月 16日目录第1章按键控制流水灯设计 (1)1.1 实习目的 ....................................................................... 错误!未定义书签。
1.2 实习要求 ....................................................................... 错误!未定义书签。
第2章电路工作原理. (2)2.1 STC89C52单片机工作原理 (2)2.2 LED工作原理 (3)2.3按键工作原理 (3)2.4整体电路图 (5)2.5 本章小结 (6)第3章 C程序设计 (7)3.1 程序设计流程图 (7)3.2实验结果 (8)3.3 本章小结 (9)总结及体会 (10)参考文献 (11)附录 (12)第1章按键控制流水灯设计1.1实习目的本次实习以STC89C52单片机为控制核心。
通过它实现对八盏LED灯的亮灭进行设定,并在设定完成之后能够按照之前的设定实现流水灯效果。
外部电路为按键控制流水灯。
P0口控制八盏灯,P1口控制矩阵键盘,P2口控制独立按键,程序利用单片机内部计时器中断实现流水效果。
要求流水灯能够自行设定、暂停、复位,工作稳定,可靠性高。
生产实习的主要目的是培养理论联系实际的能力,提高实际动手操作能力。
本专业的生产实习旨在广泛了解实际单片机电子产品工作的全过程,熟悉电子产品的主要技术管理模式,并在实习的操作过程中学习掌握电子产品的焊接安装调试的实际操作技能。
巩固和加深理解所学的理论,开阔眼界,提高潜力,为培养高素质大学本科人才打下必要的基础。
1例子1第二个灯亮#include<reg52.h>void main(){P1=0xfd;}#include<reg52.h>Sbit D1=P1^0;Void main(){D1=0}注意:稍微改程序时需重新hex化例子2第一个灯亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。
}例子3第一个灯亮#include<reg52.h> //52单片机头文件void main() //主函数{P1=0xfe; //将单片机P1口的8个口由高到低分别赋值为11111110 while(1); //程序停止在这里,在后面会讲到为什么这样写。
}2例子1第三个灯闪烁fir循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){D2=0;for(a=0;a<=10000;a++){};D2=1;for(a=0;a<=10000;a++){};}例子2第三个闪烁while循环#include<reg52.h>sbit D2=P1^2;unsigned int a;void main(){a=5000;D2=0;while(a--);a=5000;D2=1;while(a--);}2.#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明void main() //主函数{unsigned int i; //定义一个int型变量while(1){i=50000; //变量赋初值为50000led1=0; //点亮灯while(i--); //延时i=50000;led1=1; //熄灭灯while(i--);}}3例子1 3 5 7灯同时亮#include<reg52.h> //52单片机头文件sbit led1=P1^0; //单片机管脚位声明sbit led3=P1^2; //单片机管脚位声明sbit led5=P1^4; //单片机管脚位声明sbit led7=P1^6; //单片机管脚位声明void main() //主函数{led1=0; //将单片机P1.0口清零led3=0; //将单片机P1.2口清零led5=0; //将单片机P1.4口清零led7=0; //将单片机P1.6口清零while(1); //程序停止在这里,在后面会讲到为什么这样写。