历史上的今天
返回首页

历史上的今天

今天是:2025年10月20日(星期一)

正在发生

2022年10月20日 | STC89C52单片机 LED灯闪烁

2022-10-20 来源:csdn

LED闪烁

循环语句

循环语句

(1)while(条件表达式){语句}

只有当 while 后面圆括号内条件表达式的值为真时,程序才会重复执行花括号内语句,当条件表达式为假时则不执行花括号内语句。


(2)for([初值设定表达式];[循环条件表达式];[更新表达式])

{语句}


例:for(i = 1; i <= 100; i++)  

{语句}


花括号内语句会被执行100次后才退出。


变量的定义

变量

变量是在程序执行过程中其值能不断变化的量。在使用一个变量之前必须进行定义,用一个标识符作为变量名,并指出它的数据类型。

注意:C语言中每条语句必须用分号结束。

常用定义格式如下:

数据类型 变量名;

例如:


unsigned char a;  // 作用范围(0~255, 无符号字符型) 

unsigned char b;  

a = 5; b = 2;  

b = 5 + a; (其中5是常量,a 与 b 都是变量,b最终的值等于10)  


变量作用域

全局变量:在函数体外定义的变量通常为全局变量,作用范围: 从定义开始的整个程序

局部变量:在函数体内定义的变量通常为局部变量,作用范围:函数体内


软件延时

当单片机在处理某些事件的时候用户希望它处理完后间隔一段时间再去处理下一个事件,这时就需要用到延时。


常用的延时方法:


软件延时:优点使用简单;缺点浪费CPU资源

定时器延时:需要操作内部寄存器,节省CPU资源

IO口与一个字节位的数据对应关系

如果把一个字节的数据赋值给一组10口,其中数据的最低位对应此组10口的最低位,数据的最高位对应此组10口最高位。


例如

把十六进制数0xfe赋值给P1口他们的对应关系如下图所示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IK8WiA7N-1604131653159)(img/IOandByte.png?imageView2/2/w/550)]

总结:

每个LED灯对应着 2进制位置 1111 1111

每次写入程序需要通过十六进制数对变量进行赋值


例如:

点亮 LED2 LED3 LED5 的LED灯

需要 P1 = 0xe9;

对 0xe9 解析

在程序员计算器中


十进制为 233  

二进制为 1110 1001    


当转为二进制后,单片机加载该程序,会根据二进制组对相应的LED灯进行点亮,1110 1001 从高到低排列,


1110 第一个 1 代表P1^7 1为高电平 所以不亮


1110 第二个 1 代表P1^6 1为高电平 所以不亮


1110 第三个 1 代表P1^5 1为高电平 所以不亮


1110 第四个 0 代表P1^4 0为低电平 所以灯亮


1001 第一个 1 代表P1^3 1为高电平 所以不亮


1001 第二个 0 代表P1^2 0为低电平 所以灯亮


1001 第三个 0 代表P1^1 0为低电平 所以灯亮


1001 第四个 1 代表P1^0 1为高电平 所以不亮


点亮 LED6 灯

需要打开程序员计算器 对 二进制位置 1101 1111 进行换算

对应的16进制为 DF

所以 P1 = 0xdf;

即可只点亮 LED6 灯


程序部分

1.使 LED6 灯闪烁

#include


unsigned int i; // 0~65535 全局变量


void main(){ // main 函数自身会循环


while(1){ // 一般在执行程序的时候需要 写出一个while的循环体来执行代码

// P1 = 0; // 点亮P1口8个LED

// P1 = 0xe9; // 点亮  LED2 LED3 LED5灯

P1 = 0xdf; // 点亮 LED6 灯

i = 65535;

while(i--); // 自定义的软件延时

P1 = 0xff; // 1111 1111 熄灭P1口 8个LED   不能直接使用 P1 = 1; 来熄灭8个LED灯

i= 65535;

while(i--);

}


}


// while(1){ 

// P1 = 0;

