c51流水灯四种效果仿真图+程序

合集下载

Proteus虚拟仿真案例---流水灯制作

Proteus虚拟仿真案例---流水灯制作

Proteus虚拟仿真案例-——流水灯制作一、原理图设计1.打开proteus,新建文件2.选择元器件(1)选择单片机芯片左侧快捷菜单栏里按下,按下P,在“关键字”栏中输入“8951”,选择AT89C51(2)选择晶振:输入crystal,选择CRYSTAL(3)选择电容:输入22p,左边类别中选择Capacitors,右边选择CERAMIC22P(4)选择电阻:输入10k,左边类别中选择Resistors,右边选择RESISTORS库的3WATT10K(5)选择led:输入led,左边类别中选择Optoelectronics,右边选择led—yellow(6)选择按钮:输入button,选择USERDVC库的BUTTON(7)选择好的元器件如图所示3.放置器件振荡电路:(1)放置AT89C51单片机:在DEVICES栏中选中AT89C51,然后在绘制区放置到合适的位置(2)放置晶振,隐藏text属性(菜单-模板—设置设计默认值—显示隐藏文本不勾选)(3)分别将晶振的两脚与AT89C51的19、18脚相连(4)放置两个22p的电容,一端与晶振相连,另一端互连(5)放置地节点(左侧快捷菜单栏里按下—-GROUND),与两个电容相连复位电路:a.放置电源节点(左侧快捷菜单栏里按下——POWER)b.放置地节点c.放置电容,电阻,电阻一端接地,一端与电容相连,电容一端接+5V电源d.AT89C51第9脚接电阻、电容中间e.放置按钮,接电容两端f.右击按钮——编辑属性——元件参考:BUTTON,并取消“本元件不用于PCB制版”g.修改C3电容的值:右击——编辑属性—-Capacitance改为10u绘制流水灯:a.放置电阻、led,右击led——编辑属性——隐藏元件值,连接电阻和ledb.使用块复制,复制7组电阻和ledc.放置电源,分别与D1—D8的一端连接d.总线绘制:左侧选择“总线模式”,绘制一条总线,连接P1口与R2-R9e.使用属性分配工具进行快速网络标号:按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击P0口的8条线,进行编号,再次按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击R2—R9的8条线,进行编号f.批量修改R2-R9的值:按下a,出现属性分配窗口,“字符串”框输入“VALUE=100”,确定二、系统仿真1.编写源代码(1)菜单——源代码——添加/删除源文件—-new——文件名输入pmd。

C51单片机实行流水灯程序

C51单片机实行流水灯程序
//**
//*********************************************************************************************************
void vDelayChange(void) interrupt 2
{
if(Delay>=16)
//**
//*<函数功能>:当定时器0溢出时执行此函数,首先执行2个判断:*
//*(1)if判断是否改变灯的状态,可用于改变延时时间;*
//*(2)switch判断闪烁模式,根据不同模式对灯进行不同的通断。*
//*最后对定时器TH0,TL0重新赋值,溢出时间为50ms。*
//**
//*********************************************************************************************************
unsigned char LED7_[]={0X0F,0XF0,0X33,0XCC,0X3C,0XC3,0XFF};
unsigned char TAB[9]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80};//定义断码表。
unsigned char i=0,j=9;//数据选择计数。
case 2:
if(i>=4)
i=0;
else i++;
LEDPort=LED23_[i];
break;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<模式3,灯从中间往两边依次点亮,不断循环。>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

单片机 51 汇编 花样 流水灯—五种花样

单片机 51 汇编 花样 流水灯—五种花样

