600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基于51单片机的汇编/C程序:拨码开关控制八位LED实现流水灯

基于51单片机的汇编/C程序:拨码开关控制八位LED实现流水灯

时间:2023-11-07 18:46:18

相关推荐

基于51单片机的汇编/C程序:拨码开关控制八位LED实现流水灯

基于51单片机的汇编程序:拨码开关控制八位LED实现流水灯

-03-08,51单片机学习笔记

功能

打开K1循环左移,打开K2循环右移,打开K3两侧到中心来回点亮,打开K4单双数位置交替点亮。拨码开关优先级:K1>K2>K3>K4。

视频展示

【用汇编写流水灯:基于51单片机的拨码开关控制八位LED流水灯实验】

开发环境

Keil C51

硬件连接方式

汇编代码1

; LED点亮方式:低电平点亮;打开K1循环左移,打开K2循环右移,打开K3两侧到中心来回点亮,打开K4单双数位置交替点亮KEY1BITP3.4KEY2BITP3.5KEY3BITP3.6KEY4BITP3.7ORG 0000HAJMPMAINORG 0030HMAIN:MOVA,#0FEHK1: JB KEY1,K2MOVP1,AACALLDELAY_1SRLASJMPK1K2: JB KEY2,K3MOVP1,AACALLDELAY_1SRRASJMPK2K3:JBKEY3,K4MOV A,#07EH MOVP1,AACALLDELAY_1SJBKEY3,K4MOVA,#0BDHMOVP1,AACALLDELAY_1SJBKEY3,K4MOVA,#0DBHMOVP1,AACALLDELAY_1SJBKEY3,K4MOVA,#0E7HMOVP1,AACALLDELAY_1SJBKEY3,K4MOVA,#0DBHMOVP1,AACALLDELAY_1SJBKEY3,K4MOVA,#0BDHMOVP1,AACALLDELAY_1SJBKEY3,K4SJMPK3K4:JBKEY4,OVERMOVA,#55HMOVP1,AACALLDELAY_1SJBKEY4,OVERMOVA,#0AAHMOVP1,AACALLDELAY_1SJBKEY4,OVERSJMPK4OVER:MOVA,#0FEHAJMPK1DELAY_1S:MOVR5,#20DL1:MOVR6,#100DL0:MOVR7,#248DJNZR7,$;寄存器R7减1,不为零转移到当前地址DJNZR6,DL0 ;寄存器R6减1,不为零转移到DL0DJNZR5,DL1 ;寄存器R5减1,不为零转移到DL1RET ;R7从250减到0时,R6减1,R6从100减到0时,R5减1,R5从20减到0时,子程序返回END

汇编代码2

; LED点亮方式:低电平点亮;按下K1循环左移,按下K2循环右移,按下K3两侧到中心来回点亮,按下K4单双数位置交替点亮ORG 0000HAJMPMAINORG 0030HMAIN:MOVR0,#0FEHMOVR1,#7FHMOVR2,#7FHMOVR4,#0FEHMOVR3,#55hLP:MOVP3,#0FFHMOVA,P3JNBACC.4,K1JNBACC.5,K2JNBACC.6,K3JNBACC.7,K4SJMPLPK1:MOVA,R0MOVP1,AACALLDELAY_1SRLAMOVR0,ASJMPLPK2:MOVA,R1MOVP1,AACALLDELAY_1SRRAMOVR1,ASJMPLPK3:MOV A,R2ANLA,R4MOVP1,AACALLDELAY_1SMOV A,R2RRAMOVR2,AMOVA,R4RLAMOVR4,ASJMPLPK4:MOVA,R3MOVP1,AACALL DELAY_1SCPLAMOVR3,ASJMPLPDELAY_1S:MOVR5,#20DL1:MOVR6,#100DL0:MOVR7,#100DJNZR7,$;寄存器R7减1,不为零转移到当前地址DJNZR6,DL0 ;寄存器R6减1,不为零转移到DL0DJNZR5,DL1 ;寄存器R5减1,不为零转移到DL1RET ;R7从250减到0时,R6减1,R6从100减到0时,R5减1,R5从20减到0时,子程序返回END

C代码实现

#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit K1 = P3^4;sbit K2 = P3^5;sbit K3 = P3^6;sbit K4 = P3^7;uchar L_leftmove[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};uchar L_center2side[]={0x7E,0xBD,0xDB,0xE7,0xDB,0xBD};uchar L_odd2even[]={0x55,0xAA};/*1MS为单位的延时程序*/void delay_1ms(uchar x){uchar j;while(x--){for(j=0;j<125;j++){;}} }uchar i=0;void ROL_LED(){if(i>7){i=0;}P1=L_leftmove[i];i++;}void ROR_LED(){if(i>7){i=0;}P1=L_leftmove[7-i];i++;}void Center2Side_LED(){if(i>5){i=0;}P1=L_center2side[i];i++;}void Odd2Even_LED(){if(i>1){i=0;}P1=L_odd2even[i];i++;}void KEY_Ctrl(){if(K1==0){ROL_LED();}else if(K2==0){ROR_LED();}else if(K3==0){Center2Side_LED();}else if(K4==0){Odd2Even_LED();}}void main(){P3|=0xF0;//按键初始化置1while(1){KEY_Ctrl();delay_1ms(200);}}

写在最后:

本文仅为个人学习笔记,纰漏之处,欢迎斧正!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。