PC(单片机跑马灯实验汇编程序)
单片机跑马灯(流水灯)控制实验报告
单片机跑马灯(流水灯)控制实验报告实验目的:本实验旨在通过使用单片机对LED灯进行控制,实现跑马灯(流水灯)的效果,同时熟悉单片机编程和IO口的使用。
实验器材:1)STC89C52单片机2)最基本的LED灯3)面包板4)若干跳线实验过程:1.硬件连接:将单片机的P2口与面包板上的相应位置连接,再将LED灯接入面包板中。
2.编写程序:按照题目要求编写所需程序。
3.单片机烧录:将程序烧录进单片机中,即可实现跑马灯效果。
程序详解:1. 由于LED灯是呈现亮灭效果,我们要编写程序来控制LED的亮灭状态。
2. 在程序中,我们通过P2口控制LED灯的亮灭状态。
例如,若要让LED1亮,我们就将P2口的第一个引脚设置为低电平(0),此时LED1就会发光。
同样地,若要LED2,LED3等依次点亮,则需要将P2口的第二个、第三个引脚设置为低电平,依此类推即可。
3. 接下来,我们要实现每个LED灯的亮灭时间间隔,并实现跑马灯的效果。
4. 在本实验中,我们采用了计时器中断的方式来实现灯光的控制,即在定时器中断函数中对P2口进行控制,这样可以方便地控制灯亮灭时间和亮度。
通过改变定时器中断的时间,可以改变LED灯的亮灭时间;通过改变P2口的控制顺序,可以实现跑马灯效果。
5. 整个程序比较简单,具体的代码实现可以参考以下程序:#include <REG52.H>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void Delay1ms(uchar _ms); void InitTimer0();sbit led1=P2^0;sbit led2=P2^1;sbit led3=P2^3;sbit led4=P2^4;sbit led5=P2^5;sbit led6=P2^6;sbit led7=P2^7;void InitTimer0(){TMOD=0x01;TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1;ET0=1;TR0=1;}void Timer0() interrupt 1 {static uint i;TH0=(65536-50000)/256; TL0=(65536-50000)%256;i++;if(i%2==0){led1=~led1;}if(i%4==0){led2=~led2;}if(i%6==0){led3=~led3;}if(i%8==0){led4=~led4;}if(i%10==0){led5=~led5;}if(i%12==0){led6=~led6;}if(i%14==0){led7=~led7;}}void Delay1ms(uchar _ms){uchar i;while(_ms--){i=130;while(i--);}}实验总结:通过本次实验,我们掌握了单片机控制跑马灯(流水灯)的方法,对单片机编程和IO 口的使用有了更深入的了解。
实验报告跑马灯
实验报告一:实验名称跑马灯电路二:实验目的(1)掌握proteus软件的使用方法;(2)调试跑马灯电路的汇编语言;(3)绘制跑马灯原理图,实现电路的实现;三:实验要求跑马灯电路,即实现p1口上的8个发光二极管循环闪亮的电路。
四:实验仪器计算机,keil c51软件,proteus软件。
五:参考程序ORG 0000H ;程序入口AJMP MAIN ;转主程序ORG 30HMAIN:MOV R2,#16 ;将16送给R2MOV A,#0FEH ;将0FEH送给累加器ALOOP:MOV P1,A ;循环,将累加器A的值送给p1LCALL D1 ;长调子程序D1RL A ;累加器循环左移DJNZ R2,LOOP ;R2减1非0则转移到LOOPD1: MOV R4,#10 ;将10送给R4D2: MOV R5,#100 ;将100送给R5D3: MOV R6,#249 ;将249送给R6DJNZ R6,$ ;R6减1不为0,则原地等待DJNZ R5,D3 ;R5减1不为0,则转到D3DJNZ R4,D2 ;R4减1不为0,则转到D2RET ;返回主程序END六:试验步骤(1)进入keil c51系统的操作环境,并建立一个工程,输入汇编程序,对程序进行编译和链接:(2):调试无误后运行程序并检查运行结果,检查正确后生成hex文件:(3):在软件proteus中,绘制电路图,找到此实验需要用到的主要元器件及其符号:1:单片机AT89C51;2:电阻RES 10k;3:电容 CAP 30uF;4:晶振 CRYSTAL ;5;排阻 RESPACK-8;6:开关 BUTTON;7:发光二级管 LED;(4)绘制电路仿真图,然后将生成的hex文件下载到AT89C51中,并开始仿真,结果如下:七:实验结果程序仿真完成后,发光二级管会有规律的从左向右循环闪亮,直到时间结束后才会停下。
51单片机8个跑马灯程序汇编设计思路
【51单片机8个跑马灯程序汇编设计思路】1. 引言在嵌入式系统中,跑马灯程序是一个非常常见且基础的程序设计。
通过控制LED灯的亮灭顺序,实现灯光在一组灯中顺序轮流亮起的效果。
其中,51单片机是一种常用的嵌入式系统开发评台,本文将探讨如何通过汇编语言设计实现8个跑马灯程序的思路和方法。
2. 分析题目我们需要对题目进行细致的分析。
51单片机8个跑马灯程序要求我们设计并实现一个程序,能够控制8个LED灯依次轮流亮起的效果。
这意味着我们需要对LED灯进行控制,并且需要考虑如何实现循环、延时等功能。
3. LED灯控制在实现跑马灯程序时,首先需要考虑如何控制LED灯的亮灭。
一种常见的方法是通过I/O口控制LED灯的高低电平,从而实现灯的亮灭。
我们需要了解51单片机的I/O口控制方式,并结合LED灯的连接方式进行设计。
4. 循环控制跑马灯程序的核心在于实现LED灯的依次轮流亮起。
这就需要我们设计循环控制的程序结构。
在汇编语言中,可以通过跳转指令和计数器来实现循环效果,我们需要考虑如何设计循环的次数和顺序。
5. 延时控制为了让人眼能够观察到LED灯的亮灭效果,我们需要在程序中添加延时控制。
这需要我们了解51单片机的定时器控制和时钟频率,并根据LED灯的亮度要求设计合适的延时程序。
6. 汇编设计思路在进行汇编设计时,可以按照以下步骤进行:1)设置I/O口控制LED灯的引脚,确定LED的连接方式;2)设计循环控制结构,确定LED灯的顺序和次数;3)添加延时程序,控制LED灯亮灭的时间间隔;4)编写中断程序,处理定时器中断等事件;5)调试程序,验证跑马灯效果是否符合要求。
7. 个人观点和理解通过设计这个跑马灯程序,我深切体会到了汇编语言的精妙之处。
通过对硬件的直接控制和对程序结构的精心设计,我感受到了嵌入式系统开发中的乐趣和挑战。
而对于初学者来说,设计跑马灯程序也是一个很好的学习过程,可以加深对于51单片机结构和编程思想的理解。
单片机12位跑马灯的程序
1.12位跑马灯K1 BIT P3.0K2 BIT P3.1K3 BIT P3.2QRG 0000HLJMP MAINQRG 0030HMAIN: MOV 30H,#0FFH MOV 31H,#0FFH MOV 40H,#0FFHMOV 41H,#0FFHJNB K1,LOOP1JNB K2,LOOP2JNB K3,LOOP3LJMP MAINLOOP1:MOV A,30H MOV P1,AMOV A,31HMOV P2,ALCALL DELAYSETB CMOV A,30HRLC AMOV 30H,AMOV A,31HRLC AMOV 31H,AJNB ACC.4,MAIN LJMP LOOP1LOOP2:MOV A ,40H MOV P1,AMOV A,,41HMOV P2,ALCALL DELAYSETB CMOV A,41HRRC,AMOV 40H,AJNC MAINCJMP LOOP2LOOP3 :MOV A ,30H MOV P1,AMOV A 31HMOV P2 ,ALCALL DELAYSETB CMOV A ,30HRLC AMOV 30H,AMOV A ,31HRLC AMOV 31H ,AJB ACC.4 LOOP3LOOP4:LOOP22.秒表显示;量程0----999.9精度1msK1控制开断K2暂停--------------------------------------------------------------------------------; 1、设计一个实时时钟,显示“时分秒”;; 2、单片机晶振fosc=11.0592MHz;; 3、要求:利用开关K1、K2、K3进行功能控制,当K1闭合时,实现秒表计时功能,; K2闭合时,暂停计时,K2断开后,继续计时,K3闭合时,秒表清零。
;-----------------------------------------------------------------------; 8255CS-->P2.7, ADD1-->A1, ADD0-->A0, K1-->P1.0, K2-->P1.1,K3-->P1.2;-----------------------------------------------------------------------TIME_ML EQU 34H ;秒表计时单元低位TIME_MH EQU 35H ;秒表计时单元高位TIME_MB EQU 36H ;秒表50ms计时单元XBUF EQU 38H ;显示缓冲区JISHI_W BIT 01H ;秒表计时开始标志位K1 BIT P1.0 ;定义开关量K2 BIT P1.1K3 BIT P1.2ORG 0000HLJMP MAINORG 000BHLJMP INTT0MAIN:MOV SP,#0A0HMOV TMOD,#01HMOV TH0,#41HMOV TL0,#0D9H ;50msSETB ET0SETB EASETB TR0;-------------------MOV R0,#30H ;显示缓冲器首址CLR AMOV R7,#20HCHU:MOV @R0,A ;清缓冲区INC R0DJNZ R7,CHU;-------------------MOV DPTR,#7FFFH ;8255初始化MOV A,#80H ;控制字MOVX @DPTR,A;*************************************************STAR:JB K1 INITLCALL DISPJB K2,M1 ;K2断开?CLR JISHI_W ;清计时允许位SJMP M2M1:SETB JISHI_W ;秒表计时允许M2:JB K3,M3 ;K3断开?MOV TIME_ML,#00 ;计时单元清零MOV TIME_MH,#00MOV TIME_MB,#00H ;清次数单元M3:LJMP STARINIT: MOV XBUF,#11HMOV XBUF+1,#11HMOV XBUF+2,#11HMOV XBUF+3,#11H ;显示器高4位暗码LCALL DISPSJMP STAR;-------------------------;************************************************** INTT0:PUSH PSWPUSH ACCSETB PSW.3CLR PSW.4 ;工作1区MOV TH0,#41HMOV TL0,#0D9H;-----------------------JB KI T0TUIJNB JISHI_W,T0TUI ;计时暂停?MOV A,TIME_MBCJNE A,#2,T0TUI ;0.1S到?MOV TIME_MB,#00HMOV A,TIME_MLADD A,#01DA AMOV TIME_ML,AMOV A,TIME_MHADDC A,#00HDA AMOV TIME_MH,AMOV XBUF,#11HMOV XBUF+1,#11HMOV XBUF+2,#11HMOV XBUF+3,#11H ;显示器高4位暗码MOV R0,#XBUF+4MOV R2,TIME_MH ;显示秒表计时LCALL CHEZIMOV R0,#XBUF+6MOV R2,TIME_MLLCALL CHEZI ;拆字LJMP T0TUIT0TUI:POP ACCPOP PSWRETI;----------------------CHEZI:MOV A,R2SW AP AANL A,#0FHMOV @R0,AINC R0MOV A,R2ANL A,#0FHMOV @R0,ARET;-------------------------DISP:MOV R0,#XBUF ;显示缓冲器首址MOV R3, #80H ;位码MOV R7,#08H ;8个LEDDIR1:MOV A, @R0 ;取显示数据MOV DPTR, #TAB ;7段码表MOVC A, @A+DPTR ;查表求得7段码MOV B,AJNB ACC.1,DIR2MOV A,BANL A,#7FH ;显示小数点MOV B,ADIR2:MOV DPTR,#7FFCHMOV A,BMOVX @DPTR, A ;7段码送段口MOV A, R3 ;位码INC DPTRMOVX @DPTR, A ;位码送位口LCALL DL1 ;延时1msRR A ;位码左移MOV R3, AINC R0 ;指向下一位DJNZ R7,DIR1 ;8位显示完毕?MOV DPTR,#7FFCH ;段口MOV A,#0FFH ;暗码MOVX @DPTR,A ;关显示RET;-----------------------TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH ;共阳极7段码表DB 0BFH ;"-"DB 0FFH;------------------------DL1: MOV R6, #02H ;1ms延时DL11:MOV R5, #248DJNZ R5, $DJNZ R6, DL11RET;------------------------。
单片机整套实验及程序(交通灯_跑马灯等)文档
单片机整套实验及程序(交通灯_跑马灯等)文档实验1 跑马灯实验一、实验目的●初步学会Proteus ISIS和uVision2单片机集成开发环境的使用;●初步掌握采用汇编语言与C语言开发单片机系统的程序结构;●掌握80C51单片机通用I/O口的使用;●掌握单片机内部定时/计数器的使用及编程方法以及中断处理程序的编写方法。
二、实验设备及器件●硬件:PC机,HNIST-1型单片机实验系统●软件:Proteus ISIS单片机仿真环境,uVision2单片机集成开发环境三、实验内容●编写一段程序,采用P1口作为控制端口,使与P1口相接的四个发光二极管(D1、D2、D3、D4)按照一定的方式点亮。
如点亮方式为:先点亮D1,延时一段时间,再顺序点亮D2……D4,然后又是D4……D1,同时只能有一个灯亮;然后每隔一段时间一次使相邻两个灯亮,三个灯亮,四个灯亮,最后闪烁三次,接着循环变化。
●基于Proteus ISIS仿真环境完成上述功能的仿真。
●基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行。
四、实验原理图图3.1 跑马灯实验电路原理图电路原理图如上图3.1所示,AT89S52的P1.0~P1.3控制4个发光二极管,发光二极管按照一定次序发光,相邻发光二极管的发光时间间隔可以通过定时器控制,还可以通过软件延时实现。
五、软件流程图与参考程序● 主程序流程图如下:● 参考程序#include#include#define uchar unsigned char#define uint unsigned intuchar aa ,num ,speed ,flag;uchar code table[]={0x0e ,0x0d ,0x0b ,0x07};uchar code table1[]={0x0a ,0x05,0x09,0x06};uchar codetable2[]={0x0c ,0x09,0x03,0x08,0x01,0x0e ,0x0c ,0x08,0x00}; void delay(uint z)//延时函数uint x;uchar y;for(x=z;x>0;x--)for(y=200;y>0;y--);}void init()//条件初始化函数{ flag=0;speed=10;//控制跑马灯流水速度TMOD=0x01;//中断方式开始初始化(定时器、中断、标志位设置) Flag=1? 流水灯操作结束 Y NTH0=(65535-50000)/256;TL0=(65536-50000)%256;//初值EA=1;//打开总中断ET0=1;//打开外中断0TR0=1;}void main(){init();//调用初始化函数while(1){if(flag){delay(2000);//调用延时函数for(num=0;num<4;num++)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);for(num=3;num>0;num--)//从左至右间隔一个依次闪烁{P1=table[num];delay(2000);}for(num=0;num<4;num++)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=3;num>0;num--)//从左至右间隔两个依次闪烁{P1=table1[num];delay(2000);}for(num=0;num<6;num++)//两个,三个,四个跑马灯依次闪烁{P1=table2[num];delay(2000);}for(num=0;num<5;num++)//闪烁5次{P1=0xff;//全暗delay(2000);P1=0X00;//全亮delay(2000);}speed=speed-3;//变速if(speed==4){speed=10;}}}}void timer0() interrupt 1//中断函数{TH0=(65535-50000)/256;TL0=(65536-50000)%256;aa++;if(aa==speed){aa=0;flag=1;}}六、实验思考题●请用汇编指令完成本实验内容,深刻理解汇编语言程序设计结构。
单片机 跑马灯实验精选全文
可编辑修改精选全文完整版实验一跑马灯实验一、实验内容1、基本的流水灯根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。
每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。
松手后,又按正序点亮流水灯。
3、键控的流水灯上电,不点亮LED,按一下K1键,按正序点亮流水灯。
按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
二、实验方案1、总体方案设计考虑到K4键未被使用,所以将实验内容中的三项合并到一个主函数中:K4键代替实验内容第二项中的K1键;单片机一开机即执行实验内容第一项;K1、K2、K3键实现实验内容第三项。
所用硬件:AT89C52、BUTTON、LED-BLUE、电源输入:P2.0-K1;P2.1-K2;P2.2-K3;P2.3-K4。
低电平有效输出:P0.0~P0.7-D0~D7。
LED组连线采用共阳极,低电平有效软件设计:软件延时采用延时函数delay(t),可调整延迟时间:void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}由于涉及到按键变化所以要设置一个变量oldK保留按键键值,要在延时程序中检测是否按键,当按键后立即设置oldK的值。
按键判断采用在while循环中利用条件语句判断P2的值然后执行该键对应的代码段,达到相应的响应。
为了让K4键的效果优化,即状态变化从当前已亮灯开始顺序点亮或逆序点亮,利用全局变量n来记录灯号,利用算法即可实现。
主要算法:1、全局变量的定义:uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;2、顺序、逆序点亮流水灯:void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}3、实验内容第二项流水灯灯亮顺序变换:void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){out=D[n];n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}4、对应实验内容第一项,开机顺序点亮流水灯:while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}2、实验原理图图2-1 实验原理图3、程序流程图图2-2 程序流程图三、源程序#include"reg51.h"#define uchar unsigned char#define uint unsigned int#define out P0uchar D[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0X7f};//单个LED亮uchar AllOff=0xff;//LED全灭uchar AllOn=0x00;//LED全亮uchar K[]={0xff,0xfe,0xfd,0xfb,0xf7};//按键开关uchar oldK;//记录已按键int n;//记录当前亮的灯号void delay(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK&&P2!=K[0])break;//按下了其他键退出循环}}void delay10ms(){uint i;for(i=0;i<10000;i++);}void forward(){for(n=0;n<=7;n++){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}void backward(){for(n=7;n>=0;n--){out=D[n];delay(15);if(P2!=oldK&&P2!=K[0])break;}out=AllOff;}int delay4(uint t){uint i;while(t--)for(i=0;i<1000;i++){if(P2!=oldK){ //按键变化退出循环return 1;}}return 0;}void hold(){n=8;while(1){if(P2==K[4]){//一直按着K4键,逆序点亮跑马灯oldK=K[4];if(n==-1)n=7; //D0灯亮后点亮D7while(n>=0){n--;if(delay4(15))break;}}if(P2==K[0]){//未按下K4键,一直正序点亮跑马灯oldK=K[0];if(n==8)n=0;//D7灯亮后点亮D0while(n<=7){out=D[n];n++;if(delay4(15))break;}}if(P2!=K[4]&&P2!=K[0]){//按下了其他键,退出hold函数break;}}}void main(){oldK=K[0];while(1){//开机即正序点亮流水灯forward();if(P2!=K[0]){break;}}while(1){out=AllOff;if((P2&0x0f)!=0x0f){//检测有键按下delay10ms();//延时10ms再去检测//P2.0_K1键按下正序点亮流水灯if(P2==K[1]){oldK=K[1];while(1){forward();if(P2!=K[1]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.1_K2键按下逆序点亮流水灯if(P2==K[2]){while(1){backward();if(P2!=K[2]&&P2!=K[0]){//按下了其他键,退出break;}}}//P2.2_K3键按下关闭全部LEDif(P2==K[3]){oldK=K[3];out=AllOff;}//P2.3_K4键按下长按逆序点亮流水灯,不按正序点亮流水灯,直到其他键按下停止if(P2==K[4]){hold();}}}}四、实验结果1、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
跑马灯程序大全
LED 跑马灯(从右至左)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char #defi ne uint un sig ned int void DelayMS(ui nt x){uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0xfe;while(1){ if(P1==0xef)P1=0xfe; void main()elseP1=_crol_(P1,1);DelayMS(80);}}LED跑马灯(从左至右)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned intvoid DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}{P仁Oxef;while(1){ if(Pl==0x7f)P仁Oxef;elseP1=_cror_(P1,1); DelayMS(40);}}LED跑马灯(左右循环)#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++); }}void mai n(){uchar i;P仁0xef;while(1){for(i=0;i<4;i++){P1=_cror_(P1,1);DelayMS(40); }P1=0xfe;DelayMS(40); for(i=0;i<3;i++){P1=_crol_(P1,1);DelayMS(40); } P仁}单个LED的闪烁#in elude <reg52.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int sbit LED = P1A0;void DelayMS(ui nt x) {uchar i;while(x--){for(i=120;i>0;i--);}}void mai n(){while(1){LED = ~LED;DelayMS(150);}}连绵灯#in clude<reg51.h>#in clude<i ntri ns.h>#defi ne uchar un sig ned char#defi ne uint un sig ned int void DelayMS(ui nt x) {uchar i;while(x--){for(i=0;i<255;i++);}}void mai n(){P仁0x0e;while(1){ if(P1==0xb1)P1=0x0e;elseP1=_crol_(P1,1); DelayMS(80);}}。
02汇编语言实验——跑马灯
实验时间: 实验时间: 时间
2011-4-7
实验报告提交时间: 实验报告提交时间: 提交时间
2011-4-7
教务处制
实验目的与要求:
1. 初步使用汇编语言进行编程,了解单片机内程序运行情况。 2. 了解汇编语言的指令结构,跳转,子程序调用等功能。 3. 使用汇编语言实现跑马灯功能。
实验仪器: 微机原理试验箱 实验相关电路图:
;延时 100MS 子程序 延时 ;入口参数 入口参数:DelayTimes_100MS,延时多少个 100MS 入口参数 延时多少个 ;-----------------------------------------------------Delay100MS: MOV R7,DelayTimes_100MS Delay100MS_1: MOV R6,#10 Delay100MS_2: MOV R5,#150 Delay100MS_3: MOV R4,#200 Delay100MS_4: DJNZ R4,Delay100MS_4 DJNZ R5,Delay100MS_3 DJNZ R6,Delay100MS_2 DJNZ R7,Delay100MS_1 RET ;子程序返回 子程序返回 ;-----------------------------------------------------;跑马灯子程序 跑马灯子程序 ;让 4 个 LED 以 全灭 亮灭灭灭 亮亮灭灭 亮亮亮灭 亮亮亮亮 灭亮亮亮 灭灭亮 全灭->亮灭灭灭 亮亮灭灭->亮亮亮灭 亮亮亮亮->灭亮亮亮 亮灭灭灭->亮亮灭灭 亮亮亮灭->亮亮亮亮 灭亮亮亮->灭灭亮 让 灭灭灭亮->全灭 亮->灭灭灭亮 全灭 的顺序运行 灭灭灭亮 ;-----------------------------------------------------LEDRUN: ;---全灭 全灭--全灭 SETB LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 SETB LED1 SETB LED2 SETB LED3 MOV DelayTimes_100MS,#10 LCALL Delay100MS ;----------CLR LED0 CLR LED1 SETB LED2
51单片机8个跑马灯程序汇编设计思路
51单片机8个跑马灯程序汇编设计思路51单片机8个跑马灯程序汇编设计思路主题:51单片机8个跑马灯程序汇编设计思路引言:在微电子领域中,51单片机是应用最广泛的一种单片机。
它具有性能稳定、开发简单、存储容量大等特点,广泛应用于各种电子设备中。
其中,跑马灯程序是初学者最常接触的一个项目,通过实践该项目,我们可以提高对汇编语言的理解和应用能力。
本文将介绍51单片机8个跑马灯程序汇编设计的思路,以帮助读者更好地掌握该项目。
一、跑马灯程序的基本原理1.1 硬件设计51单片机跑马灯程序的实现需要使用LED灯和适当的电路连接。
我们可以选择使用8个LED灯,分别连接到IO口P0.0~P0.7上。
通过对IO口的控制,即可控制LED灯的亮灭。
1.2 软件设计在51单片机中,我们需要使用汇编语言来编写程序。
跑马灯程序的实现思路是通过对LED灯的逐个依次点亮和熄灭,实现灯光在各个LED之间不断左右滚动的效果。
通过不断循环该过程,即可实现跑马灯效果。
二、跑马灯程序的编写2.1 初始化设置在程序的开始部分,我们需要进行一些初始化设置。
需要设置IO口的工作模式,将所有IO口设置为输出模式。
需要设置定时器和中断相关的参数,以便后续的延迟操作。
2.2 跑马灯效果的实现跑马灯的实现思路可以分为两个部分:向左滚动和向右滚动。
2.2.1 向左滚动向左滚动的实现思路是依次点亮LED灯,然后通过适当的延迟时间熄灭LED灯,实现灯光的滚动效果。
在点亮一个LED灯之后,下一个LED灯便开始点亮。
通过循环该操作,即可实现向左滚动的效果。
2.2.2 向右滚动向右滚动的实现思路与向左滚动类似,只是点亮LED灯的顺序相反。
在点亮一个LED灯之后,上一个LED灯便开始点亮。
通过循环该操作,即可实现向右滚动的效果。
2.3 循环控制为了实现跑马灯的效果,我们需要将向左滚动和向右滚动两个操作循环执行。
通过添加一个计数器变量,当计数器达到一定的值时,切换滚动方向,实现跑马灯效果的循环。
最新单片机汇编语言跑马灯
实验一跑马灯-亮灯左移右移循环黄天佑 20132301155一、实验目的1、进一步熟悉keil C仿真软件及单片机实验板的使用。
2、了解并熟悉单片机I/O口和LED灯的电路结构,学会构建简单的流水灯电路。
3、掌握应用KEIL软件编辑、编译源汇编程序的操作方法。
4、了解单片机汇编语言程序的设计和调试方法。
二、实验原理1、实验板硬件电路图2、单片机流水灯程序设计(1)流水灯程序设计思路及程序流程。
实现流水灯的方法有很多,这里介绍一种。
(2)产生流水灯效果程序(逐条程序加注释)start:mov R0,#8 ; 设置左移8次mov A,#0FEH; 存入开始亮灯的位置LOOP: mov P0,A; 传送P0并输出ACALL DELAY; 调用延时程序RL A; 左移1位DJNZ R0,LOOP; 判断移送次数mov R1,#8; 设置右移8次LOOP1:RR A; 右移1位mov P0,A; 传送到P0口并输出ACALL DELAY; 调用延时程序DJNZ R1,LOOP1; 判断右移次数JMP start; 重新设定显示DELAY: mov R5,#10; 延时0.1s子程序D1: mov R6,#100;D2: mov R7,#100;DJNZ R7,$;DJNZ R6,D2;DJNZ R5,D1;RET ; 子程序返回END ; 程序结束三、实验步骤及调试过程1、汇编语言程序的编写与调试(1)新建一个工程(2)保存文件,设一个文件名(3)找到对应单片机的芯片,这里我们选AT89C51即可接着我们新建一个文本写程序(1)(2)保存文件名,注意文件名的后缀应该为.asm(汇编语言程序的格式)接着把我们的文本导入到工程里面去:(1)(2)点击Add,再Close即可2.汇编语言程序编译及下载(1)这里要设置一个输出.hex文件(2)点击生成工程相应的文件同时可以观察下面的结果:0 Error(s),即可。
基于单片机多模式带音乐跑马灯设计(附完整程序代码)
单片机课程设计(论文)任务书信息工程学院学院计算机科学与技术专业计算机2009-1班一、课程设计(论文)题目基于单片机多模式的带音乐跑马灯设计二、课程设计(论文)工作自 2012年6月 11日起至 2012年6月 24日止。
三、课程设计(论文) 地点:四、课程设计(论文)内容要求:1.本课程设计的目的(1)利用所学单片机的理论知识进行软硬件整体设计,培养学生分析、解决问题的能力,锻炼学生理论联系实际、综合应用的能力。
(2)使学生掌握系统各功能模块的基本工作原理;(3)培养学生基本掌握电路设计的基本思路和方法;(4)使学生掌握接收系统调试;(5)培养学生分析、解决问题的能力;(6)提高学生的科技论文写作能力。
2.课程设计的任务及要求1)基本要求:1、有八个发光二极管做跑马灯,其中跑马灯有8种模式。
2、有专门的键盘用以切换跑马灯的模式,并且对于任何一种跑马灯模式都可以对亮灯速度进行控制。
3、每一种跑马灯模式用LED数码管进行显示。
4、当跑马灯处于一种模式时,伴随的音乐响起,音乐至少有3首,并可以对其进行切换。
2)创新要求:在基本要求达到后,可进行创新设计,如改善电路性能;对系统进行仿真分析。
3)课程设计论文编写要求(1)要按照书稿的规格打印誊写毕业论文(2)论文包括目录、绪论、正文、小结、参考文献、谢辞、附录等(3)毕业论文装订按学校的统一要求完成4)答辩与评分标准:(1)完成原理分析:20分;(2)完成设计过程:30分;(3)完成调试:30分;(4)回答问题:20分。
5)参考文献:(1)张毅刚彭喜元彭宇.《单片机原理及应用》[M].北京:高等教育出版社(2)谭浩强.《C程序设计教程》[M].北京:清华大学出版社(3)/%D7%F6%B6%F8%C2%DB%B5%C0/home6)课程设计进度安排内容天数地点构思及收集资料2图书馆组装与调试5实验室撰写论文3图书馆、实验室学生签名:2012 年6 月24 日课程设计(论文)评审意见(1)完成原理分析(20分):优()、良()、中()、一般()、差();(2)设计分析(30分):优()、良()、中()、一般()、差();(3)完成调试(30分):优()、良()、中()、一般()、差();(4)回答问题(20分):优()、良()、中()、一般()、差();(5)格式规范性及考勤是否降等级:是()、否()评阅人:职称:副教授2012年 6 月27目录一、设计概述 (5)1.1设计目的: (5)1.3设计作用: (5)1.4设计要求: (5)二、设计的具体实现 (6)2.1系统概述 (6)2.2各模块分析 (7)2.2.1主控芯片STC90C51 (7)2.2.2 STC90C51性能简介 (7)2.2.3 LED显示部分 (7)2.2.4模式显示部分 (8)2.2.5单片机部分 (9)三、硬件电路设计及描述 (9)3.1 LED (9)3.2数码管 (9)3.3复位电路及晶振电路 (10)3.4蜂鸣器及按键 (10)四、程序设计思想及流程 (11)4.1程序设计思路 (11)4.2音乐部分设计 (13)五、电路的安装与调试 (14)六、总结 (16)七、参考文献 (17)附录 (18)实物图 (18)程序清单 (18)摘要跑马灯,顾名思义,就是“会像马儿一样跑动”的小灯,故取名“跑马灯”。
单片机跑马灯实验报告(二)
单片机跑马灯实验报告(二)引言概述:单片机跑马灯实验是一种常见的数字电路实验,也是学习单片机基础应用的重要内容。
本实验旨在通过控制单片机的IO口输出来实现多个LED灯的顺序闪烁,从而模拟跑马灯的效果。
本报告将从硬件组成、电路连接、程序设计、实验步骤和实验结果等方面进行详细阐述。
正文:1. 硬件组成:- 单片机 (例如STC89C52)- 电源 (5V 直流电源)- 电阻 (用于限流)- LED灯 (多个,不同颜色)- 连接线等2. 电路连接:- 连接单片机的引脚与LED灯、电阻等。
一般使用IO口输出来控制LED灯的开关状态,通过改变输出电平来控制灯的亮灭。
具体的连接方式可以根据单片机的datasheet或者开发板的示意图来确定。
3. 程序设计:- 使用C语言编写程序,通过编写程序控制单片机的IO口输出来实现LED灯的顺序闪烁。
基本的程序框架包括引入头文件、定义引脚、设置IO口状态、延时函数和主函数等。
4. 实验步骤:- 硬件连接完毕后,将程序通过编译、烧录等操作下载到单片机中。
- 运行程序,观察LED灯按照设定的顺序是否闪烁,是否达到跑马灯的效果。
- 可以通过改变程序中的一些参数,如延时时间、顺序等,来观察结果的变化。
5. 实验结果:- 根据实验步骤操作后,观察实验效果是否与预期相符。
- 分析实验结果,检查是否有异常情况,如LED灯不亮、顺序错误等,进行排查和修改。
- 还可进行一些扩展实验,如控制节奏变化、增加LED灯数量等。
总结:通过本次实验,我们成功实现了单片机跑马灯的效果,掌握了基本的硬件连接和程序设计方法。
在实验过程中,我们深入了解了单片机的IO口控制和LED灯驱动原理等知识。
通过不断练习和实验,我们能够熟练掌握单片机应用开发的基础技能,为日后深入学习和应用打下了良好的基础。
单片机实例之跑马灯
图3-7 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-8 新建工程窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-9 单片机选择窗口
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-10 目的1属性设置窗口
文档仅供参考,如有不当之处,请联系改正。
DJNZ R7,LOOP
DJNZ R6,SS
整个子程序延时为: {[2μs×249+1+2]×200+2}×5=501010μs
汇编语言程序:
org 0000h LS:
setb p1.0 Lcall delay clr P1.0 Lcall delay sjmp $
文档仅供参考,如有不当之处,请联系改正。
4.完毕写入编程。
5.退出程序:左击界面右上角旳“x”按钮, 退出此程序。
文档仅供参考,如有不当之处,请联系改正。
文档仅供参考,如有不当之处,请联系改正。
任务二 跑马灯
本任务让图3-28中旳LED依次点亮
图3-28 LED硬件图
文档仅供参考,如有不当之处,请联系改正。
程序设计分析
为了让图3-28所示旳LED依次点亮,就是要求从P1口从 P1.0至P1.7依次输出低电平,其他引脚都输出高电平,就 能让被接在端口旳彩灯依次点亮。
KEIL 软件开发平台
图3-20 硬件查询窗口
I/O口全部打开界面
文档仅供参考,如有不当之处,请联系改正。
KEIL 软件开发平台
图3-21 硬件I/0口查询窗口
文档仅供参考,如有不当之处,请联系改正。
单片机跑马灯程序
单片机跑马灯程序*******************************************************************;此程序是用单片机的p1 口接八个led 灯作跑马灯试验,八个led 依次亮了又熄灭,形成漂亮;的跑马灯。
本人已经试验成功。
;单片机教程网51hei 原创;该8 路单片机跑马灯程序代码简单,电路也容易搭建,只需把led 接在p1 口上就可以了,希望大家能试验成功顺利的完成跑马灯报告;****************************************** *************************org 0000hajmp start;跳转到程序开始org 0030h;定义起始汇编地址start:mova,#0ffh ;clr c ;mov r2,#08h ;循环八次。
loop: rlc a ;带进位左移。
mov p1,a ;此时led 灯开始有反映了。
call delay ;延时djnz r2,loop ;循环(djnz 条件判断)movr2,#07h ;loop1: rrc a ;带进位右移mov p1,a ;此时led 灯开始有反映了。
call delay ;延时djnz r2,loop1 ;反复循环jmp start ;回到程序的开头delay: mov r3,#20 ;延时子程序d1: mov r4,#20d2: mov r5,#248djnz r5,$djnzr4,d2 单片机论坛51hei/bbs/ 有更多的跑马灯流水灯试验---------3 路单片机跑马灯程序---------------------------------------ORG 0000HLJMPMAINORG 030HMAIN: MOV P1,#0DBH ;化为2 进制为11011011--0 状态时led灯亮ACALL DELay MOV P1,#06DH ;化为2 进制为01101101ACALL DELay;MOV P1,#0B6H ;化为2 进制为10110110ACALL DELayAJMP MAINdelay: movr7,#255d1: mov r6,#255d2: djnz r6,d2djnz r7,d1retendtips:感谢大家的阅读,本文由我司收集整编。
单片机跑马灯实验程序(汇编)
单片机跑马灯实验程序led equ p1 ;可以增强程序的可移植性org 00hajmp head ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;org 0030hhead:mov sp ,#70hmov dptr,#led_on_tabclr amov r2,#0begin:call add_oncall dec_offsjmp begin;;;;;;;;;;;;;;;;;;;;;;;;;;; 按点亮led灯;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;led_on:mov a,r2movc a,@a+dptrmov led,alcall delay_200msret;;;;;;;;;;;;;;;;;;;;;;;;;;;实现小灯逐个点亮的移位逻辑;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;add_on:acall led_oninc r2cjne r2,#9,add_onmov r2,#7ret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;实现小灯逐个熄灭的移位逻辑;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;dec_off:acall led_ondec r2cjne r2,#0,dec_offret;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;led_on_tab: DB 255,254,252,248,240,224,192,128,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_200ms:mov r5,#20signed_200ms_:acall delay_10msdjnz r5,signed_200ms_ret;mytime.s;;;;;;;;;;;;;;;; 非中断精确1MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1ms:MOV R7 ,#249signed: ;循环部分4机器周期nopnopdjnz R7 ,signedret ;返回指令2机器周期;2+249*4+2=1000us 可以精确定时1MS,假设外部晶振是12M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确10MS定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; delay_10ms:mov r6,#9 ;2个机器周期用2usdelay_10ms_sined: ;9次循环共用9(1ms+4us)=9036usacall delay_1msdjnz r6,delay_10ms_sinedMOV r6 ,#240 ;2个机器中期用2ussigned_10ms : ;循环部分4机器周期共240次nopnopdjnz r6 ,signed_10msret ;返回指令要2us;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 非中断精确定时1s ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1s:mov r5,#99 ;两个机器周期2usdelay_1s_signed: ;循环指令周期为4us,加上延时10ms;(10ms+4us)*99 = 990.396msacall delay_10msdjnz r5,delay_1s_signedmov r5 ,#9 ;两个机器周期2ussigned_1s: ;循环指令周期为4us,加上延时1ms;(1ms+4us)*9 = 9ms+36usacall delay_1msdjnz r5 ,signed_1smov r5 ,# 140 ;机器周期2ussigned_1s_: ;一次循环4us共有140次。
单片机实例之跑马灯(二)2024
单片机实例之跑马灯(二)引言概述:本文主要介绍了单片机实例中的跑马灯(二)的设计和实现。
通过使用单片机控制LED灯的亮灭顺序和频率,展示出跑马灯效果。
文章将从硬件接口的连接、软件设计、电路调试、代码优化和总结五个大点来详细讲述整个跑马灯的实现过程。
正文内容:一、硬件接口的连接1. 连接LED灯和单片机的端口引脚2. 添加合适的电阻限流器3. 连接额外的电源供给(若需要)二、软件设计1. 初始化单片机的IO接口2. 设定LED灯的控制端口为输出3. 设定相应的延时时间和频率三、电路调试1. 检查单片机和LED灯的连接是否正确2. 使用示波器测量电压和电流波形3. 调整电阻的阻值以控制LED灯的亮度4. 检查电源稳定性和供电电压四、代码优化1. 使用更高效的延时函数2. 采用位操作方式控制LED灯的亮灭3. 增加循环计数变量,实现灯光的循环移动4. 将代码分块、模块化,提高可维护性和可扩展性五、总结通过对单片机跑马灯(二)的实现过程的介绍,我们了解了硬件接口连接、软件设计、电路调试和代码优化等关键步骤。
同时,我们还学习了如何使用单片机控制LED灯的亮灭顺序和亮度,并实现了跑马灯效果。
通过不断的优化和调试,我们可以进一步提高灯光效果和系统稳定性。
总结:本文通过引言概述、正文内容和总结的方式详细介绍了单片机实例中的跑马灯(二)的设计和实现过程。
通过硬件接口的连接、软件设计、电路调试、代码优化等关键步骤的说明,读者可以了解到如何实现跑马灯效果,并通过优化和调试提高系统的稳定性和效果。
希望本文对读者的学习和实践有所帮助。
单片机走马灯程序
}
//Mode 4
void Mode_4(void)
{
if(LEDDirection)
{
if(LEDFlag)
LEDShow(0xFFFE<<LEDIndex);
else
LEDShow(~(0x7FFF>>LEDIndex));
}
else
{
if(LEDFlag)
Key|=0x02;
if(!(CheckValue&0x20))
Key|=0x04;
return Key;
}
unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
void InitialTimer2(void)
{
T2CON = 0x00;//16 Bit Auto-Reload Mode
40, 50, 60, 70, 80, 90, 100, 120, 140, 160,
180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
void SetSpeed(unsigned char Speed)
{
SystemSpeed =SpeedCode[Speed];
bit LEDDirection = 1,LEDFlag = 1;
void Mode_0(void)
{
LEDShow(0x0001<<LEDIndex);
LEDIndex = (LEDIndex+1)%16;
}
//Mode 1
void Mode_1(void)