50分求单片机彩灯程序

50分求单片机彩灯程序,第1张

//我想做个15路输出的彩灯,预置数为15个(10进制32767)1,

//使用P00~P07和P20~P26端口,

//设置+1(P33)和-1(P34)两个按钮,可以减到十进制32047。

//到32047后如果继续按-1按钮,可以回到32767重新进行减法。

//加法也一样,加到32767后按+1按钮可以到32047重新+1

//再设置一个按钮(P27),当P27接地时,在当前显示的数字上减去十进制数1712进行显示。

//============================

#include<reg52h>

sbit  K_1 = P3^3;       //+

sbit  K_2 = P3^4;       //-

sbit  D_1 = P2^7;       //显示方式选择

//----------------------------

void delay_ms(unsigned int n)

{

unsigned char j;

while(n--) for(j = 0; j < 230; j++);  //230是实验测试所得!

}

void main()

{

unsigned int m;

m = 32767;

while(1) {

if (D_1 == 1)  {

P2 = ~(m / 256);

P0 = ~(m % 256);

}

else  {

P2 = ~((m - 1712) / 256);

P0 = ~((m - 1712) % 256);

}

if (K_1 == 0) {

delay_ms(10);

if (K_1 == 0) {

m++;

if (m > 32767)  m = 32047;

while(K_1 == 0);

}

}

if (K_2 == 0) {

delay_ms(10);

if (K_2 == 0) {

m--;

if (m < 32047)  m = 32767;

while(K_2 == 0);

}

}

}

}

//============================

X1彩灯控制开关,用三菱FX2N系列PLC

LD X1

ANI T0

OUT T0 K20

LD x1

MOV K2M0 K2Y0

LD> K4M0 K128

ORP X1

MOVP K1 K4M0

LD T0

ROL K4M0 K1

END

ORG 0000H

LJMP MAIN

ORG 000BH

LJMP T0ISR

ORG 0030H

MAIN:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

SETB ET0

SETB EA

MOV R2,#0

SJMP $

T0ISR:

CLR TR0

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000)

SETB TR0

MOV A,R0

CJNE A,#18,T001

MOV R0,#0

T001:

MOV DPTR,#LEDTAB

MOVC A,@A+DPTR

MOV P1,A

INC R0

RETI

LEDTAB:

DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,80H,00H

DB 80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH

DB 00H,0FFH

END

DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H 这个是彩灯循环花样 其中把十六进制数换成二进制的 是一的位彩灯就亮。比如第一个01H换成二进制就是00000001,所以是第一个灯亮,依此可推出彩灯循环花样

(1)彩灯从左向右依次点亮,直至全亮。再从左向右熄灭,直至全熄。

(2)全亮全灭。

(3)从左向右依次单个点亮,再从右向左依次单个点亮。(整个过程只有一个灯亮)

以上过程不断循环。

编写一个表格,依次输出,不行吗?

利用取表的方法,使端口P1 做单一灯的变化:左移2 次,右移2 次,闪烁2 次

(延时的时间02 秒)。

汇编源程序

ORG 0

START: MOV DPTR,#TABLE

LOOP: CLR A

MOVC A,@A+DPTR

CJNE A,#01H,LOOP1

JMP START

LOOP1: MOV P1,A

MOV R3,#20

LCALL DELAY

INC DPTR

JMP LOOP

DELAY: MOV R4,#20

D1: MOV R5,#248

DJNZ R5,$

DJNZ R4,D1

DJNZ R3,DELAY

RET

TABLE: DB 0FEH,0FDH,0FBH,0F7H

DB 0EFH,0DFH,0BFH,07FH

DB 0FEH,0FDH,0FBH,0F7H

DB 0EFH,0DFH,0BFH,07FH

DB 07FH,0BFH,0DFH,0EFH

DB 0F7H,0FBH,0FDH,0FEH

DB 07FH,0BFH,0DFH,0EFH

DB 0F7H,0FBH,0FDH,0FEH

DB 00H, 0FFH,00H, 0FFH

DB 01H

END

LIBRARY ieee;

USE ieeestd_logic_1164ALL;

use ieeestd_logic_arithall;

use ieeestd_logic_unsignedall;

ENTITY color16 IS

PORT(cp,rst:IN std_LOGIC;

sel:in std_LOGIC_VECTOR(1 DOWNTO 0);

aout:OUT std_LOGIC_VECTOR(15 DOWNTO 0)

);

END color16;

ARCHITECTURE color OF color16 IS

TYPE state_1 IS (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15);

SIGNAL state_2:state_1;

BEGIN

pr_1:PROCESS (cp,rst)

BEGIN

IF rst='1' THEN

state_2<=s0;