// P1 = 0xff; // 1111 1111 熄灭P1口 8个LED   不能直接使用 P1 = 1; 来熄灭8个LED灯

// }

// 当去掉软件延时器的时候,软件在执行的过程中会不断的循环,LED会反复的开启和关闭,所以通过人眼是无法辨别出来的

// 但是与常开启的LED相比亮度会相对较暗


2.使 LED1 灯闪烁

#include


/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/



void delay(unsigned int z){ // 毫秒级延时函数定义

unsigned int x, y;

for (x = z; x > 0; x--){

for (y = 114; y > 0; y--){

}

}

}


void main(){ // main函数自身会循环

delay(100);


while(1){

P1 = 0XFE; // 点亮 LED1 灯

delay(100); // 延时 100毫秒  通过增加延时的时间或减少延时的时间,来控制灯的闪烁间隔   

P1 = 0xff;  // 关闭所有的LED 灯 

delay(100); // 延时 100毫秒 通过增加延时的时间或减少延时的时间,来控制灯的闪烁间隔   

}

}


3.使 LED1、3、5、7 灯亮,使 LED2、4、6、8 灯闪烁;

#include


void delay(unsigned int z){ // 毫秒级延时函数定义

unsigned int x, y;

for (x = z; x > 0; x--){

for (y = 114; y > 0; y--){

}

}

}


void main(){ // main函数自身会循环

delay(100);


while(1){


P1 = 0; // 0000 0000   // 使 LED1、2、3、4、5、6、7、8 灯亮

delay(500); // 延时 500毫秒 通过增加延时的时间或减少延时的时间,来控制流水灯的速度

P1 = 0XAA; // 1010 1010 // 关闭 2、4、6、8 灯

delay(500); // 延时 500毫秒 通过增加延时的时间或减少延时的时间,来控制流水灯的速度

}

}


推荐阅读

史海拾趣

昭华(CHA)公司的发展小趣事

昭华公司一直注重品牌建设和市场拓展。他们通过参加各种行业展会、举办技术研讨会等方式,积极宣传公司的产品和技术优势。同时,昭华公司还加强了与客户的沟通和合作,深入了解客户需求并提供定制化的解决方案。这些努力使得昭华公司的品牌知名度不断提升,市场份额也逐渐扩大。

Hartmann Codier GmbH公司的发展小趣事

随着市场需求的不断变化,昭华公司敏锐地捕捉到了防水型轻触开关的市场潜力。他们投入大量资金进行技术研发,成功开发出了一系列防水性能优异、稳定性强的防水型轻触开关。这些产品一经推出便受到了市场的热烈欢迎,为昭华公司带来了可观的利润。此外,昭华公司还不断探索新的技术路线,成功将LED与开关结合,推出了发光开关系列产品,进一步丰富了公司的产品线。

G-Two Inc公司的发展小趣事

背景:2003年,福斯特的创始人林建华,一位在纺织业和化工领域有着丰富经验的工程师,决定跨界进入光伏材料行业。当时,国内光伏组件封装所需的光伏胶膜几乎全部依赖进口,被国外几家大公司垄断。

发展:林建华凭借在热熔网膜领域的技术积累,带领团队成功研发出EVA胶膜,打破了国外技术垄断。这一技术突破不仅降低了国内光伏组件的生产成本,也为福斯特在光伏材料领域的崛起奠定了坚实基础。

成果:2008年,福斯特的EVA胶膜产品凭借优异的性能和价格优势,成功打入国内光伏组件企业的供应名录,并跻身全球EVA胶膜供应商前三强。

Excel Cell Electronic Co Ltd公司的发展小趣事

随着环保意识的提高,ECE公司积极响应环保号召,致力于推广绿色环保理念。公司采用环保材料和生产工艺,减少废弃物排放和能源消耗。同时,ECE公司还积极参与环保公益活动,宣传环保知识,提高公众的环保意识。这些努力使ECE公司成为电子行业中绿色环保的倡导者和实践者。