**==================花样流水灯=============================**;*********************花样五变流水灯******************************##;##:R7,R6延时;R5延时控制R4,R3 控制循环次数##;##:*HUAYANG* 花样模块开始*BIAOZHI* 花样切换标志##;##:单片机STC89C51 LED花样流水灯五种变化连续汇编基础##;##: 编写:毛毛虫##;*****毛毛虫*************毛毛虫***********毛毛虫****************** ##;--------------------------------------低电位灯亮---------------------------------------------## ORG 0000HSJMP MAINORG 0030H;*****************************************************************##;##——————————————主程序开始—————————————##;##—————————————花样1————————————————##;##***************************************************************##MAIN:LCALL DELAYLCALL HUAYANGYI //调用花样一LCALL BIAOZHI //花样切换标志LCALL DELAYLCALL HUAYANGER //调用花样二LCALL BIAOZHI //花样切换标志LCALL DELAYLCALL HUAYANGSAN //调用花样三LCALL BIAOZHI //花样切换标志LCALL DELAYLCALL HUAYANGSI //调用花样四LCALL BIAOZHI //花样切换标志LCALL DELAYLCALL HUAYANGWU //调用花样五LCALL BIAOZHI //花样切换标志LCALL DELAYAJMP MAIN //跳转到MAIN主函数运行//***************************花样一*********************************HUAYANGYI:MOV A,#0FEH ;给累加器A赋值MOV R3,#05 ;给R3寄存器赋值DEL0:MOV R4,#07 ;给R4寄存器赋值DEL1:MOV P0,A ;累加器A值送至P0口,LED灯亮LCALL DELAY ;延时RL A ;累加器A向左移一位DJNZ R4,DEL1 ;实现L1~L8逐个亮一次即判断循环DJNZ R3,DEL0 ;实现L1~L8灯逐个亮一次,执行7次即判断循环LCALL DELAY ;延时LCALL DELAYMOV A,#0FEH ;累加器A赋值MOV R3,#05 ;寄存器R3 赋值DEL2:MOV R4,#07 ;寄存器R4 赋值DEL3:MOV P0,A ;累加器A传送至p0 口LCALL DELAY ;延时RR A ;累加器A 右移DJNZ R4,DEL3 ;判断循环,实现花样DJNZ R3,DEL2 ;判断循环,实现花样次数LCALL DELAYMOV A,#0FEH ;累加器A 赋值MOV R3,#07 ;寄存器R3 赋值DEL4: MOV R4,#07 ;寄存器R4 赋值DEL5: MOV P0,A ;累加器A 送至P0口LCALL DELAYRL A ;累加器A 左移一位DJNZ R4,DEL5 ;判断循环LCALL DELAYMOV R4,#07 ;赋值DEL6: MOV P0,A ;传送LCALL DELAYRR A ;右移DJNZ R4,DEL6 ;判断循环DJNZ R3,DEL4 ;判断循环LCALL DELAYRET;-----------------------------------------------------------------------------------------------------------##;##****************************花样2××××××××××××××××××××××××××××××××## ;————————————————————————————————————## HUAYANGER:MOV A,#01HMOV R3,#05HYE0:MOV R4,#07HYE1:MOV P0,ALCALL DELAYLCALL DELAYRL ADJNZ R4,HYE1DJNZ R3,HYE0LCALL DELAYMOV R3,#05HYE2:MOV R4,#07HYE3:MOV P0,ALCALL DELAYLCALL DELAYRR ADJNZ R4,HYE3DJNZ R3,HYE2LCALL DELAYMOV R3,#05HYE4:MOV R4,#07HYE5:MOV P0,ALCALL DELAYRLC ADJNZ R4,HYE5MOV R4,#07HYE6: MOV P0,ALCALL DELAYRRC ADJNZ R4,HYE6DJNZ R3,HYE4LCALL DELAYRET;------------------------------------------------------------------------------------------------------------##;##***************************花样3×××××××××××××××××××××××××××××××××## ;————————————————————————————————————## HUAYANGSAN:MOV A,#0FEHMOV R3,#07HYS0:MOV R4,#14HYS1:MOV P0,ALCALL DELAYLCALL DELAYRL ADJNZ R4,HYS1MOV A,#0FCHHYS2:MOV R4,#12HYS3:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYS3MOV A,#0F8H HYS4:MOV R4,#10 HYS5:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYS5MOV A,#0F0H HYS6:MOV R4,#08 HYS7:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYS7MOV A,#0E0H HYS8:MOV R4,#06HYS9:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYS9MOV A,#0C0H HYSA:MOV R4,#04HYSB:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYSBMOV A,#80H HYSC:MOV R4,#02HYSD:MOV P0,ALCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRL ADJNZ R4,HYSDLCALL DELAYLCALL DELAYMOV P0,#00HLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYRET;----------------------------------------------------------------------------------------------------------##;##**************************花样4×××××××××××××××××××××××××××××××××## ;———————————————————————————————————##;===========================查表程序============================## HUAYANGSI:MOV DPTR,#TABLEHYSI0:MOV A,#00HHYSI1:MOVC A,@A+DPTRMOV P0,AMOV R4,#08HYSI2:LCALL DELAYDJNZ R4,HYSI2INC DPTRCJNE A,#0FFH,HYSI1RETTABLE: DB 0FEH,0FEH,0FEH,0FEH,0FEHDB 0FBH,0FBH,0FBH,0FBH,0FBHDB 0EFH,0EFH,0EFH,0EFH,0EFHDB 7EH,7EH,7EH,7EH,7EH,7EHDB 3CH,3CH,3CH,3CH,3CH,3CHDB 0AAH,0AAH,0AAH,0AAH,0AAHDB 55H,55H,55H,55H,55H,55HDB 0E7H,0E7H,0E7H,0E7H,0E7HDB 0C3H,0C3H,0C3H,0C3H,0C3HDB 81H,81H,81H,81H,81H,81HDB 00H,00H,00H,00H,00HDB 0FFH;-----------------------------------------------------------------------------------------------------##;##*************************花样5***********************************## ;——————————————————————————————————## HUAYANGWU:MOV A,#0E7HMOV R3,#03HYW0:MOV R4,#07HYW1:MOV P0,ALCALL DELAYMOV P0,#0FFHLCALL DELAYLCALL DELAYDJNZ R4,HYW1MOV R4,#07HYW2:MOV P0,#0A5HLCALL DELAYLCALL DELAYMOV P0,#0FFHLCALL DELAYLCALL DELAYLCALL DELAYDJNZ R4,HYW2MOV R4,#07HYW3:MOV P0,#24HLCALL DELAYLCALL DELAYLCALL DELAYMOV P0,#0FFHLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYDJNZ R4,HYW3MOV R4,#07HYW4:MOV P0,#00HLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYMOV P0,#0FFHLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYLCALL DELAYDJNZ R4,HYW4DJNZ R3,HYW0RET//***********************延时******************************************## DELAY: MOV R7,#50 ;延时子程序,延时小于0.1S D1: MOV R6,#125D2: NOPNOPNOPNOPNOPNOPDJNZ R6,D2DJNZ R7,D1RET//***********************花样衔接标志***********************************## BIAOZHI: MOV R4,#20 ;循环次数B1: MOV P0,#00HLCALL DELAYMOV P0,#0FFHLCALL DELAYDJNZ R4,B1 ;判断循环结束RETEND。

