闲来没事,就总结一下流水灯的工作,用两种语言实验C语言和汇编语言。学习单片机的第一个程序就是流水灯实验!学习语言的输出的第一个程序就是 hello word! 这都是一个过程!
我们知道单片机执行的机器语言!汇编就是其执行的根本的语言,任何程序的编译最终还是要生成HEX语言,汇编语言~~!
来回显示,并且显示时还会发出蜂咛声! P1口接八个发光二极管,P2.3接一个蜂咛器!
一.汇编语言
mov r7,#8
main:mov r0,#8 ;一个循环需要移动8位
mov p1,#01111111b ;初始为P0.7灯点亮
loop: clr p2.3
acall ds1ms ;延时,以便人眼可以观察到
setb p2.3
acall ds1ms
mov a,p1 ;读P0口当前显示的数据送到A
rr a ;将A中的数据循环右移1位
mov p1,a ;再将A中右移过的数据送到P0
djnz r0,loop
djnz r7,main ;移动不够8位,跳到LOOP处循环,
ljmp rel ;流动1遍跳转到MAIN处循环流。
;---显示延时----------
ds1ms: mov r1,#1
ds1lo: mov r2,#200
ds2lo: mov r3,#200
djnz r3,$
djnz r2,ds2lo
djnz r1,ds1lo
ret ;延时返回
rel:end
二.C语言
#include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) //延时子程序 { unsigned char m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } void main(void) //主程序 { while(1) //循环条件永远为真,以下程序一直执行下去。 { temp=0xfe; P1=temp; //直接对I/O口P1赋值,使P1.0输出低点平。 delay(); //延时 for(i=1;i<8;i++) //实现广告灯的移动 { a=temp<b=temp>>(8-i); P1=a|b; delay(); } for(i=1;i<8;i++) //实现广告灯的反方向移动 { a=temp>>i; b=temp<<(8-i); P1=a|b; delay(); } } } 实验很简单!懂的朋友完全可以在此基础上开发!比如一个爱心的流水灯。如果你看懂了这两个程序!恭喜你,你已经入门! 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务