历史上的今天
返回首页

历史上的今天

今天是:2025年08月20日(星期三)

正在发生

2021年08月20日 | 51单片机-模块初始化

2021-08-20 来源:eefocus

1.硬件的初始化


学单片机需要往前走,所以我们必须提前熟悉单片机嵌入式的代码书写风格。


还记得我们要点亮小灯需要的条件吗


首先:


sbit LED2  = P0^0;

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;


然后:


ADDR3 = 1;//使能三八译码器

ENLED = 0;// 

  

ADDR2 = 1;//**************************

ADDR1 = 1;//让三八译码器的IO6输出低电平

ADDR0 = 0;//**************************


上面这些条件满足了就叫LED的初始化,也就是说,要想使用硬件上的模块,我们必须配置好它的IO端口输出情况或者设置好函数的参数使其能工作。


注意:初始化不是放在while(1)循环中反复执行,而是在主函数开头把相应的IO端口该输出低电平的输出低电平,该输出高电平的输出高电平,配置好这些器件,它只需在主函数开头执行一次即可,后面就是进入死循环去真正的实现相应的功能了。像有些器件的初始化需要IO端口满足一些时序要求,就是高低电平保持多长时间这些,后面我们遇到这种器件再讲。


2.小灯的初始化


我们已经知道小灯要能正常工作,就要满足P1的5个IO端口的条件


所以LED小灯的初始化就封装为


void LED_Init()

{

    P1|=0x0E;//让P1.1,P1.2,P1.3强制输出1

    P1&=0xEE;//让P1.0和P1.4强制输出0

}


这两行代码大家自己分析原理。


不过要记住数码管工作的时候,小灯是暂时发挥不了作用的,因为三八译码器的IO6端口的输出已经切换了。


数码管显示任务的代码我们参考了宋老师的简化书写方式,在此之前大家先看到之前的“SEG_task()”。


void SEG_task()//数码管显示函数

{

    static unsigned char i=0;

   

    P0=0xFF;//端口状态全部熄灭数码管里的LED达到刷新作用

    switch(i)

    {

        case 0:

        ADDR2 = 0;ADDR1 = 0;ADDR0 = 0;P0=LedBuff[0];i++;break;

        case 1:

        ADDR2 = 0;ADDR1 = 0;ADDR0 = 1;P0=LedBuff[1];i++;break;     

        case 2:

        ADDR2 = 0;ADDR1 = 1;ADDR0 = 0;P0=LedBuff[2];i++;break;  

        case 3:

        ADDR2 = 0;ADDR1 = 1;ADDR0 = 1;P0=LedBuff[3];i++;break;

        case 4:

        ADDR2 = 1;ADDR1 = 0;ADDR0 = 0;P0=LedBuff[4];i++;break;     

        case 5:

        ADDR2 = 1;ADDR1 = 0;ADDR0 = 1;P0=LedBuff[5];i=0;break; 

    }  

}


我们把这部分代码简化如下


void SEG_Scan()

{

    static unsigned char i = 0;     

    P0 = 0xFF;             //端口状态全部熄灭数码管里的LED达到刷新作用

    P1 = (P1 & 0xF8) | i;  //i等于0时,就是“ADDR2=0; ADDR1=0; ADDR0=0;”,i等于1时,就是“ADDR2=0; ADDR1=0; ADDR0=1;”,以此类推

    P0 = LedBuff[i];       //6个缓冲区的值轮流赋给P0

    i++;

    if(i>=6)i=0;           //让i在0~5之间循环变化

}


大家自己对照分析这两部分代码,作用都是一样的,后者却简化了大量的书写,而且执行的时间比前者少,所以代码执行效率高。


3.function.h的内容


看到“reg52.h”文件里发现有P3的8个IO端口的定义


sbit RD   = P3^7;

sbit WR   = P3^6;

sbit T1   = P3^5;

sbit T0   = P3^4;

sbit INT1 = P3^3;

sbit INT0 = P3^2;

sbit TXD  = P3^1;

sbit RXD  = P3^0;


那我们也可以懂得把之前的“sbit LED2 = P0^0;”等放在“function.h”中。


以及在“function.c”封装有的函数和初始化的数组都需要在“function.h”中声明一下。


比如在“function.c”中定义好了“LED_Init()”,在“function.h”就要“void LED_Init();”声明一下。

推荐阅读

史海拾趣

川土(Chipanalog)公司的发展小趣事

2022年,川土微电子的CA-IS3062W产品荣获了中国IC设计成就奖之“年度最佳隔离器”。这一荣誉的获得不仅是对川土微电子技术实力的肯定,也进一步提升了公司在行业内的知名度。同时,这也为川土微电子未来的发展奠定了坚实的基础。

HP(Keysight)公司的发展小趣事

随着业务的不断发展,川土微电子开始在全国范围内进行战略布局。公司不仅在上海设立了总部和研发中心,还在其他地区设立了办事处和生产基地。此外,川土微电子还积极与多家封测厂合作建立了封测专线,确保了产品的质量和供应的稳定性。