基于51单片机的C语言流水灯程序

基于51单片机的C语言流水灯程序

基于51单片机的C语言流水灯程序#include //51系列单片机定义文件#define uchar unsigned char //定义无符号字符#define uint unsigned int //定义无符号整数void delay(uint); //声明延时函数void main(){uint i;uchar temp;while(1){temp=0x01;for(i=0;i<8;i++) //8个流水灯逐个闪动{P2=~temp;delay(500); //调用延时函数temp<<=1;}temp=0x80;for(i=0;i<8;i++) //8个流水灯反向逐个闪动{P2=~temp;delay(500); //调用延时函数temp>>=1;}temp=0xFE;for(i=0;i<8;i++) //8个流水灯依次全部点亮{P2=temp;delay(500); //调用延时函数temp<<=1;}temp=0x7F;for(i=0;i<8;i++) //8个流水灯依次反向全部点亮{P2=temp;delay(500); //调用延时函数temp>>=1;}}}void delay(uint a) //延时函数,毫秒级别{uint i;while(--a!=0) //执行空操作循环,其中a为形参,由调用该函数的函数语句提供值{for(i=0;i<125;i++);//执行当0加到125时,大约会用掉1ms 的时间}}。

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告:实验一:用C51实现流水灯实验实验要求:完成亮流水,即LED从低位流向高位流动,每次流动一位,且每次只亮一个LED灯,其它LED灭。

实验原理:单片机流水的实质是单片机各引脚在规定的时间逐个上电,使LED灯能逐个亮起来但过了该引脚通电的时间后便灭灯的过程,实验中使用了单片机的P2端口,对8个LED灯进行控制,要实现逐个亮灯即将P2的各端口逐一置零,中间使用时间间隔隔开各灯的亮灭。

使用r1或rr a实现位的转换。

实验内容:通过仿真来实现实验电路图代码如下;for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;实验结果:实验程序:#include<REG51.H>void delay();//延时函数声明void main()//主函数{unsigned charx,num[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};while(1){for(x=0;x<8;x++){P0=num[x];delay();}for(x=6;x>0;x--){P0=num[x];delay();}P0=0xfe;}}void delay()//延时函数,无符号字符型变量i为形式参数{unsigned int j,k;//定义无符号字符型变量j和kfor(k=0;k<500;k++)//双重for循环语句实现软件延时for(j=0;j<100;j++);}实验总结:这次试验通过仿真实验软件实现流水灯实验,充分学会了keil 软件和Proteus电路仿真的联合调试,为后期的实验做足了功课。

也认识到仿真实用性。

单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。

51单片机项目教程项目 4 流水灯实验

