在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写

在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写,第1张

早上起来没有什么事,跟你写个简单的供您学习与参考吧,这个程序是对应某个按键按下,对应序列号的灯就亮起来,释放按键,则灯灭,都是低电平有效。至于其他功能,你可以自己扩展吧。我只写2个,8个太多了,懒的动了。

#include<REG51H>

#include<stdioh>

sbit KEY1 = P1^0;

sbit KEY2 = P1^1;

sbit LED1 = P2^0;

sbit LED2 = P2^1;

void main(void)

{

//有必要的话,这里先对单片机各类寄存器进行初始化,这里因为简单,未做相关初始化工作

for(;;)

{

if(KEY1==0)//如果按键1被按下

{LED1=0;}//开启LED1灯

else{LED1=1;}//否则关闭LED1等,以下雷同

if(KEY2==0)

{LED2=0;}

else{LED2=1;}

}//end main-for(;;)

}//end main;

编写程序时加入次数。

单片机想要一个开关,控制两个程序,可以在编写程序时加入命令,按一次控制一个程序,按第二次时控制另外一个程序。

单片机全程单片微型计算机也被称为微控制器,在连接时需要通过,不同的单元命令完成具体指令。

SET RST指令。

程序运行结束复位M0和对C0进行清零。如果这时按X0,程序重新运行。程序结束时没有对M0进行复位,所以程序运行出现了问题。

增加停止按钮的目的是为了程序随时可控,没有这个停止按钮,启动后只能靠程序循环完成后自己停止了。如果感觉没有必要,把X1的常闭点删除就可以了。程序在C0计数到10时自动复位,0~9计数时Y0有输出,刚好10次亮,10灭,1分钟的时间

存储器

存储器是具有记忆功能的半导体电路,它的作用是存放系统程序、用户程序、逻辑变量和其他一些信息。其中系统程序是控制PLC实现各种功能的程序,由PLC生产厂家编写,并固化到只读存储器(ROM)中,用户不能访问。

输入单元是PLC与被控设备相连的输入接口,是信号进入PLC的桥梁,它的作用是接收主令元件、检测元件传来的信号。输入的类型有直流输入、交流输入、交直流输入。

板设计的定时开关控制器具有简单易制、价格低廉、控制点数多、控制时间可精确到秒等特点:

1.主板电路部分

本电路主要是利用单片机AT89C2051(-24PI)作为主控制元件,通过外围电路控制用电设备的电源,以达到定时开、关机的目的。AT89C2051具有体积小、功能强大、运行速度快、价格低廉等优点,非常适合制作集成度较高的控制电路。图1为主电路原理图,图2为按其制作的主板(双面)大小只有95mm×70mm的器件位置图。主板电路包括MCUAT89C2051、键盘与显示、输入与输出口、复位和电源滤波等电路组成。

(1)键盘与显示显示电路由U2、U3、Q1~Q7和L1A、L2A组成。U2为BCD-7段译码器(74LS47),通过单片机U1的P14~P17口将要显示字符的BCD码输出到U2的四个输入端,经U2译码后输出相应的笔段驱动LED数码管(共阳)。LED数码管显示采用动态扫描方式,即在某一时刻,只有一个数码管被点亮。数码管的位选信号由单片机U1的P33~P35输出,经U3(74HC138)译码后通过Q1~Q6放大,驱动相应的数码管。R17~R24为限流电阻。

由于U2只能输出7段笔段码,而数码管除了七段笔段外,还要控制点亮小数点,因此,小数点必须有另外的驱动电路来完成,在这里,通过Q7来驱动小数点。当需要点亮小数点时,在U1的P13输出高电平即可。

键盘电路跟显示电路一样,采用扫描方式,利用动态显示时的数码管驱动位置信号来判断相应按键的状态。U1的P33~P35口输出的BCD码经U3译码后,相应Y口呈低电平,而U1的P37口平时为高电平(由于R8上拉),当某一键按下时,P37被下拉为低电平,这时MCU利用程序查询P37是否为低电平,如果P37为低电平,就读回U1P33~P35口的值(从缓冲区读取),则可判断是哪个按键按下,然后调用相应的处理程序进行处理。

