C51编程3-输出电平(点亮LED3)

发布者:平和的心态最新更新时间:2022-06-22 来源: eefocus关键字:C51  编程  点亮LED 手机看文章 扫描二维码
随时随地手机看文章

P2口的I/O口连接8个led,假设现在点亮第1个led(LED1),而其他led不亮。不用C51的位变量进行直接操作,而是使用标准51的写法,会有以下的代码。


#include "reg52.h"

void main(){  

    P2 = 0xfe;

 

}


假设有需要要最后一个led(LED8)点亮,我们会写以下的代码。


#include "reg52.h"

void main(){  

    P2 = 0x7f;

}


现在提出一个新的需求,先点亮LED1,再点亮LED8,点亮LED8,LED1也是正常工作的。聪明的你,肯定很快下出以下代码。


#include "reg52.h"

void main(){

    P2 = 0xfe;

    P2 = 0x7f;

}


当我们在执行上面的程序时,发现LED1会发出微弱的亮度,而LED8正常发光。这是由于程序执行完语句:P2 = 0x7f后,进行主函数的返回后(会执行延时一段时间),然后重新进入main函数,执行P2 = 0xfe 与P2=0x7f。


如果我们想看到真实的结果,可以在P2 = 0x7f,后面加入while(1)语句,执行完后P2 = 0x7f,程序一直执行while(1)循环。


#include "reg52.h"

void main(){

    P2 = 0xfe;

    P2 = 0x7f;  

     while(1);

}

 

在上面的程序中可以发现,当我们将一个数值赋值给P2会将原来的数值进行覆盖(先是LED1先被置0,LED2~8被置1;然后是LED8先被置0,LED1~7被置1)。


如果我们需要在第二次写LED8置1,不影响LED1,可以通过C语言提供的位操作。将上面程序写成下面的代码。


#include "reg52.h"

void main(){

    P2 = 0xfe;

    P2 &=0x7f; 

     while(1);

}

 

P2 & = 0xf7实际上是 P2 = P2 & 0xf7,执行的最后结果是P2 = 0x7e,具体执行如下图所示;

标准C可以做到位控制,而C51也可以做到位控制,那么我们在编程的时候更偏向哪一个呢?其实是要I/O口用来做什么使用的。假设某I/O被用作通讯的,那么使用C51的位变量,对该I/O进行操作会更简单很多;假设只是用作同时控制多个led的亮灭,为了写的简单一些可以直接用标准C的写法。


总结: 标准C可以做到位控制,而C51也可以做到位控制,我们编写程序应该考虑程序的需求,而不是一刀切,都是用标准C或者都是C51。

关键字:C51  编程  点亮LED 引用地址:C51编程3-输出电平(点亮LED3)

上一篇:C51编程2-输出电平(点亮LED2)
下一篇:C51编程4-输入电平(独立按键)

推荐阅读最新更新时间:2024-11-05 06:34

