‘壹’ 51单片机最小系统流水灯的原理图关于AT89S52类型的
图中芯片是AT89C51,最小系统图的话是一样的
程序:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
void delays(uint t)
{
uint i,j;
for(i=0;i<t;i++)
{
for(j=0;j<1141;j++);
}
}
void main()
{
//P0M1=0X00; //单片机除了P0口以外,其他I/O在内部都有上拉电阻
//P0M0=0XFF; //AT89C51没有推挽输出这一说,所以P0高电平不亮,要加上拉电阻;
//用其他端口不需要考虑
/**************从左到右流水灯**************/
uchar i;
P0=0Xfe;
delays(100);
while(1)
{
P0=_crol_(P0,1);//向左循环移动一位
delays(50);
}
}
/*****************左右来回点亮************/
void main()
{
uchar i;
P0=0x01;
delays(100);
while(1)
{
for(i=0;i<7;i++)
{
P0=_crol_(P0,1);
delays(50);
}
for(i=0;i<7;i++)
{
P0=_cror_(P0,1);
delays(50);
}
}
}
‘贰’ 单片机:16个发光二极管组成的流水灯实验
电路图注意:1、P0口里应加上排阻,图里我没画出来。
2、单片机最小系统所需的晶振、复位电路我也没画。
临时帮你做的图,写的程序,细节就不是很完善啦,凑合着看吧!!
下面是程序,_crol_()函数是让temp的值左移一位的即执行一次该函数,temp的值由11111110到11111101,再执行一次是11111011……
_cror_()是右移。
#include<reg51.h>
#include<intrins.h>//包含对_crol_(),_cror_()函数的说明的头文件
unsignedchartemp,i;
voiddelay(unsignedintz)//延时子程序,晶振11.0592M时延时大概1毫秒
{
unsignedintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidmain()
{
while(1)
{
temp=0xfe;
for(i=0;i<8;i++)//流水灯从P0^0口到P0^7口
{
P0=temp;
temp=_crol_(temp,1);
delay(5);
}
i=0;
temp=0xfe;
for(i=0;i<8;i++)//流水灯从P1^0口到P1^7口
{
P1=temp;
temp=_crol_(temp,1);
delay(5);
}
i=0;
temp=0x7f;
for(i=0;i<8;i++)//流水灯从P1^7口到P1^0口
{
P1=temp;
temp=_cror_(temp,1);
delay(5);
}
i=0;
temp=0x7f;
for(i=0;i<8;i++)//流水灯从P0^7口到P0^0口
{
P0=temp;
temp=_cror_(temp,1);
delay(5);
}
i=0;
}
}
‘叁’ 单片机外部中断做流水灯
单片机控制led灯亮和灭,led灯初始状态从左到右两个灯间隔一个灯循环亮灭,然后从右到左循环亮灭,,当按下按键,led灯全亮,然后全灭。然后再恢复循环。
二、实验过程
(一)实验项目的方案分析
1.设计原理
STC12C5A60S2单片机内部包括微处理器、存储器(存放程序指令或数据的ROM、RAM等)、输入/输出口(I/O口)及其他功能部件如定时/计数器、中断系统等。它们通过地址总线、数据总线和控制总线连接起来。
本实验充分利用了8051芯片的I/O引脚。系统已采用STC12C5A60S2系列单片机为中心器件来设计数码管显示系统,实现数码管循环显示。
2.器件配置清单
表1器件配置表
名称
型号
数值
数量
面包板
MB-102
165*55*
(二)实验项目的硬件电路设计
通过Proteus仿真电路软件搭建电路
(三)实验项目的程序设计
1、C51程序编写
2、keil软件调试截图
通过Keil软件进行C51控制程序的编写,通过不断调试修改,最终的调试好的Keil
调试无措的Keil程序
(四)实验项目的虚拟仿真
打开Keil C软件将上面程序输入,调试无误后编译输出".hex"文件,打开Proteus软件,将之前编译好的".hex"文件加入到芯片中,开始运行仿真。
(五)实验项目的实际验证电路及验证结果
将单片机C51程序编译无误后,生成HEX文件,通过STC-ISP下载到单片机中,下载的软件界面搭建的实际
‘肆’ 求流水彩灯的原理及电路图
流水彩灯的原理及电路图如下:
原理:该流水灯电路由时钟发生电路和功能显示电路两部分组成。以集成电路NE555为核心器件构成自激多谐振荡器。
当电源开关S闭合时,电源通过电阻R1和R2向电容器C1充电。当C1刚充电时,由于555的②脚处于低电平,故输出端③脚呈高电平;当电源经R1、R2向C1充电到2/3电源电压时,输出端③脚电平由高变低,555内部放电管导通,电容C1经R2向555的⑦脚放电,直至C1两端电压低于1/3电源电压时,555的③脚又由低电平变为高电平,C1又再次充电,如此循环工作,形成振荡。
555的频率可以通过改变电阻R2的阻止而改变,其时钟输出直接进入4017的14脚,这样来驱动8个LED负载。
‘伍’ 用单片机控制流水灯的六种方案,要程序电路图,详细讲解
;//*********************************************************
;//实现功能:本程序实现在P0口模拟一种流水灯程序
;//*********************************************************
p_out equ P0 ;宏定义P0为p_out
org 00h ;程序的开始地址
ajmp main ;跳到main
org 030h
;//******************主函数***************************
;//描 述:实现在P0口模拟一个流水灯程序
;//设计人: lishengling24
;//****************************************************
main: ;主函数
mov sp,#50h ;设置sp堆栈的初始位置
mov a,#0feh ;初始化acc
main_1:
mov p_out,a ;点亮一个灯
mov r1,#250 ;
mov r0,#250 ;
Call delay_time;调用时间延迟子程序,上面两句是设置延迟时间
mov p_out,#0ffh;熄灭灯
RL a ;循环左移一位准备点亮下一个灯
JMP main_1 ;跳到main_1循环
;//******************时间延迟函数**********************
;//描 述:用指令实现延时一段时间
;//入口参数:r1为高位,r0为低位,都是十六进制表示?
;//出口参数:无
;//设计人:lishengling24
;//****************************************************
delay_time:
push acc ;acc入栈
push psw ;psw入栈
mov a,r0 ;把r0赋给acc
inc r1 ;r1加1,因为djnz是先减1再比较是否为零,如果不加1
;当r1的初值为0的时候,减1后变成了0x0ff,改变了当
;初预想的延迟时间计数值
inc r0 ;道理和inc r1 一样,当然r0和r1的初值不能为0x0ff
loop:
nop
nop
nop
nop
nop
nop
djnz acc,loop ;
mov a,r0 ;
djnz r1,loop ;
pop psw ;psw出栈
pop acc ;acc出栈
ret
end ;需要其他5种方案的程序和电路,在网络HI我。
以下是C的写法:
//*********************************************************
//实现功能:本程序实现在P0口模拟一个流水灯程序
//*********************************************************
#include <reg51.h>
#define p_out P0 //宏定义输出的i/o口为p0
//******************时间延迟函数**********************
//描 述:用指令实现延时一段时间
//入口参数:int i,为时间延迟参数
//****************************************************
void delay_time(int i)
{
while(i)
i--;
}
//******************主函数***************************
//描 述:实现在P0口模拟一个流水灯程序
//****************************************************
void main(void)
{
unsigned char i=0; //初始化一个局部变量为0
p_out=0xff; //初始化将要输出的i/o口,输出高电平,熄灭所有灯
while(1)
{
for(i=0;i<8;i++)
{
p_out=~(1<<i);//点亮一个灯,
delay_time(50000); //延迟一段时间
p_out=0xff;//熄灭所有灯
}
}
}
‘陆’ 急求一个单片机流水灯(16个灯)电路图!!
电路如下:
将16个LED的阴极(Led-、K极)连接到单片机的IO口(P1.0、P1.1...P1.7。。。),
LED的阳极(Led+、A极)串联一个560欧姆电阻(一共16个)到电源正极
(Vcc、5V)
如果要点亮一个Led的话(P1.0)只要
CLR P1.0
要熄灭一个Led的话(P1.0)只要
SETB P1.0
即可
够详细了吧?!