
01
首先,打开proteus,可以看到界面上方有"库",点开,在库里选择做实验需要的元件。
02如图所示,我们做流水灯实验所需要的元件,就是红色方框里面的元件,一定都要添加进来,要不然实验就做不成功。
03接着,我们按照电路原理图,排布好元件,连好线,最后的电路如图所示。
04我们把实验代码插入单片机,然后点击界面左下角的开始按钮,就可以运行电路。
05如图所示,八个流水灯依次点亮。
一、#include<reg51h>
void delay(unsigned char Xms)//延时Xms
{
int i,j;
for(X = i; X>0; X--)
for(j=110;j>0;j--);
}
void main()
{
P0 = 0x00; //P00~P07分别接八个发光二极管,刚开始全灭
while(1)
{
delay(1000);
P0 = 0xc0;//点亮前两个发光二极管P00和P01;
delay(1000);//延时1秒
P0 = 0x30;//点亮第三个和第四个LED
delay(1000);
P0 = 0x0c;
delay(1000);
P0 = 0x03;
}
}
二、
#include <reg52h>
#include <intrinsh>
#define uchar unsigned char
#define uint unsigned int
uchar temp, t0, t1;
bit t2;
sbit P10 = P1^0;
void main()
{
P10 = 1;
temp = 0xfe;
P0 = temp;
P2 = 0xff;
TMOD = 0x01;
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
ET0 = 1;
EA = 1;
TR0 = 1;
while(1);
}
void timer0() interrupt 1
{
TH0 = (65536 - 50000) / 256;
TL0 = (65536 - 50000) % 256;
t0++;
if(t0 == 10) {
t0 = 0;
t1++;
if(t1 == 8) {t1 = 0; t2 = ~t2; P10 = t2;}
temp = _crol_(temp, 1);
if(t2) {P0 = temp; P2 = 255;}
else {P2 = temp; P0 = 255;}
}
}
扩展资料:
例如:a = 3,b = 5,现交换a,b的值,这个问题就好像交换两个杯子里面的水,这当然要用到第三个杯子,假如第三个杯子是c,那么正确的程序为:c = a; a = b; b = c;执行结果是a = 5,b = c = 3如果改变其顺序,写成:a = b; c = a; b =c;则执行结果就变成a = b = c = 5,不能达到预期的目的,初学者最容易犯这种错误。
顺序结构可以独立使用构成一个简单的完整程序,常见的输入、计算、输出三步曲的程序就是顺序结构,例如计算圆的面积,其程序的语句顺序就是输入圆的半径r,计算s = 314159rr,输出圆的面积s。
参考资料来源:百度百科-c语言
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H ;复位启动
AJMP START ;
ORG 001BH ;T1中断
AJMP T1INT ;
;定义变量========================
YSJS EQU 30H;延时计数器
LED EQU 31H;LED控制缓冲器
;主程序==========================
START: MOV LED,#0FEH ;初始化数据
MOV YSJS,#0 ;
MOV TMOD,#10H ;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H ;设置定时初值
MOV TH1,#3CH ;定时时间=50mS
SETB ET1 ;使能定时器1中断
SETB TR1 ;启动定时器1
SETB EA ;开总中断
MOV P1,LED ;初始化流水灯
LOOP: JMP LOOP ;循环等待中断
T1INT: PUSH PSW ;定时器1中断程序
PUSH ACC ;保护现场
MOV TH1,#3CH ;定时时间=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保护ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束
扩展资料:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P10口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
假如说,第一个灯肯定比第二个灯亮的话,可以直接把8个LED灯的限流电阻弄成不同阻值的。就像楼上说的那样。
但如果想随便变换不同的灯都能有不同的亮度话,硬件电路可以不变,限流电阻都一样。可以在程序里这样写:
首先,例如你要最亮的灯先点亮,隔几十微秒后点亮第二个灯,再相隔同样时间点亮第三个灯……依次类推间隔一定时间点亮八个灯。但间隔时间不要太大,超过十几毫秒就不行了。
然后再间隔相同的时间一次性把灯全关了,再间隔几十微秒回到上面的状态依次点亮灯。……一直这样循环。
这样的话因为人的视力有一定的滞回效果,只要间隔时间不大,你就能看到八个灯不是闪的,而是同时亮,但亮度又不一样。
这是单片机设计中,PWM控制的思路。
以上就是关于单片机八个流水灯左右依次点亮全部的内容,包括:单片机八个流水灯左右依次点亮、用五一单片机c语言编程,p1口控制八个发光二极管,实现每隔一秒,两两点亮,并循环。、51单片机中如何用汇编语言编写流水灯等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)