VB与MATLAB混合编程探讨
摘要:介绍了VB与MATLAB混合编程的方法,二者结合可以充分利用VB的方便快捷和MATLAB软件工具箱的强大功能。 关键词: VB VC++ MATLAB DLL 编译 MATLAB Add-in MATLAB是MathWorks公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。但是MATLAB语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。 Visual Basic作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。因此实现VB与MATLAB混合编程,可以为科研工作和工程应用提供有力的
[嵌入式]
多核协会正草拟嵌入式多核编程指南
多核协会正努力为嵌入式多核程序员制定最佳编程规则,该工作组希望一年内在并行软件领域制定一份指南来解决一些棘手问题。 CriticalBlue(一家提供软件设计工具的公司)首席执行官及该工作组组长David Stewart说: “我把这看作是多核编程人员的相关说明,我们会尝试从产业重要交叉领域达成共识,找到最重要的10到20个问题并寻求最佳的解决方式。” 参与的公司包括飞思卡尔、Imperas、英特尔、诺基亚西门子网络、PolyCore软件、德州仪器和风河公司等。该小组将于6月10日在阿纳海姆召开的设计自动化研讨会上举行公开会议,就有关问题展开广泛讨论。 多核协会主席Markus Levy说:
[嵌入式]
多核协会正草拟嵌入式多核<font color='red'>编程</font>指南
ST可编程12通道RGB-LED驱动器—让设备更明亮
意法半导体 12通道LED驱动器LED1202采用专利技术,可防止在“流水灯”或“跑马灯”LED动画特效中出现分散注意力的闪光现象,使智能家居设备、穿戴设备和小家电的人机交互更流畅、更自然。 LED1202驱动器可存储八个可编程照明模式和序列,并独立于主控制器之外运行,使主机系统能够节省电能,同时连续运行复杂的照明效果。内部12位PWM调光可实现对编程序列的精确控制,主控制器可设置8位数值,通过驱动器的I2C接口实现模拟调光。设计完整的驱动电路只需极少的外部元件。 LED1202有12个输出通道,单个器件可驱动4颗RGB LED灯珠,每条通道的最大输出电流为20mA。通过创新的同步功能,可将多达8个LED1202驱动
[物联网]
ST可<font color='red'>编程</font>12通道RGB-<font color='red'>LED</font>驱动器—让设备更明亮
LabVIEW编程实时控制KEITHLEY 6517A静电计
基于GPIB接口总线,采用6517A中最简单的按钮命令,在LabVIEW5.1平台上实现了对6517A面板操作的实时控制和信息的同步显示。   关键词:LabVIEW编程;计算机模拟;6517A静电计 Hefei 230029, China)   LabVIEW提供了任意一个程序调用另一个LabVIEW程序的办法,即将后者作为一个子程序(即subVI)。因此在实验站的数据采集主程序中,将模拟的6517A作为主程序调用的subVI嵌入其中(当然这个子程序完全可以不依赖于主程序而能够独立运行)。根据主程序的要求,6517A的subVI具备以下特点:   代码简洁,执行效率高;完全能实现真实面板上各个按键的功能,并可以基本同步显
[测试测量]
LabVIEW<font color='red'>编程</font>实时控制KEITHLEY 6517A静电计
不可不知的小贴士:单片机与PLC编程的区别
单片机 与PLC的程序设计有很大的区别,单片机的全部程序都是用户设计的,PLC的程序包括系统程序(西门子称为操作系统)和用户程序。操作系统用来组织与具体的控制任务无关的所有的CPU功能。操作系统的任务包括处理启动过程,刷新输入/输出过程映像,调用用户程序,检测中断事件和调用中断组织块,检测和处理错误,管理存储器,以及处理通信任务等。 PLC 的很多功能,例如扫描工作方式、定时器功能和中断处理,是操作系统完成的。在画流程图时,应考虑这个问题。 PLC的开关量控制系统的程序用顺序功能图来描述比较简洁。用流程图来描述PLC的用户程序原则上也是可以的,但是应区分哪些功能是操作系统完成的,哪些是用户程序实现的。 例如有人问是否需要用跳转指令
[电源管理]
赛灵思:倡导All programmable概念 让一切皆可编程
    在摩尔定律创始人戈登摩尔承认摩尔定律或在10年内失效之际,赛灵思却再一次超越摩尔定律,实现了一个又一个创新的里程碑。 今年3月,赛灵思首款28nm FPGA开始量产,使赛灵思的客户能够比以往任何时候都更快地开始投产他们自己的产品,同时也能比以往任何时候更快地满足他们客户的需求。 4月,赛灵思发布Vivado设计套件,Vivado突破了可编程系统集成度和实现速度两方面的重大瓶颈,将设计生产力提高到同类竞争开发环境的4倍。 5月,赛灵思推出全球首款3D异构All Programmable FPGA器件,内含28Gbps收发器的Virtex-7 H580T FPGA正式出货,FPGA行业的历史再次被刷新。 同期,
[嵌入式]
基于LabVIEW编程的以太网远程温度监测
引 言 在工业生产中,经常要对温度进行实时监测,虽然可以利用串行通信标准RS232和RS485等实现短距离监测,但遇到高温、高噪声或者空间狭小等温度环境时,由于协议自身传输速率和传输距离的限制,很难达到实现远程、实时监测的目的。为彻底解决该问题,本系统采用Microchip公司的以太网接口模块ENC28J60,将温度信息通过以太网络传输到远程主机,实现高速、实时的远程温度监测。 1 系统结构 如图1所示,系统由温度传感器、报警电路、LCD显示电路、ATmegal28单片机、ENC28J60接口模块、网络设备以及监测计算机等部分组成。系统的核心是Atmel公司的高档8位AVR单片机ATMegal28,晶体振荡频率为11.05
[测试测量]
基于LabVIEW<font color='red'>编程</font>的以太网远程温度监测
51单片机C编程(九、8X8点阵显示)
//-------------------8X8点阵显示程序---------------------- //-------------------2009年4月23日------------------------ 显示 0 从右向左移动,proteus仿真电路如下: #include reg51.h #define uchar unsigned char #define HANG P1 //P1口为每一列中的位选 #define LIE P0 //P0为列选 void delay(uchar); void main() { int i=0; while(1) { //-----------
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved