80c51花样流水灯(汇编)
单片机最小系统实现花样流水灯
3.灯阵从由下顶点开始,以逆时针依次点亮,最后回到下顶点。
4.灯阵从由下顶点开始,以顺时针依次点亮,最后回到下顶点。
5.先奇数灯点亮,然后偶数灯点亮,呈交替状态。
6.所有灯先同时点亮,后同时熄灭,呈闪烁状态。
7.以上六种状态依次运行。
以上七种运行方式, 由外部中断(微动开关) 控制,即一次中断运行状态1, 两次中断运行状态2,… 当遇到第八此中断时,再次从状态1开始。
uchar ID;
uchar cnபைடு நூலகம்=0; uint j;
void main()
{SP=0x50;
P1=0x00;
//P0=0x00;
EA=1;
IT0=1;
EX0=1;
TMOD=0x10; TH1=15536/256;
TL1=15536%256;
ET0=1; TR0=1;
ID=1;cnt=0; while(1){if(ID>7)
功;最后用keil C编程软件及STC-ISP下载软件完成STC89C5单 片机对外围流水灯设计的整体控制。
三、设计需求
整个流水灯系统由按键控制,实现各种状态之间的转换,即按 键第一次压下,流水灯进入到第一种状态;按键第二次压下,流水 灯进入到第二种状态;以此类推。
四、设计材料
序号
器件
数量
功能
1
STC-89C52单片机最小系统板
基于STC-89C51的流水灯的设计与实现
一、设计目的
以STC-80C51单片机最小系统为核心,设计多样式流水灯。掌 握外围LED电路的设计方法,熟练掌握C51软件编程控制方法,实 现LED闪烁功能,最终完成单片机的应用与外围电路的开发任务。
流水灯(电路和汇编)-Proteus和Keil仿真演示实例知识讲解
流水灯(电路和汇编)-P r o t e u s和K e i l仿真演示实例示例要求:在80C51单片机的P2口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL 51中编程序,形成HEX文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。
第1篇:PROTEUS电路设计1、打开PROTEUS的ISIS软件,如图1所示。
新建电路图文件,将文件保存到E:\projectio (新建文件夹projectio)下面,文件基本名为io,扩展名默认。
选择元图1 ISIS窗口图2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。
图2 元件选择窗口在元件选择对话框的keywords窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元件,添加元件到图3的device列表栏。
在这里依次添加元件单片机80C51、电阻RES、电容CAP、按键BUTTON、晶振CRYSTAL、发光二极管LED-RED,如图3所示。
图3 添加元件的device列表栏3、选择devices元件列表中的元件放到工作窗口,注意放置在工作窗口合适的位置,在元件放置时可对元件进行移动、旋转等操作;如图4所示。
电源(POWER)与地(GROUND):(右键-放置-终端里选)。
图4 放置元件图4、连接导线,如图5所示。
连接后存盘。
图5 连接元件图5、在Keil软件中设计软件程序,形成HEX文件(具体过程见第2篇Keil软件编程)。
保存软件项目到电路文件相同的文件夹E:\projectio下。
6、在PROTEUS电路图中,单击单片机80C51芯片,选中,再次单击打开单片机80C51的属性对话框,在属性对话框中的program file框中选择下载到80C51芯片中的程序。
这里是同一个文件夹下面的shili.hex文件。
如图6所示。
图6 下载程序到单片机7、单击仿真运行按钮play,运行程序。
80C51单片机流水灯设计
//定义延时子函数
第二种: (数组定义 LED 灯的各种状态) #include <reg52.h> #define uint unsigned int uint aa[] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f}; //将灯的不同状态分别定 义成 8 组六进制数并存入数组中 void Delayms(); //延时子函数申明 void main() { unsigned int i = 0; while(1) { P0 = aa[i]; //定义 P0 口为 aa 数组中第 i 个元素的状 态 Delayms(); //延时一段时间 i++; //改变数组中元素下标,当再次调用 时,LED 灯的状态改变 if (i == 8) //当所有状态都运行一次后应该回到最 初的状态,才能得以无限循环 { i = 0; } } } void Delayms() //延时子函数定义 { unsigned int i, j; for (i=1000; i>0; i--) {
ledr = (ledr << 1) | 0x01; led = (ledl & ledr); if (led == 0x7e) { temp = ledr; ledr = ledl; ledl = temp; }
实验二:流水灯——叠加 方法:又多次不同的初态,初态与前次的结束状态相同。 1) 保留前次的结束状态 if (((led >> 1) | 0x80) == temp) { temp = led; } 2)平移时,右边边界会移除,则采用初态合并法 Led = ((led >> 1)| 0x80)| & temp; 思考方法总结:
花样流水灯单片机课程设计
单片机课程设计------花样广告灯的设计院系:电气与自动化工程学院班级:ZB02131姓名:陈达旺学号:ZB02131021前言城市夜景中,变幻多姿的霓虹灯历来是一道亮丽的风景。
利用单片机的自动控制功能,设计出相应不同的电路,可以实现彩灯不同模式的流水效果。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心即使单片机。
单片机的最明显的优势,就是想入到各种仪器,设备中。
本课程是利用AT80C51单片机的自动控制功能,并结合其它电子元器件以及软件实现的流水灯,实现不同种类的流水现象。
2摘要本次课程设计笔者以两种不同颜色的16个LED灯接在P0,P1两个输出端口的花样点亮方法结合8x8点阵的使用以及外接一个数码管,从而显示一个广告灯的流程。
本次设计结合了点阵,中断,数码管,LED灯,数组,计时等程序,虽说对我们初学者来说是有点难度,尤其是要花时间自学点阵之类的知识,但是经过我的那么长时间的努力,总算把这个设计课题完成了,虽然有不少缺陷但是还是有点小小的满足感!本次设计实现的功能:分为两个模式,模式0和模式一通过数码管显示。
模式1为8x8点阵屏显示箭头符号从左至右循环流动,模式0为先由LED灯花样点亮后箭头自左向右流过。
关键字:AT89C51单片机,黄色和绿色LED 灯,,数码管,花样流水灯,8x8点阵屏3电路程序设计1、程序流程图如下所示:2、程序代码如下: #include<reg51.h>#include<intrins.h>#include<stdio.h>#define uchar unsigned char#define uint unsigned intsbit RCK_Pin=P3^2;sbit s27=P3^3 ;uchar code DSY_CODE[]={0x3f,0x06};uchar code Pattern_P0[]={ 0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff 开始 开关选择是否为0 Y N 模式0 (数码管显示) 模式 1 (数码管显示) 流水灯花样点亮,之后点阵屏显示的箭头流动 点阵屏显示的箭头循环流动uchar code Pattern_P2[]={ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code DSY_CONTENT_8x8[ ]={0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF7,0xE3,0x81,0x00,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3,0xE7,0xE7,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,};uchar Scan_BIT=0x01;uchar Offset,Data_Index=0;void Delay(uint t){uchar i;while (t--)for(i=0;i<120;i++);}void T0_Led_Display_Control() interrupt 1{TH0=(65536-1000)/256;TL0=(65536-1000)%256;Scan_BIT=_cror_(Scan_BIT,1);putchar(Scan_BIT);while (TI==0);putchar( DSY_CONTENT_8x8[Offset+Data_Index+8]);while (TI==0);putchar( DSY_CONTENT_8x8[Offset+Data_Index]);while (TI==0);Data_Index=(Data_Index+1)%8;RCK_Pin=1;RCK_Pin=0;}void main (){uchar i;while(1){ if (s27==0){ P1=DSY_CODE[0];}for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];Delay(100);} ;if(s27==1){ P1=DSY_CODE[1];}for (i=0;i<32;i++){TMOD=0x01;TH0=(65536-1000)/256;TL0=(65536-1000)%256;IE=0x82;TCON=0x00;TI=1;Offset=i;TR0=1;Delay(50);TR0=0;} ;}}3、Protues 仿真图如下:点阵屏部分数码管部分花样流水灯部分、完整的仿真图4总结本次课程设计我的课题是花样广告灯的设计,刚开始我针对这个课题的任务要求从图书馆、上网等渠道获取相关信息,查找相关的参考资料,然后设定了本课题的设计方案。
花样流水灯(汇编)
花样流水灯程序(汇编)汇编起始命令统一为:ORG 0000HLJMP MAINORG 0100H延时程序统一为:DELAY: MOV R7, #10 (延时500ms)DL Y2: MOV R6, #200DL Y1: MOV R5, #125DJNZ R5, $DJNZ R6, DL Y1DJNZ R7, DL Y2RET 注:不可少1.普通流水灯MAIN: MOV A, #0FEHLOOP0: MOV R1,#10HLOOP1: MOV P1,ALCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAY 注:每循环一次延时长一些,以便观察LCALL DELAYSJMP LOOP02.L1亮到L8,L8灭到L1MAIN: MOV A, #0FEH LOOP0:MOV R1, #15LOOP1: MOV P1, ALCALL DELAYRL ADEC R1CJNE R1, #07H,LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R1, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP0 MAIN: MOV A, #0FEH LOOP0: MOV R1, #08MOV R2, #08 LOOP1: MOV P1, ALCALL DELAYRL ADEC R1DJNZ R1, LOOP1RR ALOOP2: RR AMOV P1, ALCALL DELAYDJNZ R2, LOOP2LCALL DELAYLCALL DELAYSJMP LOOP03.L1到L8逐个亮灭MAIN: MOV A, #0FEHLOOP0: MOV R1, #0FEHMOV R2, #15LOOP1: MOV P1, ALCALL DELAYRL AANL A, R1DEC R2CJNE R2, #07H,LOOP1 注:以上是让灯从1亮到8MOV R1, #80HLOOP2: ORL A, R1MOV P1, ALCALL DELAYRR ADJNZ R2, LOOP2RL ALCALL DELAYLCALL DELAYSJMP LOOP04.13572468亮MAIN: MOV A,#0FEHLOOP0: MOV R1,#08HLOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H ,LOOP1MOV A, #0FDH LOOP2: MOV P1, ALCALL DELAYRL ARL ADJNZ R1, LOOP2RR ASJMP LOOP0 5.逐个闪烁MAIN: MOV A, #0FEH LOOP0: MOV R1,#10H LOOP1: MOV P1,ALCALL DELAYMOV P1, #0FFHLCALL DELAYRL ADJNZ R1,LOOP1LCALL DELAYLCALL DELAYSJMP LOOP06.流水灯四个四个地亮花样IMAIN: MOV A, #0F0H LOOP0: MOV R1, #09H LOOP1: MOV P1, ALCALL DELAYRL A花样IIMAIN: MOV A, #0F0HLOOP0: MOV R1, #040H LOOP1: MOV P1, ALCALL DELAYSWAP ADJNZ R1, LOOP1LCALL DELAYDEC R1CJNE R1,#05H,LOOP1 LOOP2: MOV P1, ALCALL DELAYRR ADJNZ R1,LOOP2RL A LCALL DELAY LCALL DELAY SJMP LOOP0 LCALL DELAY SJMP LOOP07.全亮全灭MAIN:LOOP0: MOV R1, #04H LOOP1: MOV P1, #00HLCALL DELAYMOV P1, #0FFHLCALL DELAYDJNZ R1, LOOP1LCALL DELAYLCALL DELAYSJMP LOOP08.两个两个地亮MAIN: MOV A, #0FCH LOOP0: MOV R1, #08H LOOP1: MOV P1, ALCALL DELAYRL ARL ADEC R1CJNE R1,#04H,LOOP1RR ARR ALOOP2: MOV P1, ALCALL DELAYRR ARR ADJNZ R1, LOOP2RL ARL ALCALL DELAYLCALL DELAYSJMP LOOP0 9.穿越MAIN: MOV R2,#0FEHMOV R3, #7FH LOOP0: MOV R1,#016 LOOP1: MOV A,R2ANL A,R3MOV P1, ALCALL DELAYMOV A,R2RL AMOV R2, AMOV A,R3RR AMOV R3, ADJNZ R1,LOOP1LCALL DELAYSJMP LOOP0 LCALL DELAY。
51单片机流水灯实验报告-单片机实验报告流水灯
51单片机流水灯试验一、实验目的1.了解51单片机的引脚结构。
2.根据所学汇编语言编写代码实现LED灯的流水功能。
3.利用开发板下载hex文件后验证功能。
二、实验器材个人电脑,80c51单片机,开发板三、实验原理单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。
使用rl或rr a实现位的转换。
A寄存器的位经过rr a之后转换如下所示:然后将A寄存器转换一次便送给P2即MOV P2,A便将转换后的数送到了P2口,不断循环下去,便实现了逐位置一操作。
四、实验电路图五、通过仿真实验正确性代码如下:ORG 0 MOV A,#00000001B LOOP:MOV P2,ARL AACALL DELAY SJMP LOOPDELAY:MOV R1,#255 DEL2:MOV R2,#250DEL1:DJNZ R2,DEL1DJNZ R1,DEL2RETEnd实验结果:六、实验参考程序#include<reg52.h>#define uchar unsigned char #define uint unsigned intuchar table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};sbit P00=P0^0;sbit P01=P0^1;void delay(uchar t){uchar i,j;for(i=0;i<t;i++)for(j=0;j<110;j++); }void main(){uchar i;while(1){P00=1;delay(2000);P00=0;for(i=0;i<8;i++){P1=table[i];P2=table[i];delay(2000);}P01=1;delay(2000);P01=0;}}实物展示:(1)单片机最小系统板(2)自己焊制的集成最小系统板自己制作的心形流水灯实验板(3)系统板与实验板的连接展示七.实验总结:这次试验我通过Proteus仿真实现对流水灯功能的实现。
80C51单片机可控流水灯的设计
西安文理学院机械电子工程系课程设计任务书学生姓名王鑫专业班级电信专业08级2班学号 0810*******指导教师朱继萍职称教研室电子信息工程课程单片机技术及应用题目 80C51单片机可控流水灯的设计任务与要求设计任务:使用80C51单片机的P2口和P3口控制LED1~LED16进行花样显示。
显示顺序规律为:①16个LED依次左移单个点亮;②16个LED依次左移逐个点亮;③ 16个LED依次左移逐个熄灭;④从①开始再次循环。
设计要求:1、利用80C51单片机和74LS373芯片设计硬件电路;2、运用汇编语言编写实现该任务的程序;3、使用Proteus ISIS软件和Keil C51软件进行仿真,验证设计。
开始日期 2011.12.19 完成日期 2011.12.302011年 12月 18 日80C51单片机可控流水灯的设计【设计任务】本设计将使用80C51单片机的P2口和P3口控制LED1~LED16进行花样显示。
预计显示顺序规律为:①16个LED依次左移单个点亮;②16个LED依次左移逐个点亮;③ 16个LED依次左移逐个熄灭;④从①开始再次循环。
【硬件设计】使用74LS373与单片机连接,进行数据锁存驱动,其连接方法为:由P2口输出数据,控制2片74LS373以驱动16个LED数码管;P3控制74LS373进行选择与锁存数据。
在桌面双击图标,打开ISIS 7 Professional窗口。
单击菜单命令“File” → “New Design”,新建一个DEFAULT模板,保存文件名为“80C51单片机可控流水灯. DSN”。
执行菜单命令“System” → “Set Sheet Size”,在弹出的“Sheet Size Configura…”对话框中选择“A4”选项,单击“OK”选项,完成图纸的设置。
执行菜单命令“Library” →“Pick Device/Symbol”,添加如表1所示的原件。
C51流水灯多样显示程序
C51流水灯多样显示程序流水,多样,程序功能说明:1、单个LED流水灯从左到右2、单个LED流水灯从右到左3、从左边一个个点亮8个LED4、从右边一个个点亮8个LED5、所有的LED开关8次6、左右闪烁8次7、8个流水灯两边向中间依次点亮8次8、8个流水灯中间向两边依次点亮8次测试环境:在ME300B开发板上测试通过*************************************************************/ #include<reg51."h> //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void delay(uint); //声明延时函数void main(void); //声明主函数/***********************************************************主程序/***********************************************************/void main(void){uint i;uchar temp;while(1){/***********************************************************8个流水灯逐个闪动/***********************************************************/temp=0x01;for(i=0;i<8;i++){P0=~temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯反向逐个闪动/***********************************************************/temp=0x80;for(i=0;i<8;i++){P0=~temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯依次全部点亮/***********************************************************/temp =0xFE;for(i=0;i<8;i++){P0=temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯依次全部熄灭/***********************************************************/temp =0xFE;for(i=0;i<8;i++){P0=~temp;delay(100);temp<<=1;}/******************************************************* ****8个流水灯依次反向全部点亮/***********************************************************/temp=0x7F;for(i=0;i<8;i++){P0=temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯依次反向全部熄灭/***********************************************************/temp=0x7F;for(i=0;i<8;i++){P0=~temp;delay(100);temp>>=1;}/******************************************************* ****8个流水灯全部点亮关闭8次/***********************************************************/temp=0xfF;for(i=0;i<8;i++){P0=temp;delay(100);P0=~temp;delay(100);}/***********************************************************8个流水灯左右晃动8次/***********************************************************/temp=0xAA;for(i=0;i<8;i++){P0=temp;delay(100);P0=~temp;delay(100);}/*********************************************************** 8个流水灯两边向中间点亮8次/***********************************************************/P0=0XFF;delay(200);for(i=0;i<8;i++){P0=0x7e;delay(100);P0=0xbd;delay(100);P0=0xdb;delay(100);P0=0xe7;delay(100);}/***********************************************************8个流水灯中间向两边点亮8次/***********************************************************/P0=0XFF;delay(200);for(i=0;i<8;i++){P0=0xe7;delay(100);P0=0xdb;delay(100);P0=0xbd;delay(100);P0=0x7e;delay(100);}}}/********************************************************** *延时程序/***********************************************************/void delay(uint t) //定义延时函数{register uint bt; for(;t;t--)for(bt=0;bt<255;bt++);}。
流水灯(电路和汇编)-Proteus和Keil仿真演示实例
示例要求:在80C51单片机的P2 口连接8个发光二极管指示灯,编程实现流水灯的控制,轮流点亮指示灯。
在KEIL 51中编程序,形成HEX文件;在PROTEUS中设计硬件,下载HEX文件,运行看结果。
第1 篇: PROTEUS电路设计1、打开PROTEUS的ISIS软件,如图1所示。
新建电路图文件,将文件保存到E:\projectio (新建文件夹projectio)下面,文件基本名为io,扩展名默认。
图1 ISIS窗口图2、在component mode模式下单击选择元件按钮P,打开元件选择对话框,如图2所示。
图2元件选择窗口Root sheet 1IF在元件选择对话框的 keywords 窗口中输入元件关键字可换搜索元件,找到元件后,双击元件则可选中元 件,添加元件到图3的device 列表栏。
在这里依次添加元件单片机 80C51、电阻RES 、电容CAP 、按键BUTTON 、晶振CRYSTAL 、发光二极管 LED-RED ,如图3所示。
3、选择devices 元件列表中的元件放到工作窗口, 注意放置在工作窗口合适的位置,在元件放置时可对元件进4所示。
电源(POWER )与地(GROUND ):(右键-放置-终端里选)。
Fil* JJi ** Edit Ts< Vetixn 肆紛h 命af” U 俺峙 Litrsrv 1 也Svct K*lp国W;踞輕丨==■■-!□] x|行移动、旋转等操作;如图 图3添加元件的device 列表栏配輔證 S I?) K I S E I EIF記汨益器心 呼Tn •冒l-H-一 -4、连接导线,如图5所示。
连接后存盘。
Pile V] ew Edit l^els Dess EHScfirct Betur Latr KT ?" IflEwlute Svster M<lp|D I ^S 虚id 旨3|[囱書]舟 命迫旦塹口|]叭c x %e.^z z■ ■狀 ]ls tnsi iasH.^10^71^连接元件图5、 在Keil 软件中设计软件程序,形成 HEX 文件(具体过程见第 2篇Keil 软件编程)。
[整理版]80c51花样流水灯(汇编)
一:80c51花样流水灯的控制。
要求:利用查表的方法控制流水灯,接线如下汇编程序如下:ORG 0000H ; 定义程序地址从0000H开始存放JMP MAIN ;跳转至主程序ORG 0030H ;设置主程序地址MAIN:MOV DPTR,#TABLE ;将TABLE的地址赋给DPTRONE: CLR A;累加器清零MOVC A,@A+DPTR ;取出表中的数据CJNE A,#0FFH,TWO ;判断是不是表中最后的0FFH,如果不是则跳转至TWOJMP MAIN ;如果是表中最后的0FFH,则跳转至main,重新运行TWO: MOV P1,A;将数据输出至p1口CALL DELAY;调用延时程序INC DPTR ;修改指针DPTR,指向表中下一个数据JMP ONE ;跳转至oneDELAY:MOV R3,#20 ; 延时子程序定义D1: MOV R4,#100D2: MOV R5,#230DJNZ R5,$DJNZ R4,D2DJNZ R3,D1RETTABLE: ; 花样流水灯的表,可以自由定义DB 01111111BDB 10111111BDB 11011111BDB 11101111BDB 11110111BDB 11111011BDB 11111101BDB 11111110BDB 11111110BDB 11111101BDB 11111011BDB 11110111BDB 11101111BDB 11011111BDB 10111111BDB 01111111BDB 11100111BDB 11011011BDB 10111101BDB 01111110BDB 10111101BDB 11011011BDB 11100111BDB 11100111BDB 11011011BDB 10111101BDB 01111110BDB 10111101BDB 11011011BDB 11100111BDB 01010101BDB 10101010BDB 00110011BDB 11001100BDB 11110000BDB 00001111BDB 10001000BDB 0FFH ;用作表的结尾的标志,可自由定义。
基于C51单片机4按键4种花样流水灯设计
}
if(k4==0){
delay(10);
if(k4==0){
flag1=0;
flag2=0;
flag3=0;
flag4=1;
}
}
}
/**************主程序************************/
void main() {
while(1)
{keyscan();
if(flag1==1){
void delay(uint x)
{
uint i;
while(x--)
for(i=50;i>0;i--);
}
/******************判断按键***********************/
void keyscan()
{ if(k1==0)
{delay(10);
if(k1==0)
{
flag2=0;
基于c51单片机4按键4种花样流水灯设计单片机流水灯电路图单片机流水灯程序单片机流水灯按键控制流水灯单片机按键消抖程序单片机按键程序单片机按键控制led单片机按键电路单片机独立按键程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
/************************流水灯花样设计********************/
uchar table1[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfc,0xff};/***从右到左逐一点亮反向灭之**/
单片机课程设计流水灯
第3章课程设计——流水灯本设计是实时测控电路的基础,主要应用了80C51(单片机),2764(8KB/8的非易失性可编程存储器)、74HC573(8D锁存器)、74LS02(8D或非门)。
充分发挥了80C51单片机的程序存储器的扩展功能,其优点是硬件电路简单,易懂、易学。
3.1 工作原理3.1.1 存储电路原理80C51通过执行外部程序存储器(2764)里面的指令来对电路图下方的两片74HC573进行写操作,从而就可以灵活的改变74HC573里面锁存的内容,而使发光二极管按照指令的要求显示不同的状态。
由此可见,74HC573在此是被当作一个只可写而不可读的存储单元来使用的,至于为什么不可读,原因很简单,因为74HC373是一个单向的8D锁存器,其输入端不能同时作输出端。
但我们仍可以通过发光二极管来读它里面锁存的内容。
3.1.2驱动电路原理现在要解决的是P0口的时序问题,它包括两个方面:一方面是对外部程序存储器的访问;另一方面是对两个“数据写入单元”(即两个74HC573)的访问。
前一个问题的解决方法可以从何立民主编的《单片机初级教程》图9-2 得出。
对于第二个问题实现的方法可以有多种,本人使用P2.5和P2.6端口分别和80C51的写端口(WR)异或取反后作为这两片74HC573的片选信号。
可照此法扩展多片74HC573,驱动更多发光二机管。
本人在编程时所给两片74HC573的地址如下:表1 74HC573地址3.2 具体制作步骤3.2.1 绘制电路原理图根据该课程设计所要实现的功能,可画出电路原理图,见附录B 附图3.2.1。
3.2.2 确定元器件清单列出元器件清单,到电子城购买元器件。
元器件清单见附录C 附表3.2.1。
3.2.3 在万能板上焊接电路按照电路原理图的连接关系将元器件焊接好。
此步骤较为重要,需要有足够的耐心。
在焊接过程中我没有做一次成功,做了一些基本的通断检查,发现有三个地方虚焊,修改好后,再进行检查,找出错误将其一一改正。
花样流水灯的设计
电子技术课程设计题目花样流水灯的设计院(系)名称信息工程学院专业班级10 专升本一班学号100310026学生姓名江涛指导教师2011年6月16日课程设计任务书2010—2011学年第二学期专业:电子信息工程学号:100310026 姓名:江涛课程设计名称:单片机原理及应用课程设计设计题目:花样流水灯设计完成期限:自2011 年 5 月30 日至2011 年 6 月10 日共 2 周一、设计依据城市夜景中,变幻多姿的霓虹灯历来是一道亮丽的风景。
利用单片机的自动控制功能,设计出相应不同的电路,可以实现彩灯不同模式的流水效果。
本设计通过对器件选择和线路连接进行分析讨论,结合相应的软件设计,达到相应的设计要求。
通过本设计,要求对多种流水灯的连线和程序控制方式进行讨论,并对软件设计能提出相应建设性意见,同时写出合格的课程设计论文。
二、要求及主要内容1.硬件电路设计89C51应用系统设计(晶振电路, 上电复位电路)P1口接八个彩灯P3.0---P3.7接8个开关提供8种控制方式,共实现20种不同的亮灯方式。
2.程序设计:先画流程图再根据流程图写程序(1)主程序设计:查询程序八个分支:停止,1灯流水,2灯流水,1灯间隔,2灯间隔,快速/慢速,循环,正流水/倒流水,每个子程序执行完后返回主程序。
(2)子程序设计:停止;1灯流水子程序设计;2灯流水子程序设计;1灯间隔子程序设计;2灯间隔子程序设计;0.5秒延时子程序;2秒延时子程序;正流水/倒流水子程序设计,循环子程序设计。
3.选芯片, 元件按设计连线4.完成子程序调试(1)实验板与PC机联机。
(2)输入子程序单步执行。
如果流水灯显示错误, 检查接口是否有误, 若无误再检查控制代码,直至符合要求(3)在延时后设断点, 每执行1次流水灯移动1次。
(4)连续执行完成1种流水灯的调试。
(5)改变控制代码逐个完成所有子程序。
5.完成总调试(1)输入主程序及子程序。
(2)按子程序调试执行, 先执行1灯流水, 成功后复位。
简单的51单片机花样流水灯C语言源代码
简单的51单片机花样流水灯C语言源代码#include //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void Delayms(uint x){ //定义延时函数uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void main(){uint i;uchar temp;while(1){temp=0x01; //8个流水灯逐个闪动for(i=0;i<8;i++){P0=~temp;Delayms(50);temp<<=1;}temp=0x80; //8个流水灯反向逐个闪动for(i=0;i<8;i++){P0=~temp;Delayms(50);temp>>=1;}temp=0xfe; //8个流水灯依次全部点亮for(i=0;i<8;i++){P0=temp;Delayms(50);temp<<=1;}temp=0x7f; //8个流水灯依次反向全部点亮for(i=0;i<8;i++){P1=temp;Delayms(50);temp>>=1;}}}//此程序的作者向往未来#include#include#define uint unsigned int #define uchar unsigned char uchar z=50,e=0x00,f=0xff; uchar code table1[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff};uchar code table2[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; uchar code table3[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};uchar code table4[]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff}; uchar code table5[]={0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff};uchar code table6[]={0x7e,0x3c,0x18,0x00, 0x18,0x3c,0x7e,0xff}; void delay(uchar); void lsd1();void lsd2();void lsd3();void lsd4();void lsd5();void lsd6();void lsd7();void lsd8();void lsd9();void lsd10();void lsd11();void lsd12();main(){while(1){lsd1();lsd2();lsd3();lsd4();lsd5();lsd6();lsd7();lsd8();lsd9();lsd10();lsd11();lsd12();}}void delay(uchar x) //延时函数{uint i,j;for(i=x;i>0;i--)for(j=250;j>0;j--);}void lsd1() //lsd1 单个流水灯双程模式1 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);for(i=0;i<7;i++) //仅单个灯亮从上往下流{a=_crol_(a,1);P0=a;delay(z);}P0=0xff;a=0xfe;P2=a;delay(z);for(j=0;j<7;j++){a=_crol_(a,1);P2=a;delay(z);}P2=0xff;a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=_crol_(a,1);P3=a;delay(z);}P3=0xff;a=0xfe;P1=a;delay(z);for(l=0;l<7;l++){a=_crol_(a,1);P1=a;delay(z);}a=0xbf;P1=a;delay(z);for(l1=0;l1<6;l1++) //l1==6 仅单个灯亮从下往上流{a=_cror_(a,1);P1=a;delay(z);}a=0x7f;P3=a;delay(z);for(k1=0;k1<7;k1++) {a=_cror_(a,1);P3=a;delay(z);}P3=0xff;a=0x7f;P2=a;delay(z);for(j1=0;j1<7;j1++) {a=_cror_(a,1);P2=a;delay(z);}P2=0xff;a=0x7f;P0=a;delay(z);for(i1=0;i1<7;i1++) {a=_cror_(a,1);P0=a;}P0=0xff;}void lsd2() //lsd2 两个灯流水双程模式1 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);a=a<<1;P0=a;delay(z);for(i=0;i<6;i++){a=_crol_(a,1);P0=a;delay(z);}P0=0x7f;P2=0xfe;delay(z);P0=0xff;a=0xfc;P2=a;delay(z);for(j=0;j<6;j++){a=_crol_(a,1);P2=a;}P2=0x7f;P3=0xfe;delay(z);P2=0xff;a=0xfc;P3=a;delay(z);for(k=0;k<6;k++) {a=_crol_(a,1);P3=a;delay(z);}P3=0x7f;P1=0xfe;delay(z);P3=0xff;a=0xfc;P1=a;delay(z);for(l=0;l<6;l++) {a=_crol_(a,1);P1=a;delay(z);}P1=0x7f;delay(z);delay(z);a=0x7f;P1=a;delay(z);a=a>>1;P1=a;delay(z);for(l1=0;l1<6;l1++) {a=_cror_(a,1);P1=a;delay(z);}P1=0xfe;P3=0x7f;delay(z);P1=0xff;a=0x3f;P3=a;delay(z);for(k1=0;k1<6;k1++) {a=_cror_(a,1);P3=a;delay(z);}P3=0xfe;P2=0x7f;delay(z);P3=0xff;a=0x3f;P2=a;delay(z);for(j1=0;j1<6;j1++){a=_cror_(a,1);P2=a;delay(z);}P2=0xfe;P0=0x7f;delay(z);P2=0xff;a=0x3f;P0=a;delay(z);for(i1=0;i1<6;i1++){a=_cror_(a,1);P0=a;delay(z);}P0=0xfe;delay(z);P0=0xff;delay(z);}void lsd3() //lsd3 两个灯流水双程模式2 {uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);a=a<<1;P0=a;delay(z);for(i=0;i<6;i++) //_crol_与_cror_混合使用{a=_crol_(a,1);P0=a;delay(z);}P0=0x7f;a=0x7f;P2=a;delay(z);P0=f;a=a>>1;P2=a;delay(z);for(j=0;j<6;j++){a=_cror_(a,1);P2=a;delay(z);}P2=0xfe;a=0xfe;P3=a;delay(z);P2=f;a=a<<1;P3=a;delay(z);for(k=0;k<6;k++) {a=_crol_(a,1);P3=a;delay(z);}P3=0x7f;a=0x7f;P1=a;delay(z);P3=f;a=a>>1;P1=a;delay(z);for(l=0;l<6;l++) {a=_cror_(a,1);P1=a;delay(z);}P1=0xfe;delay(z);P1=f;delay(z);a=0xfe;delay(z);a=a<<1;P1=a;delay(z);for(l1=0;l1<6;l1++) //l1==6 {a=_crol_(a,1);P1=a;delay(z);}P1=0x7f;a=0x7f;P3=a;delay(z);P1=f;a=a>>1;P3=a;for(k1=0;k1<6;k1++){a=_cror_(a,1);P3=a;delay(z);}P3=0xfe;a=0xfe;P2=a;delay(z);P3=f;a=a<<1;delay(z);for(j1=0;j1<6;j1++) {a=_crol_(a,1);P2=a;delay(z);}P2=0x7f;a=0x7f;P0=a;delay(z);P2=f;a=a>>1;P0=a;delay(z);for(i1=0;i1<6;i1++) {a=_cror_(a,1);P0=a;delay(z);}P0=0xfe;delay(z);P0=f;delay(z);}void lsd4() //lsd4{uchar a,i,j,k,l,l1,k1,j1,i1;P0=a;delay(z);for(i=0;i<7;i++){a=a<<1; //单个灯依次点亮所有灯,从上往下P0=a;delay(z);}a=0xfe;P2=a;delay(z);for(j=0;j<7;j++){a=a<<1;P2=a;delay(z);}a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=a<<1;P3=a;delay(z);}a=0xfe;P1=a;for(l=0;l<7;l++){a=a<<1;P1=a;delay(z);}for(l1=0;l1<8;l1++) //l1==8{P1=table1[l1]; //单个灯依次熄灭所有灯,从下往上delay(z);}for(k1=0;k1<8;k1++){P3=table1[k1];delay(z);}for(j1=0;j1<8;j1++){P2=table1[j1];delay(z);}for(i1=0;i1<8;i1++){P0=table1[i1];delay(z);}}void lsd5() //lsd5{uchar a,i,j,k,l,l1,k1,j1,i1;a=0xfe;P0=a;delay(z);for(i=0;i<7;i++){a=a<<1;P0=a;delay(z);}for(j=0;j<8;j++) //单个灯依次点亮所有灯,从下往上{P2=table2[j];delay(z);}a=0xfe;P3=a;delay(z);for(k=0;k<7;k++){a=a<<1;P3=a;delay(z);}for(l=0;l<8;l++){P1=table2[l];delay(z);}for(l1=0;l1<8;l1++) //单个灯依次熄灭所有灯,从上往下{P1=table3[l1];delay(z);}for(k1=0;k1<8;k1++){P3=table1[k1];delay(z);}for(j1=0;j1<8;j1++) //单个灯依次熄灭所有灯,从上往下{P2=table3[j1];delay(z);}for(i1=0;i1<8;i1++){P0=table1[i1];delay(z);}}void lsd6() //每组为单位同亮同灭从左向右再向左{P0=0x00;delay(z);P0=0xff;P2=0x00;delay(z);P2=0xff;P3=0x00;delay(z);P3=0xff;P1=0x00;delay(z);P3=0x00;P1=0xff;delay(z);P2=0x00;P3=0xff;delay(z);P0=0x00;P2=0xff;delay(z);P0=0xff;delay(z);}void lsd7() //lsd7 全亮全灭{uchar i;for(i=0;i<2;i++){P0=0x00;P1=0x00;P2=0x00;P3=0x00;delay(z);P0=0xff;P1=0xff;P2=0xff;P3=0xff;delay(z);}}void lsd8() //每组仅两个灯,从中间往两边再往中间{uchar i;for(i=0;i<8;i++){P0=table4[i];P1=table4[i];P2=table4[i];P3=table4[i];delay(z);}}void lsd9() //每组两个灯引亮所有灯再引灭,从中间带两边再到中间{uchar i;for(i=0;i<8;i++){P0=table5[i];P1=table5[i];P2=table5[i];P3=table5[i];delay(z);}}void lsd10(){uchar a,i,j;a=0xfe;P0=a;P1=a;P2=a;P3=a;delay(z);for(i=0;i<7;i++) //仅单个灯亮从上往下流{a=_crol_(a,1);P0=a;P1=a;P2=a;P3=a;delay(z);}for(j=0;j<7;j++) //仅单个灯亮从上往下流{a=_cror_(a,1);P0=a;P1=a;P2=a;P3=a;delay(z);}P0=f;P1=f;P2=f;P3=f;delay(z);void lsd11() {uchar a,i,j;a=0xfe;P0=a;P1=a;P2=a;P3=a;delay(z);for(i=0;i<7;i++) {a=a<<1;P0=a;P1=a;P2=a;P3=a;delay(z);}for(j=0;j<8;j++) {P0=table1[j];P1=table1[j];P2=table1[j];P3=table1[j]; delay(z);}}void lsd12()uchar a,i,j,k,l;a=0xfe;P0=a;P1=a;delay(z);for(i=0;i<7;i++) {a=a<<1;P0=a;P1=a;delay(z);}a=0x7f;P2=a;P3=a;delay(z);for(j=0;j<7;j++) {a=a>>1;P2=a;P3=a;delay(z);}for(k=0;k<8;k++) {P2=table3[k];P3=table3[k]; delay(z);}for(l=0;l<8;l++) {P0=table1[l];P1=table1[l]; delay(z);}while(1);}。
80C51可控流水灯单片机课程设计报告
80C51单片机流水灯实训和调试报告班级:姓名:学号:1 目的单片机课程设计主要是为了让我们增进对80C51单片机电路的感性认识,加深对理论方面的理解。
了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。
另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
2.2课题的意义这次单片机课程设计是为了通过对流水灯控制的设计加强学生团队配合的能力和创造力;综合运用专业及基础知识,解决实际工程技术问题的能力。
能够让学生深入真是的体会到所学的理论知识和实践相结合的过程。
找出自身的不足并加以改正。
2.3预期的目标对8个LED灯设计5种流水灯显示方式,用一个按键进行方式选择,并用一个数码管显示方式编号;用两个键来控制流水灯流动的速度。
2.4面对的问题这次课程设计是通过80C51位单片机实现。
但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。
而更为严峻的就是设计的最后还要将软硬件相结合。
首先我们需要通过protel将设计的实物的电路图画出来,再根据电路图连接实物电路。
2.5课题的技术LED灯的显示方式、模式切换按钮的控制、亮灯速度的按键控制等技术。
3系统分析3.1涉及的基础知识电路焊接:制造电子产品的重要手段。
80C51单片机指令系统:规定80C51单片机内操作的语句或命令。
LED数码管的显示:向数码的显示送数,控制系统的显示部分。
3.280C51单片机引脚图及引脚功能介绍本次实习的目的在于加深80C51单片机的理解,首先来简单认识一下,它的引脚如图3-1所示:图3.1 80C51的引脚图单片机的39个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
1.电源:(1)VCC:芯片电源,接+5V;(2)VSS:接地端;2.时钟:XTAL1、XTAL2 :晶体振荡电路反相输入端和输出端。
(完整版)51单片机流水灯程序
1.第一个发光管以间隔200ms 闪烁。
2.8个发光管由上至下间隔1s流动,其中每个管亮500ms,灭500ms。
3.8 个发光管来回流动,第个管亮100ms。
4.用8 个发光管演示出8 位二进制数累加过程。
5.8个发光管间隔200ms由上至下,再由下至上,再重复一次,然后全部熄灭再以300ms间隔全部闪烁 5 次。
重复此过程。
6.间隔300ms第一次一个管亮流动一次,第二次两个管亮流动,依次到8个管亮,然后重复整个过程。
7.间隔300ms 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;8个全部闪烁3次;关闭发光管,程序停止。
1#include<reg52.h>#define uint unsigned intsbit led 仁P"0;void delay();void main(){while(1){led1=0;delay();led1=1;delay();}}void delay(){uint x,y;for(x=200;x>0;x--) for(y=100;y>0;y--);}2#include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char sbit p 仁P1A0;uchar a;void delay(); void main() {a=0xfe;P1=a;while(1){ a=_crol_(a,1); delay();P1=a;delay();}}void delay(){uint b; for(b=55000;b>0;b--);}3#include<reg52.h>#include <intrins.h>#define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=100;x>0;x--) for(y=110;y>0;y--);}void main(){uchar a,i;while(1)a=0xfe;for(i=0;i<8;i++){P1=a; delay(100); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a; delay(100); a=_cror_(a,1);}}}4#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint a){uint x,y;for(x=a;x>0;x--) for(y=110;y>0;y--);}void main(){uchar b;while(1){b++;P1=~b; delay(200);5#include<reg52.h>#include <intrins.h> #define uint unsigned int #define uchar unsigned char void main(){uchar a,i,j;while(1){ for(j=0;j<2;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(200); a=_crol_(a,1);}a=0x7f;for(i=0;i<8;i++){P1=a;delay(200); a=_cror_(a,1);}}P1=0xff; for(j=0;j<10;j++) {delay(300);P1=~P1;}}}void delay(){uint x,y; for(x=200;x>0;x--) for(y=110;y>0;y--); 6 #include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(){uint x,y; for(x=300;x>0;x--) for(y=110;y>0;y--);} void main(){uchar a,i,j; while(1) {a=0xfe; for(j=0;j<8;j++) { for(i=0;i<8-j;i++) {P1=a; delay(200); a=_crol_(a,1);} a=_crol_(a,j); P1=0xff; a=a<<1;}} }7#include<reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint z){uint x,y; for(x=z;x>0;x--)for(y=110;y>0;y--);}void main(){uchar a,i,j;for(j=0;j<3;j++){P1=0x55;delay(300);P1=0xaa;delay(300);}for(j=0;j<3;j++){a=0xfe;for(i=0;i<8;i++){P1=a;delay(300);a=_crol_(a,1);}}P1=0xff;for(j=0;j<3;j++){P1=0x7e;delay(300);P1=0xbd;delay(300);P1=0xdb;delay(300);P1=0xe7;delay(300);}P1=0xff;for(j=0;j<3;j++){P1=0xe7;delay(300);P1=0xdb;delay(300);P1=0xbd;delay(300);P1=0x7e;delay(300);}P1=0xff; for(j=0;j<6;j++) {P1=~P1; delay(300);}P1=0xff;while(1);}。
51单片机经典流水灯汇编程序
单片机流水灯汇编程序设计流水灯汇编程序8只LED为共阳极连接,即单片机输出端为低电平时即可点亮LED。
;用最直接的方式实现流水灯ORG 0000HSTART:MOV P1,#01111111B ;最下面的LED点亮LCALL DELAY ;延时1秒MOV P1,#10111111B ;最下面第二个的LED点亮LCALL DELAY ;延时1秒MOV P1,#11011111B ;最下面第三个的LED点亮(以下省略)LCALL DELAYMOV P1,#11101111BLCALL DELAYMOV P1,#11110111BLCALL DELAYMOV P1,#11111011BLCALL DELAYMOV P1,#11111101BLCALL DELAYMOV P1,#11111110BLCALL DELAYMOV P1,#11111111B ;完成第一次循环点亮,延时约0.25秒AJMP START ;反复循环;延时子程序,12M晶振延时约250毫秒DELAY: ;大约值:2us*256*256*2=260ms,也可以认为为250msPUSH PSW ;现场保护指令(有时可以不加)MOV R4,#2L3: MOV R2 ,#00HL1: MOV R3 ,#00HL2: DJNZ R3 ,L2 ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2)DJNZ R2 ,L1 ; 中层循环:256次DJNZ R4 ,L3 ;外层循环:2次POP PSWRETEND51单片机汇编程序集(二)2008年12月12日星期五 10:27辛普生积分程序内部RAM数据排序程序(升序)外部RAM数据排序程序(升序)外部RAM浮点数排序程序(升序)BCD小数转换为二进制小数(2位)BCD小数转换为二进制小数(N位)BCD整数转换为二进制整数(1位)BCD整数转换为二进制整数(2位)BCD整数转换为二进制整数(3位)BCD整数转换为二进制整数(N位)二进制小数(2位)转换为十进制小数(分离BCD码)二进制小数(M位)转换为十进制小数(分离BCD码)二进制整数(2位)转换为十进制整数(分离BCD码)二进制整数(2位)转换为十进制整数(组合BCD码)二进制整数(3位)转换为十进制整数(分离BCD码)二进制整数(3位)转换为十进制整数(组合BCD码)二进制整数(M位)转换为十进制整数(组合BCD码)三字节无符号除法程序(R2R3R4/R7)=(R2)R3R4 余数R7;二进制整数(2位)转换为十进制整数(分离BCD码);入口: R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD21 : MOV NCNT,#00HMOV R2,#00HIBD211 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINC R0INC NCNTMOV A,R3ORL A,R4JNZ IBD211MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(2位)转换为十进制整数(组合BCD码);入口: R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD22 : MOV A,R0PUSH AMOV R7,#03HCLR AIBD221 : MOV @R0,AINC R0DJNZ R7,IBD221POP AMOV R0,AMOV R7,#10HIBD222 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV B,#03HIBD223 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD223POP AMOV R0,ADJNZ R7,IBD222RET;二进制整数(3位)转换为十进制整数(分离BCD码) ;入口: R2,R3,R4;占用资源: ACC,R2,NDIV31;堆栈需求: 5字节;出口: R0,NCNTIBTD31 : CLR AMOV NCNT,AIBD311 : MOV R7,#0AHLCALL NDIV31MOV A,R7MOV @R0,AINC R0INC NCNTMOV A,R2ORL A,R3ORL A,R4JNZ IBD311MOV A,R0CLR CSUBB A,NCNTMOV R0,ARET;二进制整数(3位)转换为十进制整数(组合BCD码) ;入口: R2,R3,R4;占用资源: ACC,B,R7;堆栈需求: 3字节;出口: R0IBTD32 : MOV A,R0PUSH AMOV R7,#04HCLR AIBD321 : MOV @R0,AINC R0DJNZ R7,IBD321POP AMOV R0,AMOV R7,#18HIBD322 : PUSH ACLR CMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV B,#04HIBD323 : MOV A,@R0ADDC A,@R0DA AMOV @R0,AINC R0DJNZ B,IBD323POP AMOV R0,ADJNZ R7,IBD322RET第七个试验:流水灯数字显示综合练习----51单片机汇编语言试验教程收藏该程序运行结果为个位数码管轮流现实0,1,2,3,4,5,6,7,8然后十位数码管轮流现实0,1,2,3,4,5,6,7,8反复循环P1.0,P1.1, P1.2,P1.3, P1.4,P1.5, P1.6,P1.7, 依次点亮然后轮流点亮小喇叭不停发出滴答声:注意该程序配套为我站的倚天版开发套件:如果是标准版:因他的数码管接法不同。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一:80c51花样流水灯的控制。
要求:利用查表的方法控制流水灯,接线如下
汇编程序如下:
ORG 0000H ; 定义程序地址从0000H开始存放
JMP MAIN ;跳转至主程序
ORG 0030H ;设置主程序地址
MAIN:
MOV DPTR,#TABLE ;将TABLE的地址赋给DPTR
ONE: CLR A;累加器清零
MOVC A,@A+DPTR ;取出表中的数据
CJNE A,#0FFH,TWO ;判断是不是表中最后的0FFH,如果不是则跳转至TWO JMP MAIN ;如果是表中最后的0FFH,则跳转至main,重新运行TWO: MOV P1,A;将数据输出至p1口
CALL DELAY;调用延时程序
INC DPTR ;修改指针DPTR,指向表中下一个数据
JMP ONE ;跳转至one
DELAY:MOV R3,#20 ; 延时子程序定义
D1: MOV R4,#100
D2: MOV R5,#230
DJNZ R5,$
DJNZ R4,D2
DJNZ R3,D1
RET
TABLE: ; 花样流水灯的表,可以自由定义
DB 01111111B
DB 10111111B
DB 11011111B
DB 11101111B
DB 11110111B
DB 11111011B
DB 11111101B
DB 11111110B
DB 11111110B
DB 11111101B
DB 11111011B
DB 11110111B
DB 11101111B
DB 11011111B
DB 10111111B
DB 01111111B
DB 11100111B
DB 11011011B
DB 10111101B
DB 01111110B
DB 10111101B
DB 11011011B
DB 11100111B
DB 11100111B
DB 11011011B
DB 10111101B
DB 01111110B
DB 10111101B
DB 11011011B
DB 11100111B
DB 01010101B
DB 10101010B
DB 00110011B
DB 11001100B
DB 11110000B
DB 00001111B
DB 10001000B
DB 0FFH ;用作表的结尾的标志,可自由定义END。