plc用移动指令实现数码管依次亮

plc用移动指令实现数码管依次亮,第1张

字节移位指令一共有四个循环右移、循环左移、右移、左移循环移位指令(左、右)八个位是循环移动的也就是说循环左移1位就是向左移动1位 最高位移到最低位处循环右移1位相应的位向右移动1位最低位移到最高位 移位指令是PLC的一条重要指令 ,可用于步进顺序控制 ,利用这种顺序控制方式可实现其它一些控制功能 ,下面举两例说明移位指令的应用。1 循环闪灯程序对八只灯进行循环控制。要求从第一个灯开始间隔 5秒逐个顺序点亮 ,等八只灯全部点亮后又从第一个灯开始间隔 5秒逐个熄灭

先选好位选信号,可以控制P20、P21、P22、P23个数码管的位选信号,再选好段选信号(0点亮,1灭),即P0~P7这8个引脚控制数码管的段选信号,要数码管显示什么内容,就可以了。

数码管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。管中充以低压气体,通常大部分为氖加上一些汞和/或氩。给某一个阴极充电,数码管就会发出颜色光,视乎管内的气体而定,一般都是橙色或绿色。

数码管的最常见形式有10个阴极,形状为数字0到9,某些数码管还有一个或两个小数点。然而也有其他类型的数码管显示字母、标记和符号。如一种“数码管”,其阴极为一个模板制成的面具,上面有数字形状的孔。

数码管按发光二极管单元连接方式可分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到地线GND上。

首先你这个数码管是共阳的还是共阴的,led1~8是接138还是锁存器,如果是138的话请提供接ABC的输入IO,然后P0口按照编码表来赋值,对7来说共阳的话就是0xF8,共阴是0x07,一般是将编码声明为常量数组 code unsigned char[],以后用的时候取出对应的编码就可以了。下面是示例程序:

#include <reg51.h>

     #include <intrins.h>

     #include<math.h>

     unsigned char data dis_digit //dis_digit---位选通值, 传送到P2口用于选通当

                                   //前数码管的数值, 如等于0xfe时,选通P2.0口数码管 

     unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3

     0x99,0x92,0x82,0xf8,0x80,0x90, 0xff}// 4, 5, 6, 7, 8, 9, off 

     unsigned char data dis_buf[8] // dis_buf --- 显于缓冲区基地址 

     unsigned char data dis_index // dis_index --- 显示索引, 用于标识当前显示的数码                                     //管和缓冲区的偏移量 

     Void delay(int t)

     {

     int i

     while(t--) {

     for(i=0i<120i++)

     {}

     }

     }

     Void main()

     {

     P0 = 0xff

     P2 = 0xff

     TMOD = 0x01 //定时器0工作于方式1

     TH0 = 0x8C

     TL0 = 0x8B

     IE = 0x8A //开总中断和定时器1中断允许 

     dis_buf[0] = dis_code[0x1]

     dis_buf[1] = dis_code[0x2]

     dis_buf[2] = dis_code[0x3]

     dis_buf[3] = dis_code[0x4]

     dis_buf[4] = dis_code[0x5] 

     dis_buf[5] = dis_code[0x6]

     dis_buf[6] = dis_code[0x7]

     dis_buf[7] = dis_code[0x8]

     dis_digit = 0xf9 //控制在数码管上显示的数字效果,按位 

     dis_index = 0

     TR0 = 1

     while(1)

     }

     Void timer0() interrupt 1

     //定时器0中断服务程序, 用于数码管的动态扫描 

     //dis_index --- 显示索引, 用于标识当前显示的数码管和缓冲区的偏移量 

     //dis_digit --- 位选通值, 传送到P2口用于选通当前数码管的数值, 

     //如等于0xfe时, 选通  P2.0口数码管 dis_buf --- 显于缓冲区基地址 

     {

     TH0 = 0x8C

     TL0 = 0x8B

     P2 = 0xff // 先关闭所有数码管 

     P0 = dis_buf[dis_index] // 显示代码传送到P0口 

     P2 = dis_digit 

     dis_digit = _crol_(dis_digit,2) // 位选通值左移, 下次中断时选通下一位数码管 

     delay(500) 

     dis_index++ 

     dis_index &= 0x07 // 8个数码管全部扫描完一遍之后,再回到第一个开始下一次扫描

     }


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

原文地址:https://54852.com/yw/7823397.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存