单片机跑马灯汇编程序与仿真
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单片机结构和编程思想的理解。
单片机整套实验及程序(交通灯_跑马灯等)
实验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<reg52.h>#include<intrins.h>#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;//中断方式TH0=(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、基本的流水灯:开机后即重复顺序点亮流水灯,等待其他按键。
单片机整套实验及程序(交通灯,跑马灯等)
单片机整套实验及程序(交通灯,跑马灯等)实验1 跑马灯实验一实验目的初步学会Proteus ISIS和 uVision2单片机集成开发环境的使用初步掌握采用汇编语言与C语言开发单片机系统的程序结构掌握80C51单片机通用IO口的使用掌握单片机内部定时计数器的使用及编程方法以及中断处理程序的编写方法二实验设备及器件硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序采用P1口作为控制端口使与P1口相接的四个发光二极管D1D2D3D4按照一定的方式点亮如点亮方式为先点亮D1延时一段时间再顺序点亮D2D4然后又是D4D1同时只能有一个灯亮然后每隔一段时间一次使相邻两个灯亮三个灯亮四个灯亮最后闪烁三次接着循环变化基于Proteus ISIS仿真环境完成上述功能的仿真基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行四实验原理图图31 跑马灯实验电路原理图电路原理图如上图31所示AT89S52的P10P13控制4个发光二极管发光二极管按照一定次序发光相邻发光二极管的发光时间间隔可以通过定时器控制还可以通过软件延时实现五软件流程图与参考程序主程序流程图如下参考程序includeincludedefine uchar unsigned chardefine uint unsigned intuchar aanumspeedflaguchar code table[] 0x0e0x0d0x0b0x07uchar code table1[] 0x0a0x050x090x06uchar codetable2[] 0x0c0x090x030x080x010x0e0x0c0x080x00void delay uint z 延时函数uint xuchar yfor x zx 0x--for y 200y 0y--void init 条件初始化函数flag 0speed 10控制跑马灯流水速度TMOD 0x01中断方式TH0 65535-50000 256TL0 65536-50000 256初值EA 1打开总中断ET0 1打开外中断0TR0 1void maininit 调用初始化函数while 1if flagdelay 2000 调用延时函数for num 0num 4num 从左至右间隔一个依次闪烁P1 table[num]delay 2000for num 3num 0num-- 从左至右间隔一个依次闪烁P1 table[num]delay 2000for num 0num 4num 从左至右间隔两个依次闪烁P1 table1[num]delay 2000for num 3num 0num-- 从左至右间隔两个依次闪烁P1 table1[num]delay 2000for num 0num 6num 两个三个四个跑马灯依次闪烁P1 table2[num]delay 2000for num 0num 5num 闪烁5次P1 0xff全暗delay 2000P1 0X00全亮delay 2000speed speed-3变速if speed 4speed 10void timer0 interrupt 1中断函数TH0 65535-50000 256TL0 65536-50000 256aaif aa speedaa 0flag 1六实验思考题请用汇编指令完成本实验内容深刻理解汇编语言程序设计结构在本实验中IO口作为输出口使用如果把IO口的某些口线作为输入口使用时如何获得输入引脚状态请举例说明在画软件流图时各种不同形式方框意义是否相同请举例示之请简要叙述中断服务程序功能并画出其流程图在采用IO口作为输出口时要考虑哪些因素如果负载变化如何设计单片机与负载之间的接口电路实验2 交通灯实验一实验目的进一步掌握Proteus ISIS和 uVision2单片机集成开发环境的使用进一步掌握单片机内部定时计数器的使用及编程方法以及中断处理程序的编写方法掌握单片机的IO口编程使用二实验设备及器件硬件PC机HNIST-1型单片机实验系统USB下载线一根连接线若干软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序实现用单片机的IO口控制12个发光二极管四组每组有红绿蓝三个发光二极管使发光二极管按照一定的规则模拟交通灯功能基于Proteus ISIS仿真环境完成上述功能的仿真基于uVision2单片机集成开发环境与硬件平台完成程序的脱机运行四实验原理图32 交通灯实验原理图用单片机的IO口控制4组红绿蓝共12个发光二极管使发光二极管按照一定规则与次序发光与闪亮以实现模拟交通灯的功能假设初始状态为南北通行状态南北绿灯东西红灯25s后转为过度状态南北黄灯东西红灯5s再转为东西通行状态东西绿灯南北红灯25s再转为过渡状态东西黄灯南北红灯 5s 然后循环往复硬件原理图如上图32所示由于发光二极管的导通电压为17V所以在电源与二极管之间加一个电阻目的是保护二极管实验中利用定时计数器实现1S的定时然后在此基础上实现所需要的定时时间五软件流程图与参考源程序软件设计思想在编程时我们一般把一个独立的功能设计成一个子程序或者说函数对于不同的设计者而言对软件功能的划分角度不同对应的函数功能也存在差异图33 软件结构图参考源程序如下include 头文件define uint unsigned intdefine uchar unsigned char定义下方便使用sbit kong P14位声明数码管锁存控制端uchar code table[] 0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf6 数字0-9编码uint tttemp 0延时函数void delay uint xuchar ikfor i 0i xifor k 0k 100k初始化函数void inittemp 0tt 0TMOD 0x01定时器工作方式TH0 65536-50000 256TL0 65536-50000 256装初值EA 1开总中断ET0 1开定时器中断TR0 1启动定时器中断数码管显示函数void display uint x1uchar icuint cod[4]cod[3] x11000cod[2] x11000100cod[1] x1100010010cod[0] x110 求个数码管的值c 0x01for i 0i 4iP1 c数码管的显示选择P0 table[cod[i]]送要显示的值kong 1打开锁存c c 1左移一位选择下一个数码管kong 0关闭锁存delay 10交通灯驱动函数void jiaotonguint t 0if temp 0temp 60给temp装值也即是交通灯循环一次要的时间if temp 30if temp 35display temp-30P2 0Xf5南北黄灯东西红灯5selsedisplay temp-30P2 0xdd 南北绿灯东西红灯25selseif temp 5display tempP2 0xee 东西黄灯南北红灯 5selsedisplay tempP2 0xeb 东西绿灯南北红灯25s if tt 20 判断时间是否过了1stt 0temp--倒计数主函数void maininit 初始化函数调用while 1 主循环jiaotong 交通灯函数调用中断函数void timer0 interrupt 1TH0 65536-50000 256TL0 65536-50000 256 重新装初值tt六实验思考题如何实现扩充功能实现救护车优先通过十字路口请叙述硬件设计与软件设计原理在利用单片机片内定时器实现精确定时时是否会产生误差如果存在误差请分析误差产生原因以及减小误差方法实验3 数码管动态显示实验一实验目的掌握数码管静态显示与动态显示原理以及数码管与单片机的接口原理学会利用单片机的IO口实现数码管的动态显示二实验仪器硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写一段程序采用P1口某些口线作为4位数码管的位控制端采用P0口输出段码实现4位数码管的测试让4位数码管同时输出0~F编写程序让4位数码管循环显示1234即让第一位显示1然后第一位熄灭第二位显示2四实验原理使用LED数码显示器时要注意区分数码管两种不同的接法共阴LED和共阳LED为了显示数字或字符必须对数字或字符进行编码七段数码管加上一个小数点共计8段因此为LED显示器提供的编码正好是一个字节八段LED数码管显示器原理与结构如下图34所示对于共阴接法要使某位LED显示相应数码则使LED的对应段点亮则对应控制电平为高如要显示数字0如果a~dp分别受P07~P00控制则LED的abcdef需点亮对应驱动电平为1其他为0则对应数码0的段码为FCH共阴极共阳极图34 八段LED数码管原理与结构图LED显示器工作方式有两种静态显示方式和动态显示方式静态显示的特点是每个数码管的段码必须需要一个数据锁存器锁存当送入字形码后显示字形可一直保持直到送入新字形码为止显示亮度较强而动态显示是多个LED轮流显示但由于人眼的视觉惰性使人感觉各LED同时显示不同字符表31 本实验硬件所采用共阴极数码管码表数字数码管代码数字数码管代码数字数码管代码0 0xfc6 0xbe C 0x9c 1 0x607 0xe0 d 0x7a 20xda 8 0xfe E 0x9e 3 0xf2 9 0xf6 F 0x8e4 0x66 A 0xee 无显示 0x005 0xb6 b 0x3e一般而言为了减少硬件开销降低成本单片机系统通常采用LED动态扫描显示方式本实验电路原理图如下图35所示图35 LED动态显示电路原理图五部分软件流程图与参考程序●流程图否是图36 软件流程图●源程序include 包含头文件define uchar unsigned chardefine uint unsigned int 宏定义sbit dula P14 端口定义uchar numyuint x 定义变量ucharcode table[] 0xfc0x600xda0xf20x660xb60xbe0xe00xfe 0xf60xee0x3e0x9c0x7a0x9e0x8e 0到F的数码管管码主函数void mainwhile 1 进入大循环P1 P1|0x1ffor num 0num 16num 判断是否到Fdula 1开启锁存器P0 table[num]送数码管管码dula 0关闭锁存器for x 2000x 0x--for y 220y 0y-- 延时六实验思考题●本实验源程序是让4位LED同时显示相同的内容完成其测试请编写程序让4位LED轮流显示从0~F的数码即让第一位数码管显示0后接着第二位数码管显示0一个轮回结束后让第一个显示1请设计一个单片机控制的4位数码管的静态显示电路解释其工作原理如何采用本实验电路以及单片机片内定时器实现一个简易时钟功能精度较低说明实现方式实验4 88 LED点阵实验一实验目的了解LED点阵显示原理掌握LED点阵显示器件与单片机的接口电路设计原理掌握LED显示器件显示驱动程序设计方法能编写LED显示驱动程序二实验设备及器件硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境根据给定实验设备选用相关模块完成LED点阵显示实验系统的硬件平台构建根据所构建硬件平台编程实现点阵循环显示数字09四实验原理芯片介绍174LS138 3 线-8 线译码器原理当一个选通端G1为高电平另两个选通端G2A和G2B为低电平时可将地址端ABC的二进制编码在一个对应的输出端以低电平译出Y0-Y7为输出端另外74LS138真值表请参看相关资料274LS595串入并出8位输出移位锁存器以下为其引脚功能说明QA--QH 八位并行输出端可以直接控制数码管的8个段或者点阵LED的列线QH 级联输出端我将它接下一个595的SI端SER 串行数据输入端SCLR 10脚低电平时将移位寄存器的数据清零通常我将它接Vcc SCK 11脚上升沿时数据寄存器的数据移位QA-- QB-- QC-- -- QH下降沿移位寄存器数据不变脉冲宽度5V时大于几十纳秒就行了通常都选微秒级RCK 12脚上升沿时移位寄存器的数据进入数据存储寄存器下降沿时存储寄存器数据不变通常我将RCK置为低点平当移位结束后在RCK端产生一个正脉冲5V时大于几十纳秒就行了通常都选微秒级更新显示数据G 13脚高电平时禁止输出高阻态另外74LS595操作时序请参考相关资料请根据操作时序叙述操作过程如下图37所示图37 点阵LED实验电路原理图五软件流程图与参考程序软件流程图首选确定所需要的子程序子程序主要包括一是74LS595芯片驱动程序完成串入并出控制LED点阵列的驱动一个是驱动74LS138芯片的实现LED点阵行的驱动还有一个是延时函数读者可以根据相应芯片工作原理完成其驱动流程图绘制对于要显示的字符09的循环显示显示间隔采用定时器实现此时涉及到定时器中断服务子程序的编写另外LED点阵列驱动采用的是动态显示原理也需要定时器定时对于主程序而言就很简单了主要是完成一些初始化工作源程序include 头文件includedefine uchar unsigned char 宏定义define uint unsigned intsbit SCK P00 芯片端口连线定义sbit RCK P01sbit SER P02sbit D138_A P05sbit D138_B P06sbit D138_C P07uchar code hang[8] 12345678 点阵行数组定义uchar code lie[10][8] 数字09列代码0x000x7c0x820x820x820x7c0x000x00 0 0x000x000x840xfe0x800x000x000x00 10x000xe40x920x920x920x8c0x000x00 20x000x440x920x920x920x6c0x000x00 30x000x100x180x140xfe0x100x100x00 40x000x4e0x8a0x8a0x8a0x720x000x00 50x000x7c0x920x920x920x640x000x00 60x000x020x020xfa0x060x020x000x00 70x000x6c0x920x920x920x6c0x000x00 80x000x4c0x920x920x920x7c0x000x00 9uint timecountuchar abvoid Delay uchar time 延时函数uchar ijfor i timei 0i--for j 320j 0j--void Set595 unsigned char Data 74LS595驱动函数unsigned char ifor i 0 i 8 iSCK 0 先置为低SER Data 0x80 取数据的最高位Data 1 将数据的次高位移到最高位为下一次取数据做准备SCK 1 再置为高产生移位时钟上升沿上升沿时数据寄存器的数据移位RCK 0_nop_RCK 1void Set138 unsigned char Data 138芯片二进制译码选择行输出switch Datacase 0D138_A 0D138_B 0D138_C 0Delay 1 break case 1D138_A 1D138_B 0D138_C 0Delay 1 break case 2D138_A 0D138_B 1D138_C 0Delay 1 break case 3D138_A 1D138_B 1D138_C 0Delay 1 break case 4D138_A 0D138_B 0D138_C 1Delay 1 breakcase 5D138_A 1D138_B 0D138_C 1Delay 1 breakcase 6D138_A 0D138_B 1D138_C 1Delay 1 breakcase 7D138_A 1D138_B 1D138_C 1Delay 1 breakvoid main voidTMOD 0x01 设置定时器的工作方式TH0 65536-3000 256TL0 65536-3000 256 设置初值每次定时中断3msEA 1 开启总中断ET0 1 开启定时器0中断TR0 1 启动定时器P0 0x00while 1void extern0 interrupt 1TH0 65536-3000 256TL0 65536-3000 256Set138 hang[a]Set595 lie[b][a]_nop__nop_aif a 8a 0timecountif timecount 330 每次到了330次中断后又重新开始计时每次差不多1s即每隔1s显示一个数字timecount 0bif b 10b 0六实验思考题可否不用这两个芯片直接用IO口来控制点阵的行与列来达到我们的目的并分析这样做的优缺点查阅资料比较74LS164与74LS595这两个串入并出芯片的特点若显示的数字出现左右倒相上下倒位请分析可能的原因以及解决的方法88 LED点阵显示器采用动态显示原理分析其驱动工作过程实验5 矩阵式键盘显示一实验目的掌握矩阵式键盘的工作原理以及与单片机的接口方法掌握矩阵式键盘的按键识别方法扫描法与线反转法并能够编写相应键盘处理程序实现按键的识别二实验仪器硬件PC机HNIST-1型单片机实验系统软件Proteus ISIS单片机仿真环境uVision2单片机集成开发环境三实验内容编写程序读取矩阵式键盘按键键码并通过数码管显示显示要求四个数码管同时显示同一字符1按09号键显示数字092按AF号键显示字母AF四实验原理单片机的P2口作为矩阵式键盘扫描IO口对键盘进行逐行扫描若检测到按键则将得到的扫描结果返回给CPU转换成相应的数码管显示代码通过数码管显示子程序在数码管上显示按键实验原理如下图38所示图38 键盘扫描电路原理图五软件流程图与参考程序流程图图39 键盘扫描显示主程序流程图图310 键盘扫描程序流程图参考源程序includedefine uint unsigned int define uchar unsigned char uchar numtempiuchar code table[]0xfc0x600xda0xf20x660xb60xbe0xe00xfe0xf60xee0x3e0x9c0x7a0x9e0x8e0uchar code table1[]0xf70xfb0xfd0xfesbit ale P14void display uchar aa uchar keyscan延时子程序void delay uint zuint xyfor x zx 0x--for y 110y 0y--void mainnum 17while 1display keyscan数码管显示void display uchar aaale 1P0 table[aa-1]ale 0键盘扫描uchar keyscanfor i 1i 5iP2 table1[i-1]temp P2temp temp0xf0while temp 0xf0delay 5temp P2switch tempcase 0xe7num 1breakcase 0xd7num 2breakcase 0xb7num 3breakcase 0x77num 4breakcase 0xebnum 5breakcase 0xdbnum 6breakcase 0xbbnum 7 breakcase 0x7bnum 8breakcase 0xednum 9breakcase 0xddnum 10breakcase 0xbdnum 11breakcase 0x7dnum 12breakcase 0xeenum 13breakcase 0xdenum 14breakcase 0xbenum 15breakcase 0x7enum 16breakwhile temp 0xf0temp P2temp temp0xf0return num六实验思考题如何实现键盘信号的可靠采集请叙述原理并请简要说明如果系统软件采用前后台的程序结构采集按键信号安排在后台程序主程序和安排在定时中断服务程序中有什么差异请简要叙述如何处理按键连击实验6 马达调速控制一实验目的掌握步进电机的工作原理控制方式和调速方法以及其与单片机的接口和驱动编程方法掌握直流电机的开启控制与转动速度控制方法二实验仪器硬件PC机HNIST-1型单片机实验系统软件 uVision2单片机集成开发环境三实验内容与原理实验内容编写程序通过单片机的P1口控制步进电机的控制端使其按照一定的控制方式进行转动实验原理◆步进电机的控制单片机的P1口输出脉冲信号驱动步进电机旋转引入开关实现对步进电机马达的启停转向和速度控制旋转方向控制步进电机以四相四拍方式工作若按次序通电为正转按次序通电为反转旋转速度控制每改变1次节拍步进电机旋转18度调节脉冲的周期就可以控制步进电机的转速图311 步进电机控制原理图◆直流电机的控制直流电机的转动由DAC0800来控制当DAC0800的输出为高电平时直流电机开始转动当DAC0800的输出为低电平时直流电机停止转动图312 直流电机控制原理图四实验步骤1连线编程步进电机的插头接J3 BABD接89S52的P11P14开关K8接P17K1-K7接8051的P10-P16DAC0800的B0-B7口接P2DAC0800输出接直流电机的输入调试程序观察步进电机运行情况启停开关K1步进电机开始转动是正转2圈反转2圈的循环运行启停开关K8直流电机开启步进电机停止调速开关K7K2供6转速调速时开关打开-关闭实现一次调速K2K4K6调速时步进电机是正转K3K5K7调速时步进电机是反转五软件流程图与参考程序●流程图图313 软件流程图●参考源程序本步进电机步进角为 75度一圈 360 度需要 48 个脉冲完成程序名mainc功能步进电机正转反转单位湖南理工物电系创新基地All rights reserved开始时间com结束时间com版本信息备注AABB口分别接单片机的P11P12P13P14备注P0口接key1-key8八个开关并空制着八个转速备注控制直流电机的是DAC0800备注B0-B7接的是P2口输出接的是直流电机的输入includedefine uchar unsigned char 宏定义方便使用define uint unsigned intvoid motor_move uint 函数的声明void motor_back uintvoid delay uintuint keyscanvoid zhiliuuchar a 0key 0key1temp 变量定义正转次序 Aa组--aB组--Bb组--bA组即一个脉冲正转 75 度倒转次序 bA组--Aa组--aB组--Bb组即一个脉冲正转 75 度开启开关时步进电机停止工作关闭开关时步进电机调好转速转动const uchar time_move[] 0xe70xed0xf90xf3 正转时序 75度const uchar time_back[] 0xe70xf30xf90xed 倒转时序 75度const uchar time[] 051020406080100 定义不同的时速uint code table[]0x000xff 给直流电机的信号主程序void mainwhile 1P2 0x00key keyscan 接受开关信号if key 1motor_move 2 正转2圈可自行调转圈数delay 100motor_back 2 反转2圈可自行调转圈数delay 100key keyscan 接受开关信号else if key 8 当开关打开的是第八个时直流电机启动步进电机停止zhiliuelse if key 0 key 8 判断是否有开关信号key keyscan 再次判断开关信号key1 key0x11 判断是否为偶数if key1 0x00 如果是偶数就正转motor_move 1 正转2圈可自行调转圈数else 否则就反转motor_back 1 反转2圈可自行调转圈正转n圈每转一步75度void motor_move uint nuchar iuint jfor j 0j 12njfor i 0i 4iP1 0xe1 驱动ds75452n芯片 P1 time_move[i]delay time[key]倒转n圈每转一步75度void motor_back uint nuchar iuint jfor j 0j 12njfor i 0i 4iP1 0xe1 驱动ds75452n芯片P1 time_back[i]delay time[key]延时t毫秒110592MHz时钟延时约05msvoid delay uint tuint kwhile t--for k 0 k 60 kuint keyscan 接受开关信号并编码P0 0xfftemp P0temp temp0xffwhile temp 0x00 再次判断是否打开开关delay 1temp P0temp temp0xffswitch temp 判断开关信号并将转速变量赋值case 0x01 a 1 breakcase 0x02 a 2 breakcase 0x04 a 3 breakcase 0x08 a 4 breakcase 0x10 a 5 breakcase 0x20 a 6 breakcase 0x40 a 7 breakcase 0x80 a 8 breakwhile temp 0x00 判断开关是否关闭temp P0temp temp0xffreturn a 返回值可调转速void zhiliu 直流电机的开启与停止uchar ifor i 0i 2iP2 table[i]delay 1000P2 0x00 关闭直流电机六实验思考题●怎样克服步进电机及直流电机和负载的惯性●说明如何控制直流电机的正反转用程序实现之实验7 串行模数转换器实验一实验目的掌握串行模数转换器TLC549芯片性能以及AD转换器的选择准则利用芯片技术手册掌握TLC549与单片机的接口方法掌握串行ADC的驱动程序设计方法二实验仪器硬件PC机HNIST-1型单片机实验系统软件 uVision2单片机集成开发环境三实验内容搭建串行模数转换平台编写程序通过单片机的IO口控制串行AD转换芯片TLC549实现模拟电压信号的采集调节电位器调整TLC549的输入模拟参考电压调节模数转换模块中的电位器运行程序实现AD转换和模拟电压信号的采集编写液晶的程序使转换得到的数据送入液晶显示四实验原理TLC549介绍及其接口电路TLC549是一款高性能的8位串行AD转换器它以8位开关电容逐次逼近的方法实现AD转换本实验采用该芯片采集模拟电压量然后将采集到的模拟量转换为数字量后送至液晶显示其数值TLC549在该实验系统中的电路连接如下图314所示图314 TLC549与单片机接口电路图315 TLC549引脚示意图TLC549通过J5_1端口采集模拟量由于TLC549是采用三线串行接口方式与单片机连接的所以通过J5_3端口将CLKD0CS与单片机的IO口连接来控制AD转换然后将转换后的量经处理送液晶显示接口电路说明1.用连接线连接模拟量产生模块中的V0口和模数转换模块中的IN接口2.用连接线将模数转换模块的CLKD0CS分别接至单片机的P36P35P343.用连接线将液晶模块的ERWR分别接至单片机的P22P21P20并将D0D7端口对应接入单片机的P00P07口4.调节模数转换模块中的电位器使TLC549的输入参考电压为5V5.将编写好的程序烧入单片机运行调节模拟量产生模块中的W1旋钮便可以在液晶上看到对应的电压值大小五软件流程图与参考程序信号流图图316 信号流图参考源程序文件名tlc549驱动程序功能tlc549采集模拟电压并于液晶上显示大小作者刘烈报单位湖南理工物电系创新基地All rights reseverd开始时间comincludeincludedefine uchar unsigned char define uint unsigned int define ulong unsigned long uchar getdataPSBuchar code table0[] TLC549 uchar code table[] 输入电压TLC549配制sbit tlc_clk P36sbit tlc_data P35sbit tlc_cs P34液晶的配置define DATABUS P0sbit RS_LCD P20sbit RW_LCD P21sbit E_LCD P22函数初始化void delay uint zvoid Delay1us ucharvoid initvoid write_com ucharvoid write_data ucharvoid setPosition uchar ucharvoid writeString uchar strvoid Tlc_549 voiduchar read_tlc voidvoid maininitsetPosition 0 0 设置第一行显示地址writeString table0while 1setPosition 1 0 设置输入电压显示地址 writeString tableTlc_549void delay uint zuint xyfor x zx 0x--for y 110y 0y--void Delay1us uchar iwhile --i_nop_ _nop_void initPSB 1write_com 0x30 基本指令扩充指令为34Hdelay 5write_com 0x0c 光标是否显示语句delay 5write_com 0x01 清屏delay 5写命令void write_com uchar comRS_LCD 0RW_LCD 0E_LCD 0delay 1DATABUS comdelay 1E_LCD 1delay 1E_LCD 0写数据void write_data uchar dateRS_LCD 1RW_LCD 0E_LCD 1delay 1DATABUS datedelay 1E_LCD 1delay 1E_LCD 0设置显示开始地址void setPosition uchar x uchar yuchar pswitch x4case 0 p 0x80 break 第一行开始地址 case 1 p 0x90 break 第二行case 2 p 0x88 break 第三行case 3 p 0x98 break 第四行p ywrite_com p写入字符串数据void writeString uchar struchar i 0while str[i] \0write_data str[i]delay 400uchar read_tlc voiduchar ijktlc_clk 0tlc_cs 0for i 0i 8ij j 1k tlc_data 共移出8位数据 tlc_clk 1tlc_clk 0j jktlc_cs 1return j 返回转换结果void Tlc_549 voidulong tempgetdatagex1x2uchar iwhile 1读20次取平均值getdata 0for i 0i 20igetdata read_tlc getdata 20电压显示处理temp ulong getdata500 256 将十六进制转换为十进制ge temp 100 个位x1 temp 100 10 第一位小数x2 temp 100 10 第二位小数write_com 0x95 显示数据的地址地write_data 0x30gewrite_data 0x2e 显示小数点write_data 0x30x1write_data 0x30x2write_data 0x56 显示单位50ms更新一次数据delay 500六实验思考题查看TLC549技术手册说明TLC549操作过程在采集模拟信号时一般不可避免会受到噪声干扰我们一般要做什么处理根据本实验编写处理相关程序。
单片机跑马灯实验报告
单片机跑马灯实验报告摘要:本实验通过使用单片机来控制LED灯进行跑马灯效果的展示。
通过简单的电路连接和编程,我们成功实现了单片机跑马灯的功能。
实验结果表明,单片机跑马灯是一种简单而有效的显示系统,可广泛应用于娱乐和装饰等领域。
引言:跑马灯效果是一种常见且受欢迎的LED显示效果,它可以不断地循环显示LED灯的亮灭轮廓,给人们带来视觉上的愉悦。
单片机是一种可编程的微控制器,广泛应用于电子系统的控制和管理。
在本实验中,我们将利用单片机来实现跑马灯效果,通过编程控制LED灯的亮灭来模拟跑马灯的效果。
材料和方法:本实验所需材料如下:1. 单片机开发板2. LED灯3. 面包板4. 连接线实验步骤:1. 将单片机开发板放置在面包板上,确保连接稳固。
2. 将LED灯连接到面包板上,按照电路图正确连接。
3. 接通电源,将USB线连接到单片机开发板上。
4. 在计算机上打开开发板的编程软件。
5. 编写程序代码,实现跑马灯的效果。
6. 将程序代码下载到单片机开发板中。
7. 观察LED灯的亮灭情况,检查是否实现了跑马灯效果。
结果和讨论:经过实验,我们成功实现了单片机跑马灯的效果。
LED灯按照指定的顺序循环亮灭,产生出跑马灯的效果。
通过调整程序代码,我们可以控制跑马灯的速度和亮灭顺序,使其更加多样化和有趣。
单片机跑马灯是一种简单而有效的LED显示系统。
它可以应用于各种场景,包括室内和室外的装饰灯,新闻标语显示,广告牌等。
跑马灯效果不仅能够吸引人们的目光,还可以起到一定的宣传和广告效果。
总结:通过本次实验,我们了解了单片机的基本原理和应用,并成功实现了单片机跑马灯的效果。
单片机跑马灯具有简单、低成本、可编程等优点,适用于各种需要循环显示效果的场景。
未来,我们可以探索更多有趣的跑马灯效果,并将其应用于实际项目中。
在这个数字化时代,单片机跑马灯有着广阔的应用前景,希望能够为人们的生活和工作带来更多的灵感和乐趣。
单片机整套实验及程序交通灯_跑马灯等
单片机整套实验及程序交通灯_跑马灯等一、单片机整套实验及程序介绍单片机是指一种完整的计算机系统,它是一种将控制器、存储器和输入/输出接口等功能合并在一块芯片上的微处理器。
利用它可以实现各种各样的自动控制系统,广泛应用于工业生产、通讯、计算机硬件系统、军事装备等领域。
在学习单片机时,学习实验是很重要的环节,可以帮助我们更好地理解单片机的原理及其应用。
在此提供一个包含跑马灯和交通灯两个实验的单片机整套实验及程序。
通过这两个实验的学习,可以加深自己对单片机逻辑控制原理的理解,同时也可以提高自己的实际操作能力。
二、跑马灯实验1、实验目的熟悉单片机系统的组成,学习使用单片机的输入/输出口,学习单片机的编程语言,并能用单片机实现跑马灯。
2、实验内容和步骤硬件方面:准备好实验板、单片机、按键、电源等硬件设备,连接好,保证正常工作。
软件方面:利用Keil uVision 4软件建立一个新工程,命名为“跑马灯”。
编写代码:根据单片机的输出口、输入口的接口,进行编程设计。
具体步骤如下:1)设置输入口:设置P32口作为设置跑马灯速度的按键,设置P33口作为开关跑马灯的按键。
2)设置输出口:设置P11~P14口的四个灯,作为跑马灯的显示口。
3)编程:程序的主程序是一个死循环,通过循环控制灯的亮灭,以便达到跑马灯的效果。
按键的实现是通过监测按键输出电平的变化来确定开启、关闭跑马灯的命令,同时还可以通过按键来实现调整跑马灯速度的目的。
3、实验结果通过编写代码,连接相应硬件,完成跑马灯的实验,输出口的LED灯像一个个由左向右、由右向左穿梭的小马跑,实验目的达到。
三、交通灯实验1、实验目的熟悉单片机系统的组成,学习使用单片机的输入/输出口,学习单片机的编程语言,并能用单片机实现交通灯系统。
2、实验内容和步骤硬件方面:准备好实验板、单片机、LED灯等硬件设备,连接好,保证正常工作。
软件方面:利用Keil uVision 4软件建立一个新工程,命名为“交通灯”。
单片机整套实验及程序(交通灯_跑马灯等)-推荐下载
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术通关,1系电过,力管根保线据护敷生高设产中技工资术艺料0不高试仅中卷可资配以料置解试技决卷术吊要是顶求指层,机配对组置电在不气进规设行范备继高进电中行保资空护料载高试与中卷带资问负料题荷试2下卷2,高总而中体且资配可料置保试时障卷,各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并22工且22作尽22下可22都能22可地护以缩1关正小于常故管工障路作高高;中中对资资于料料继试试电卷卷保破连护坏接进范管行围口整,处核或理对者高定对中值某资,些料审异试核常卷与高弯校中扁对资度图料固纸试定,卷盒编工位写况置复进.杂行保设自护备动层与处防装理腐置,跨高尤接中其地资要线料避弯试免曲卷错半调误径试高标方中高案资等,料,编试要5写、卷求重电保技要气护术设设装交备备置底4高调、动。中试电作管资高气,线料中课并敷3试资件且、设卷料中拒管技试试调绝路术验卷试动敷中方技作设包案术,技含以来术线及避槽系免、统不管启必架动要等方高多案中项;资方对料式整试,套卷为启突解动然决过停高程机中中。语高因文中此电资,气料电课试力件卷高中电中管气资壁设料薄备试、进卷接行保口调护不试装严工置等作调问并试题且技,进术合行,理过要利关求用运电管行力线高保敷中护设资装技料置术试做。卷到线技准缆术确敷指灵设导活原。。则对对:于于在调差分试动线过保盒程护处中装,高置当中高不资中同料资电试料压卷试回技卷路术调交问试叉题技时,术,作是应为指采调发用试电金人机属员一隔,变板需压进要器行在组隔事在开前发处掌生理握内;图部同纸故一资障线料时槽、,内设需,备要强制进电造行回厂外路家部须出电同具源时高高切中中断资资习料料题试试电卷卷源试切,验除线报从缆告而敷与采设相用完关高毕技中,术资要资料进料试行,卷检并主查且要和了保检解护测现装处场置理设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
51单片机跑马灯程序编程高四位亮
51单片机跑马灯程序编程高四位亮51单片机是一种非常常用的微控制器,它具有强大的功能和广泛的应用领域。
跑马灯是一种非常简单且常见的程序,可以用来展示LED灯在一组灯中依次亮起的效果。
在51单片机中实现跑马灯程序,可以通过控制IO口的状态来控制LED的亮灭。
假设我们有8个LED灯,要实现高四位亮的跑马灯效果,可以按照以下步骤进行编程:1. 首先,需要定义8个IO口作为LED灯的控制口。
假设我们将P0口的高四位作为控制LED的口,可以通过以下代码进行定义:```sbit LED1 = P0^4;sbit LED2 = P0^5;sbit LED3 = P0^6;sbit LED4 = P0^7;```2. 在主函数中,需要设置IO口的工作模式。
由于我们要控制LED亮灭,需要将相应的IO口设置为输出模式,可以通过以下代码实现:```LED1 = LED2 = LED3 = LED4 = 0; // 初始化为低电平P0M0 = P0M1 = 0; // P0口设置为推挽输出模式```3. 接下来,可以编写一个循环来实现跑马灯效果。
在每一次循环中,将高四位中的一个LED口设置为高电平,其他的LED口设置为低电平,通过不断循环改变高四位LED口的状态,从而实现跑马灯效果。
可以通过以下代码实现:```while (1) {LED1 = 1; // 第一个LED口亮LED2 = 0; // 其他LED口灭LED3 = 0;LED4 = 0;Delay(500); // 延时一段时间,控制灯的亮灭速度LED1 = 0; // 第一个LED口灭LED2 = 1; // 第二个LED口亮LED3 = 0;LED4 = 0;Delay(500);// 依次类推...}```通过以上代码,就可以在51单片机上实现高四位亮的跑马灯效果。
通过改变循环中的延时时间,还可以调节灯的亮灭速度。
此外,还可以通过调节亮灭的顺序,改变跑马灯的效果,使其更加多样化。
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),即可。
用发光二极管实现跑马灯--单片机仿真实验
DJNZ R4, AA BB: CRL A DJL DELAY CC: RR A DJNZ R3,NEXT1 MOV R3, #7 DJNZ R4,CC BB: CRL A DJNZ R0,BB AJMP Start DELAY: MOV R6,#50H L1:MOV R7,#100H DJNZ R7,$ DJNZ R6,L1 DJNZ R5,DELAY RET END tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
用发光二极管实现跑马灯--单片机仿真实验
作业题目:用汇编语言实现跑马灯 作业要求:用发光二极管实现跑马灯效果,八个发光二极管从上到下跑两遍, 闪两下; 然后从下到上跑两遍,闪两下。 程序流程图: 发光二极管的应用仿真效果图: 汇编语言的源程序: LED EQ P1 ORG 00H SJMP Start ORG 30H Start: MOV A,#0FEH;初值 11111110 送入 A MOV R4,#2 ;判断 P1 循环移位的次数 MOV R0 #2;判断循环移位后发光二极管全清零的次数 MOV R3,#7 ;R3 单元作计数器,初值位左移的次数 NEXT: MOV LED,A MOV R5 ,#20 ACALL DELAY AA: RL A DJNZ R3,NEXT MOV R3,#7
单片机跑马灯实验报告(二)
单片机跑马灯实验报告(二)引言概述:单片机跑马灯实验是一种常见的数字电路实验,也是学习单片机基础应用的重要内容。
本实验旨在通过控制单片机的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灯的亮灭顺序和亮度,并实现了跑马灯效果。
通过不断的优化和调试,我们可以进一步提高灯光效果和系统稳定性。
总结:本文通过引言概述、正文内容和总结的方式详细介绍了单片机实例中的跑马灯(二)的设计和实现过程。
通过硬件接口的连接、软件设计、电路调试、代码优化等关键步骤的说明,读者可以了解到如何实现跑马灯效果,并通过优化和调试提高系统的稳定性和效果。
希望本文对读者的学习和实践有所帮助。
单片机跑马灯汇编程序与仿真
51单片机P1口跑马灯的汇编语言编程和protues仿真;跑马灯程序1;用软件技术器实现1秒间隔LED循环点亮;三层循环计数实现1秒延时,250*250*8=0.5秒;由于软件延时需要计算代码执行的时间,所以近似1秒ORG 0000HLJMP MAINORG 0030HMAIN: MOV P1,#0FFHMOV A,#0FEHLOOP: MOV P1,ALCALL TIMEERRL ASJMP LOOPTIMEER: MOV R5,#08HLOOP1: MOV R6,#0FAHLOOP2: MOV R7,#0FAHLOOP3: DJNZ R7,LOOP3DJNZ R6,LOOP2DJNZ R5,LOOP1RETEND;跑马灯程序2;定时/计数器1控制1秒间隔LED循环点亮ORG 0000HLJMP MAINORG 001BHLJMP T1_INTORG 0100HMAIN: MOV R0,#20 ;软计数器MOV TMOD,#10H ;定时器1方式1MOV P1,#0FFH ;熄灭所有LEDMOV A,#0FEH ;点亮第一个LEDMOV TH1,#3CHMOV TL1,#0B0H ;赋初值SETB ET1SETB EA ;开中断SETB TR1 ;启动定时器SJMP $ ;等待中断T1_INT: MOV TH1,#3CHMOV TL1,#0B0H ;赋初值DEC R0 ;软计数CJNE R0,#00H,LPRL A ;灯移位MOV P1,A ;灯改变MOV R0,#20 ;软计数器初值LP: RETI;跑马灯程序3;定时/计数器1控制1秒间隔LED循环点亮;外部中断1控制按键按下跑马灯启动或者停止ORG 0000HLJMP MAINORG 0013HLJMP INT1_INT ;外部中断服务程序,按键触发ORG 001BHLJMP T1_INT ;定时器中断,1秒中断一次ORG 0100HMAIN: MOV R0,#20 ;软计数器计数次数MOV TMOD,#10H ;定时器1方式1MOV P1,#0FFH ;熄灭所有LEDMOV A,#0FEH ;点亮第一个LEDMOV TH1,#3CHMOV TL1,#0B0H ;定时器赋初值SETB I T1 ;外中断1采用下降沿触发SETB E X1 ;允许外部中断1SETB ET1 ;允许定时器中断SETB EA ;开中断SETB TR1 ;启动定时器1SJMP $ ;等待中断T1_INT: MOV TH1,#3CHMOV TL1,#0B0H ;定时器赋初值DEC R0 ;软计数CJNE R0,#00H,LP ;判断计数次数是否达到,是则跳转RL A ;灯移位MOV P1,A ;灯改变MOV R0,#20 ;软计数器初值LP: RETIINT1_INT: MOV A,#0FFH ;按键按下,LED熄灭MOV P1,A ;灯改变CPL TR1 ;定时器改变开关状态MOV A,#0FEH ;点亮第一个LEDRETI ;中断返回Protues仿真电路图欢迎访问艾依河里的鱼的博客。
单片机的跑马灯简单汇编程序
单片机的跑马灯简单汇编程序使用取反(CPL)实现跑马灯的闪烁,随后给P0 口赋值实现移动。
注;使用的是12MHZ 频率,ORG 0000H LJMP LOOP1 ORG 0030H LOOP1: MOV A,#11111111B clr p1.4 ;打开使能MOV R1,#5 ;闪烁5 次LOOP: CPL A ;取反MOV P0 , A ;输出ACALL DEL CPL A MOV P0 , A ACALL DEL DJNZ R1 , LOOP ;减一非零判断MOV P0,#11100111B ACALL DEL MOV P0,#11011011B ACALL DEL MOV P0,#10111101B ACALL DEL MOV P0,#01111110B ACALL DEL LJMP LOOP1 LOOP3: ACALL DEL SJMP LOOP1 DEL: MOV R5,#6H ;延时子程序部分F3: MOV R6,#0FFH ;BCD 码为255 F2: MOV R7,#0FFH ;总延时为0.7803s F1: DJNZ R7,F1 DJNZ R6,F2 DJNZ R5,F3 RET END 带C 循环做移动,使用一条跳转转移指令就可实现一直循环下去,延时为1.3s!ORG 0000H SJMP BEGAIN ORG 0030H BEGAIN: MOV P0, #0FFH ;初始状态clr p1.4 ;打开led 使能mov P2, #00110101B ; 锁存2 个74hc573,防止数码管点阵干扰.MAIN : CLR A MOV A ,#11111110B ; 0FEH LOOP: RLC A MOV P0 , A ACALL DEL LJMP LOOP DEL: MOV R5,#10H F3: MOV R6,#0FFH F2: MOV R7,#0FFH F1: DJNZ R7,F1 DJNZ R6,F2 DJNZ R5,F3 RET ENDtips:感谢大家的阅读,本文由我司收集整编。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51单片机P1口跑马灯的汇编语言编程和protues仿真
;跑马灯程序1
;用软件技术器实现1秒间隔LED循环点亮
;三层循环计数实现1秒延时,250*250*8=0.5秒
;由于软件延时需要计算代码执行的时间,所以近似1秒
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: MOV P1,#0FFH
MOV A,#0FEH
LOOP: MOV P1,A
LCALL TIMEER
RL A
SJMP LOOP
TIMEER: MOV R5,#08H
LOOP1: MOV R6,#0FAH
LOOP2: MOV R7,#0FAH
LOOP3: DJNZ R7,LOOP3
DJNZ R6,LOOP2
DJNZ R5,LOOP1
RET
END
;跑马灯程序2
;定时/计数器1控制1秒间隔LED循环点亮
ORG 0000H
LJMP MAIN
ORG 001BH
LJMP T1_INT
ORG 0100H
MAIN: MOV R0,#20 ;软计数器
MOV TMOD,#10H ;定时器1方式1
MOV P1,#0FFH ;熄灭所有LED
MOV A,#0FEH ;点亮第一个LED
MOV TH1,#3CH
MOV TL1,#0B0H ;赋初值
SETB ET1
SETB EA ;开中断
SETB TR1 ;启动定时器
SJMP $ ;等待中断
T1_INT: MOV TH1,#3CH
MOV TL1,#0B0H ;赋初值
DEC R0 ;软计数
CJNE R0,#00H,LP
RL A ;灯移位
MOV P1,A ;灯改变
MOV R0,#20 ;软计数器初值
LP: RETI
;跑马灯程序3
;定时/计数器1控制1秒间隔LED循环点亮
;外部中断1控制按键按下跑马灯启动或者停止
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP INT1_INT ;外部中断服务程序,按键触发
ORG 001BH
LJMP T1_INT ;定时器中断,1秒中断一次
ORG 0100H
MAIN: MOV R0,#20 ;软计数器计数次数
MOV TMOD,#10H ;定时器1方式1
MOV P1,#0FFH ;熄灭所有LED
MOV A,#0FEH ;点亮第一个LED
MOV TH1,#3CH
MOV TL1,#0B0H ;定时器赋初值
SETB I T1 ;外中断1采用下降沿触发
SETB E X1 ;允许外部中断1
SETB ET1 ;允许定时器中断
SETB EA ;开中断
SETB TR1 ;启动定时器1
SJMP $ ;等待中断
T1_INT: MOV TH1,#3CH
MOV TL1,#0B0H ;定时器赋初值
DEC R0 ;软计数
CJNE R0,#00H,LP ;判断计数次数是否达到,是则跳转
RL A ;灯移位
MOV P1,A ;灯改变
MOV R0,#20 ;软计数器初值
LP: RETI
INT1_INT: MOV A,#0FFH ;按键按下,LED熄灭
MOV P1,A ;灯改变
CPL TR1 ;定时器改变开关状态
MOV A,#0FEH ;点亮第一个LED
RETI ;中断返回
Protues仿真电路图
欢迎访问艾依河里的鱼的博客。