(一)点亮LED灯

        直接拿出大学时候的51单片机就开始回顾总结吧。首先关于什么是单片机,我觉得解释起来没那么麻烦,原来学习的时候听这些人说的高大上,然后自己就为了学个这个还有多次入门,多次放弃,多次从入门到放弃,现在想来真是傻透了,其实单片机是啥,其实就是一个可以编写程序然后让它能输出高低电平的东西,其实就是这么简单,不用想的特别复杂。至于51单片机,其实就是有个单片机类叫做51单片机,至于具体的谁care呢,至于C语言,学过两天就能搞,实在不行就再拿本书翻翻呗,当然我也会回顾,但不是现在啦,用到哪儿实在不会了再去查呗,边回忆边学习。那就直接开始吧。

1. 硬件

        首先单片机编程是一个先由硬件再到软件的过程,要编程就需要先看一个东西,叫做开发板原理图,我们首先第一个回忆的是led灯,那先打开开发板原理图:

        

         我们可以看到VCC在左边,之后经过一个二极管然后经过电阻到达p20到p27口。那其实就是说假如我们右边给了一个低电平,那么我们就可以让led灯亮起来,那其实说来就是说这样我们就能点亮一个led灯了。

2. 软件:

        那我们可以试着先点亮一个灯,程序如下

        

/*
          点亮一个led灯程序
*/
#include "reg52.h"
sbit led = P2^0;
void delay(int xus){
    while(x--);
}
void main(){
    while(1){
        led = 0
        delay(10000000);
        led = 1;
        delay(10000000)
    }
}

        至于为啥会有“reg52.h”头文件,其实就是说你为了能操作这个芯片,其实它内部是有一些寄存器的,你需要去包含它,这个头文件里面就有对应的寄存器的声明。sbit是C语言不存在的一个数据类型,其实就是定义P2^0这个位,while循环里面就是先给它一个低电平,延迟一段时间再给它一个高电平,这样就能使得这个led灯亮灭。

       接下来我们其实还可以同时点亮多个led灯,很多人都可能会想到使用API来写这个,关于API其实就是一些大神写好的函数,就比如我上面的写的delay函数一样,我们直接调用就好了,但是我觉得才开始还是可以考虑自己写一个比较好,下面就是我写的关于led流水灯的内容:

        

#include "reg52.h"
unsigned char led = 0xff;
void delay(int xus){
	while(xus--);
}
void main(){
	int i;
	while(1){
		for(i = 0;i < 8;i++){
			P2 = led & (~(1 << i));
			delay(1000000);			
		}
	}	
}

        哈哈,其中还是有些位运算比较难的,但是位运算还是需要学会吧,关于这个位运算这种东西还是可以多算,就很快就会有感觉啦。当然还是有些小公式需要记住,比如把某一位置0,或者是某一位置1,这个比较简单,就不回顾啦。

3. 简单的拓展:

        我们现在来输出的引脚其实就是我们所说的通用IO,就是因为它可以控制输出高低电平,而输出高低电平就是GPIO的其中一个重要特性,当然51单片机还有一些其他的引脚,反正边学边看呗,也不用记,多编程不就知道每个引脚的意思了么。

        关于电阻,我们高中的时候就学过电阻了,其实我们拿到一个电阻可以直接用电压表就能测出电压是多少,但是我还是觉得简单的可以记一下,其实就是假如是三位数103,前两位就是系数,后面的是指数,即是10乘以10的3次方,即是1000欧,而假如1004就是前三位是系数,其他的看一下假如能看出来可以,实在把握不住直接电压表吧

        关于发光二极管:,它具有单向导电性,通过5mA电流就能发光,其亮度越强,但假如电流过大,就会烧毁二极管,所以我们一般控制在3~20mA就可以了,在这里给发光二极管一个电阻的目的就是为了防止电流过大。

        关于led的大致回顾就到这里啦,希望自己再接再厉,继续回顾和学习原来的知识,温故而知新,把每个系列都认真出完。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下代码来点亮LED: ``` section .text global _start _start: mov eax, b00000010 ; 将LED的控制位设置为2 mov ebx, b00000000 ; 将LED的状态设置为关闭 out x378, eax ; 将控制位写入端口x378 out x378, ebx ; 将状态写入端口x378 mov eax, 1 ; 退出程序 xor ebx, ebx int x80 ``` 这段汇编代码将LED的控制位设置为2,状态设置为关闭,然后将控制位和状态写入端口x378,最后退出程序。 ### 回答2: 点亮 LED 可以通过控制相应的 GPIO 引脚来实现。下面是使用汇编语言编写一个点亮 LED 程序的示例: ORG 0 ; 设置端口A的引脚为输出 LDI R16, 0xFF OUT DDRB, R16 ; 设置端口A的引脚高电平输出 LDI R17, 0xFF OUT PORTB, R17 END 在这个示例中,我们首先设置了端口B的引脚为输出,这里的端口B可以按照具体的硬件平台进行相应的调整。然后,我们使用 LDI 指令将数值 0xFF 装载到寄存器 R17 中,表示将端口B的引脚设置为高电平输出。最后,我们使用 OUT 指令将寄存器 R17 的内容输出到端口B,从而点亮 LED 。 以上是一个基本的汇编语言程序的示例,具体的硬件平台和编程环境可能会有所不同,你需要根据具体的硬件平台和编程环境进行相应的调整。 ### 回答3: 汇编语言可以使用一个标准的端口库来控制硬件,点亮LED可以通过控制某个特定的端口来实现。 首先,我们需要确定使用的是哪个端口。每个硬件平台都有不同的IO端口控制方式,因此我们需要查找相关资料并确定要使用的端口。 以8086微处理器为例,如果想要点亮LED,我们可以选择将其连接到端口A,其中的位0(低位)控制LED的亮灭。通过将位0设置为1,则会点亮LED。因此,我们需要向端口A发送一个带有位0为1的数据。 下面是汇编语言代码示例: ``` .model small .stack 100 .data .code main proc MOV AL, 00000001B ; 将AL寄存器设置为二进制 00000001,其中位0为1 OUT 00h, AL ; 将AL的值输出到端口00h,控制LED点亮 MOV AH, 04Ch ; 退出程序 INT 21h main endp end main ``` 以上示例代码首先将AL寄存器设置为二进制数00000001,其中位0为1,然后通过OUT指令将AL寄存器的值输出到端口00h。这样就可以点亮LED。 请注意,以上代码只是示例,并且使用了8086微处理器的端口控制方式。具体的代码可能会因为使用不同的硬件平台而有所差异。因此,在实际应用中,您需要根据所使用的硬件平台和端口控制方式进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值