ABC [ABC Taiwan Electronics Corp]公司的发展小趣事

随着全球电子市场的不断扩大,ABC Taiwan Electronics Corp开始实施国际化战略。公司积极参与国际电子展会,与国外客户建立合作关系,将产品推向国际市场。同时,公司还加强了对国际标准和法规的研究,确保产品符合国际质量要求。通过不断拓展海外市场,ABC的销售额和市场份额逐年攀升,成为了国际知名的电子零件供应商。

ACI [Applied Concepts, Inc.]公司的发展小趣事

随着全球电子市场的不断扩大,ACI公司开始将目光投向海外市场。公司积极实施国际化战略,通过设立海外分支机构、参加国际展会等方式拓展市场。同时,ACI还加强了与国际同行的交流与合作,共同推动电子行业的发展。通过国际化布局,ACI成功打开了海外市场的大门,为公司的发展注入了新的动力。

Altitude Technology公司的发展小趣事

Altitude Technology公司成立于一个科技迅猛发展的时代,创始人李华怀揣着对电子技术的热爱和对未来科技的憧憬,决定创立一家专注于高度集成和智能化电子产品研发的公司。初期,公司面临着资金短缺、人才匮乏等重重困难,但李华凭借对技术的深刻理解和敏锐的市场洞察力,带领团队开发出了一款具有划时代意义的智能手环,这款产品以其出色的性能和人性化的设计迅速在市场上获得了认可,为Altitude Technology公司赢得了第一桶金。

亿佰特(EBYTE)公司的发展小趣事

亿佰特始终坚持以质量为核心的发展理念。公司建立了严格的质量控制体系,从原材料采购到生产制造,再到产品检验,每一个环节都严格把关。通过精细化的管理,亿佰特确保了产品的优良品质。同时,公司还注重售后服务,为客户提供全方位的支持。正是凭借卓越的品质和优质的服务,亿佰特赢得了客户的信赖和市场的认可。

问答坊 | AI 解惑

哈佛结构

哈佛结构   哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码後得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储 ...…

查看全部问答>

关于信号输出对电路造成影响的问题!

我现在遇到一个奇怪的问题,如果我将电路中的某个信号赋值给一个输出管脚的话,那么整个电路的逻辑都不对了。(如果不输出的话,通过其它管脚观察时逻辑是正确的) 大家有没有碰到过这种情况?是怎么回事?请高手指点! 注:我是在quartus8.1中用 ...…

查看全部问答>

128M Nand flash如何寻址?

CPU为32位ARM芯片 Nand flash芯片为三星K9F1G08X0M (X8),有效存储128M + 4M OOB 地址分配如下面所示:             IO0      IO1    IO2       ...…

查看全部问答>

用modem通过电话线传输数据,有延迟,是什么原因?

公司用捷联的猫传输数据,终端用的33600md,公司总部用捷联的列架猫,终端的猫自动拨号,与列架猫建立连接后(v22bis协议,2400速率,异步),传输终端的数据。每次都是刚开始传输的时候比较正常,但逐渐数据就会延迟,延迟有时可达3分钟,但进入mo ...…

查看全部问答>

收购:现需要收购 SmartARM2400 的包装盒若干个,以及装书的那个硬包装盒若干个,谢谢!

发现 SmartARM 2400 的包装盒装东西非常合适,想弄几个, SmartARM套件中的那个装书的硬纸盒也非常不错,用来整理书架是非常不错的选择,非常想多弄几个。 可以和我邮件联系,  rampc@sian.com 不要太贵哦,我明天再把我想要的 ...…

查看全部问答>

l有谁 知道用libmad 库解码mp3文件的使用流程, 急,谢谢!

就是使用libmad解码mp3文件,什么时候是解码一桢结束,这一桢数据怎么保存?…

查看全部问答>

有没有哪位在wince 6.0 r2上定制出中文模拟器?

自己在wince 6.0 r2上定制了一个模拟器,但不能显示中文,汉字都是以空框显示,不知道是什么原因?请高人指点一下!…

查看全部问答>

关于STM32ADC用DMA采多通道时数据错位的问题New

关于STM32 ADC用DMA采多通道时数据错位的问题,之前的错误现象是4.5A变成9A或0.5A,后来对ADC的参数配置加了定时配置后,有很大的改善,但客户现场又用了20多天后,又出现数据错误的现象,电流110A的变30多A?   急!急!急!…

查看全部问答>

利尔达开发板的问题,232串口调试不成功

1、PC机串口连接TEST44X学习板的9芯串行接口 J5_232 // 2、对拨动开关P_232、P1、U_USART,只有拨动开关 U_USART 的P2脚和P5脚拨到ON 的位置; 按照上面的设置设置了,我从pc端给开发板发数据,没有回来的数据,没反应,其他几个历程也不行,请问 ...…

查看全部问答>