Densei-Lambda (TDK)公司的发展小趣事

为了拓展海外市场,ECE公司制定了国际化战略。公司积极参与国际电子展会,与国际知名企业建立合作关系,不断提升品牌知名度和国际影响力。同时,ECE公司在海外设立分支机构,加强与国际市场的联系和沟通,进一步拓展市场份额。这些努力使ECE公司的产品成功进入欧洲、北美等发达地区市场,实现了全球化布局。

ADTech公司的发展小趣事

AdTech公司深知人才是企业发展的核心动力。因此,公司一直致力于培养和引进高素质的人才,打造了一支具有丰富经验和专业技能的团队。公司通过提供良好的工作环境和福利待遇,吸引了一批优秀的研发、市场和管理人才。同时,公司还注重员工的培训和成长,为员工的职业发展提供了广阔的空间。这些措施使得公司的团队更加稳定和高效,为公司的持续发展提供了有力保障。

问答坊 | AI 解惑

基于CPLD/FPGA的半整数分频器的设计

摘要:简要介绍了CPLD/FPGA器件的特点和应用范围,并以分频比为2.5的半整数分频器的设计为例,介绍了在MAX+plus II开发软件下,利用VHDL硬件描述语言以及原理图的输入方式来设计数字逻辑电路的过程和方法。 关键词:VHDL CPLD/FPGA 数字逻辑电路 ...…

查看全部问答>

adc采样数码管显示 真拿它没辙、、只好请教各位了

#include #include \"math.h\" #define   Num_of_Results  32 typedef unsigned char uchar; typedef unsigned int uint; static uint results[Num_of_Results];      //保存ADC转换结果的数组 flo ...…

查看全部问答>

新手,求助

现在正在做氢气发生器相关的东西,遇到了个问题。 面板上要安装了流量显示,流量是根据电解电流大小来计算的,就是电流值乘以7,就是流量显示的数值。 请教各位怎么实现这个功能呢?…

查看全部问答>

看看这个熟悉的东西,解释一下

这个大家都熟悉吧!nrf2401; 再看看这个 这个功率P为啥为负号的啊?啥意思?是不是-20的时候传输的距离就很短呢?…

查看全部问答>

运营商MNC(三)

+COPN: 29401, \"T-Mobile MK\" +COPN: 61001, \"MALITEL ML\" +COPN: 61002, \"ORANGE ML\" +COPN: 27821, \"go mobile\" +COPN: 27801, \"vodafone MT\" +COPN: 41401, \"MPTGSM\" +COPN: 22004, \"T-Mobile CG\" +COPN: 42899, \"MN Mobi ...…

查看全部问答>

试着辨析一下传感器网、物联网、泛在网概念的差异

最近感知中国的驱动下,传感、泛在、物联网络得到了很多关注。传感网、物联网、泛在网从学术界来看虽然不是新名词,但当这些概念与广大老百姓接触时,大家还是容易被这几个词汇弄迷糊。于是打算浅析一次,算是抛砖引玉。      &nb ...…

查看全部问答>

语音通话系统在核磁共振设备中的运用

现目前找不到研究背景和意义啊~有哪位大大能帮帮忙么~~感激不尽啊 …

查看全部问答>

首次参照例子用PB定制系统内核,却出现奇怪错误!

我刚开始接触WinCE,今天参照《WinCE.Net 程序设计》上面实例部分用PB定制系统内核。我电脑上安装了WinCE.Net 4.2 和EVC++4.0 。步骤如下:   第一步:用PB建立系统镜像。New Platform-BSP选择EMULATOR:X86和NATIONAL GEODE:X86-custom ...…

查看全部问答>

TI 2011年MCU DAY研讨会

原谅我。本来这个贴应该发布在信息区,不过那里都没有人看 TI 2011年MCU DAY研讨会,现场可能送开发板,我们坛子都没人得到消息 http://www.lierda.com/topic/MCUDAY2011.html     没剩几天了,大家赶紧  …

查看全部问答>