ELSIF cp'event AND cp='1' THEN

CASE state_2 IS

WHEN s0=> state_2<=s1;

WHEN s1=> state_2<=s2;

WHEN s2=> state_2<=s3;

WHEN s3=> state_2<=s4;

WHEN s4=> state_2<=s5;

WHEN s5=> state_2<=s6;

WHEN s6=> state_2<=s7;

WHEN s7=> state_2<=s8;

WHEN s8=> state_2<=s9;

WHEN s9=> state_2<=s10;

WHEN s10=> state_2<=s11;

WHEN s11=> state_2<=s12;

WHEN s12=> state_2<=s13;

WHEN s13=> state_2<=s14;

WHEN s14=> state_2<=s15;

WHEN s15=> state_2<=s0;

END CASE;

END IF;

END PROCESS pr_1;

pr_2:PROCESS(sel,state_2)

BEGIN

if sel="00" then

-- when "00" =>

CASE state_2 IS

WHEN s0=> aout<="1000000000000000";

WHEN s1=> aout<="0100000000000000";

WHEN s2=> aout<="0010000000000000";

WHEN s3=> aout<="0001000000000000";

WHEN s4=> aout<="0000100000000000";

WHEN s5=> aout<="0000010000000000";

WHEN s6=> aout<="0000001000000000";

WHEN s7=> aout<="0000000100000000";

WHEN s8=> aout<="0000000010000000";

WHEN s9=> aout<="0000000001000000";

WHEN s10=> aout<="0000000000100000";

WHEN s11=> aout<="0000000000010000";

WHEN s12=> aout<="0000000000001000";

WHEN s13=> aout<="0000000000000100";

WHEN s14=> aout<="0000000000000010";

WHEN s15=> aout<="0000000000000001";

END CASE;

elsif sel="01" then

CASE state_2 IS

WHEN s0=> aout<="1000000000000001";

WHEN s1=> aout<="1100000000000011";

WHEN s2=> aout<="1110000000000111";

WHEN s3=> aout<="1111000000001111";

WHEN s4=> aout<="1111100000011111";

WHEN s5=> aout<="1111110000111111";

WHEN s6=> aout<="1111111001111111";

WHEN s7=> aout<="1111111111111111";

WHEN s8=> aout<="1111111001111111";

WHEN s9=> aout<="1111110000111111";

WHEN s10=> aout<="1111100000011111";

WHEN s11=> aout<="1111000000001111";

WHEN s12=> aout<="1110000000000111";

WHEN s13=> aout<="1100000000000011";

WHEN s14=> aout<="1000000000000001";

WHEN s15=> aout<="0000000000000000";

END CASE;

-- when "10"=>

elsif sel="10" then

CASE state_2 IS

WHEN s0=> aout<="1100000000000000";

WHEN s1=> aout<="0011000000000000";

WHEN s2=> aout<="0000110000000000";

WHEN s3=> aout<="0000001100000000";

WHEN s4=> aout<="0000000011000000";

WHEN s5=> aout<="0000000000110000";

WHEN s6=> aout<="0000000000001100";

WHEN s7=> aout<="0000000000000011";

WHEN s8=> aout<="0000000000000011";

WHEN s9=> aout<="0000000000001100";

WHEN s10=> aout<="0000000000110000";

WHEN s11=> aout<="0000000011000000";

WHEN s12=> aout<="0000001100000000";

WHEN s13=> aout<="0000110000000000";

WHEN s14=> aout<="0011000000000000";

WHEN s15=> aout<="1100000000000000";

END CASE;

-- when "11"=>

elsif sel="11" then

CASE state_2 IS

WHEN s0=> aout<="1111111111111111";

WHEN s1=> aout<="0000000000000000";

WHEN s2=> aout<="1111111111111111";

WHEN s3=> aout<="0000000000000000";

WHEN s4=> aout<="1111111111111111";

WHEN s5=> aout<="0000000000000000";

WHEN s6=> aout<="1111111111111111";

WHEN s7=> aout<="0000000000000000";

WHEN s8=> aout<="1111111111111111";

WHEN s9=> aout<="0000000000000000";

WHEN s10=> aout<="1111111111111111";

WHEN s11=> aout<="0000000000000000";

WHEN s12=> aout<="1111111111111111";

WHEN s13=> aout<="0000000000000000";

WHEN s14=> aout<="1111111111111111";

WHEN s15=> aout<="0000000000000000";

END CASE;

end if;

END PROCESS pr_2;

END color;

以上就是关于50分求单片机彩灯程序全部的内容,包括:50分求单片机彩灯程序、彩灯控制程序PLC、如何用汇编语言写一个循环彩灯的程序,采用定时器方式1工作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9343334.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存