51单片机项目教程项目 4  流水灯实验
(4)查询溢出标志TFx的状态, 决定是否停止定时/计数器;
4.3 项目实施
4.3.1 流水灯开发实战环节
注意:J1接上才能开始做流水灯模块实验
图4- 6流水灯实物结果
实现延时通常有两种方法:一种是硬件延时,要用到定时器 /计数器,这种方法可以 提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用 循环体进行。
2、编写精确的延时函数 1)使用定时器/计数器实现精确延时
2)软件延时与时间计算
在很多情况下,定时器/计数器经常被用作其他用途,这时候就只能用软件方法延 时。下面介绍几种软件延时的方法。 2.1 短暂延时 2.2 在C51中嵌套汇编程序段实现延时 2.3 使用示波器确定延时时间 2.4 使用反汇编工具计算延时时间
(216-初值)×振荡周期×12
例如:若晶振频率为12MHz,则最长的定时时间为(2160)×(1/12)×12us=65.536ms
4.2 技术准备
3. 方式2 THx作为常数缓冲器,当TLx计数溢出时,在置“1”溢出标志TFx 的同时,还自动的将THx中的初值送至TLx,使TLx从初值开始重新计 数。 其定时时间为:
例如:机器时钟频率为12MHZ,机器周期为1μs 时,
若工作在模式0,则最大定时值为:213×1μs =8.192ms 若工作在模式1,则最大定时值为: 216×1μs =65.536ms (2)置定时/计数器初值,直接将初值写入寄存器的TH0、TL0或TH1、TL1;
(3)对TCON寄存器中的TR0或TR1置位,启动定时/计数器,置位以后,计数器 即按规定的工作模式和初值进行计数或开始定时。
4.2 技术准备
4.2.7定时器编程步骤 MCS-51单片机的定时器/计数器是可编程的,具体步骤如下: (1)对TMOD赋值,以确定定时器的工作模式; 初值计算: 设计数器的最大值为M,则置入的初值X为: 计数方式:X=M-计数值 定时方式:由(M-X)T=定时值,得X=M-定时值/T T为计数周期,是单片机的机器周期。 (模式0: M为213=8192 ,模式1: M为216=65536,模式2和3: M为28=256)

实验一-51单片机流水灯实验-实验报告5页

实验一-51单片机流水灯实验-实验报告5页

实验一-51单片机流水灯实验-实验报告5页实验目的:通过51单片机控制LED流水灯的实验,提高学生对于51单片机I/O端口控制的掌握程度,并加深对于“流水灯原理”的理解,在此基础之上,提高同学们对于算法的理解与启发式思路。

实验器材:1. 计算机及Keil C51开发软件。

2. STC89C52单片机开发板一块。

3. LED灯若干(使用的LED有红、黄、绿、蓝、紫共5种,将每种颜色灯各6枚组合成一共30颗灯)。

4. 单片机烧录器。

实验原理:数码管实验就是在P0口中,以位选方式驱动数码管,以位选控制器件的组成电路。

流水灯实验就是在P1口中,以位移方式驱动LED灯,以主控程序的组成电路。

实验内容:实验中使用Keil C51软件编写程序,由程序控制单片机的P1口输出电平,从而控制LED的灯光闪烁。

LED灯的控制方式为从左到右控制LED逐层点亮或逐层熄灭,或者从左到右逐层递增亮度或递增颜色。

另外,LED灯的控制还可以从中间开始点亮或者点熄,并在两边逐层变化。

实验时,需要先理清楚流水灯的控制原理,明确各个控制变量的功能,并制定出相应的算法,在程序中进行实现。

实验步骤:1. 将30个LED灯按照左到右的次序排列好,将其中一个LED固定在开发板上的对应P1口位置上。

2. 根据实验要求,编写一个程序,对于LED的灯光状态进行控制,使LED灯从左到右依次变亮或变暗。

编写程序时可以采用多种实现方式,如如果使用循环语句,可以循环控制LED序列中的每个灯的亮度状态,使得程序能够不断运行直到停止。

3. 编写完成程序后,通过单片机烧录器,将程序烧录到开发板上,并将开发板上的电源连接上。

4. 开发板接通电源后,可以看到电路中的LED发出不同的亮光信号,如果控制程序设计得好,可以实现一些比较有意思的效果,如从起始位置到中间逐渐点亮,或者从中间到两侧依次点亮,等等。

实验结果:通过程序的编写和烧录,可以实现对于LED流水灯的控制。

程序运行期间会通过P1口输出电平信号,控制LED灯的点亮和熄灭,从而实现LED的流水灯效果。

流水灯(电路和汇编)-Proteus和Keil仿真演示实例

流水灯(电路和汇编)-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&lt 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 软件编程)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档