(2)控制输出、复位与电源滤波电路MCU对控制的输出是通过P30~P32口完成的。程序开始时这三个口的输出状态是低电平,MCU通过程序查询三路输出的ON或OFF状态预置时间是否已到,如果已到时间,则改变相应的输出状态,就完成了对外部电路的控制。复位电路如图1左上角所示,C3和R25完成上电复位,S6为手动复位,按键输入干扰和抖动的预防是由软件完成的。+5V电源由JP2输入,经C4~C9滤波后给U1和其它器件供电。

2.电源与控制电路

电源及控制电路。其中,市电经总开关K后由B降压、V1整流、C11~C14滤波、U4、U5稳压后给主板和控制电路板提供稳定的工作电源;主板送过来的三路控制信号通过Q12~Q14分别控制继电器J1、J2、J3,对外部电路实施直接控制。继电器这里没有给出具体型号,您可根据耐压及通流大小选用相应的继电器,如在大电流和强电磁场干扰的环境里工作,最好利用中间继电器来间接控制。

3.程序软件工作过程

(1)秒脉冲发生器秒脉冲发生器是由定时器T0和内存空间TT0配合完成的。T0工作于16位计数器模式,当T0向上计数由全1变为全0时产生中断,本程序中T0的初值为0DC00H,大约001s中断一次。这里使用的晶振频率为110592MHz,由此可计算出日误差约为078s。

图4为程序流程图。系统产生中断后,首先保存ACC和PSW的值,然后为T0重装初值,判断中断次数是否小于100,是则转出中断服务,反之则为秒计数器加1,秒计数器如果大于59,则为分计数器加1,同时秒计数器清0。同样分计数器如大于59则为时计数器加1,同时分计数器清0,时计数器如大于23则清0并转出中断服务。T0中断100次的时间刚好为1秒钟。

(2)主程序上电复位过程:首先P0~P2口全部置1,P3口高5位置1,低3位置0。设置定时器T0工作于16位计数器模式,并赋初值TH0=0DCH,TL0=00H,关闭外部中断和串行口中断,时间计数器TS、TM、TH清0,所有预置时间存储区全部赋值FFH,至此所有初始化工作完成。

主程序工作过程:首先循环进行六个数码管扫描显示(DISPLY段),然后比较所有预置时间(COMP段)是否与当前时间相等,如相等则转向相应处理程序。在比较完成(或处理完成)后判断有无按键(PP2段),没有则返回继续显示、比较、判断;有按键则转向相应处理程序。按键转移采用偏移量加表格跳转转移法(KEY段),简单、明了。预置时间比较则采用逐一比较法,即对每一个预置值进行比较,如相等则做相应处理。具体比较时(COMP1段)先比较TH值,如不相等则直接转出并置“时间到”标志CCB为0,如TH、TM、TS全部对应相等,则置该标志为1。

本程序在显示及按键处理(设置过程)中巧妙使用R1寄存器作为公用地址寄存工具,对实时时间和预置时间的显示和修改调用同一程序完成,使源代码长度大大缩短,提高了程序的可读性和运行效率。在本刊的网站(>

#include<reg51h>

sbit

a=P1^0;

sbit

b=P1^1;

int

i,k;

void

delay(int

z)

{

for(i=z;i>0;i--)

for(k=100;k>0;k--);

}

void

main()

{

while(1)

{

a=1,b=0;

delay(随便写个数,大于0的,小于30000,用来控制灯闪烁的快慢);

a=0,b=0;

delay(和上面那个括号里的数一样);

}

}

注意P字母是大写的,各个标点是英文的

以上就是关于在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写全部的内容,包括:在C51单片机中编写8个开关控制8个小灯的程序,用C语言和汇编语言两种编写、单片机一个开关怎么控制两个程序、plc利用一个开关控制一盏灯亮灭等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9273036.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存