51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序?
CNT EQU 30HORG 0000HSJMP STAORG 000BHLJMP T0ISRORG 0050HSTA: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H ;50ms MOV P1,#0FEH MOV CNT,#20 SETB ET0 SETB TR0 SETB EA SJMP $T0ISR: CLR TR0 MOV TH0,#3CH MOV TL0,#0B0H ;50ms SETB TR0 DEC CNT MOV A,CNT JNZ T0ISRE MOV CNT,#20 MOV A,P1 RL A MOV P1,AT0ISRE: RETI END
单片机汇编语言按键控制流水灯,两个开关k1,k2。实现功能按下k1,流水灯左移动,按下k2,流水灯右移动?
假设P0.0接k1,P0.1接k2,k1或k2闭合时,P0.0或P0.1为低电平0,断开时为高电平1;P2口的8位接8个发光二极管的阳极,发光二极管的阴极通过下拉电阻接地,要点亮相应的二极管,需要P2口对应引脚输出高电平1;按下k1时,P2口初值设为00000001B,这样点亮最右边一个LED,用一段延时程序使得点亮稳定后,使P2口数值依次左移1位,这样8个二极管可以依次点亮,即流水灯左移;按下k2时,P2口初值设为10000000B,这样点亮最左边一个LED,用一段延时程序使得点亮稳定后,使P2口数值依次右移1位,这样8个二极管可以依次点亮,即流水灯右移。
51单片机控制流水灯?
采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。下面来看具体程序:
#include
#define uchar unsigned char
#define uint unsigned int
//N毫秒的延时函数
delay_ms(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=114;j>0;j--); return 0; }
void main(){uchar a,i;while(1){a=0xfe; //点亮第一位LED灯for(i=0;i<8;i++){P1=a;a=a<<1; //左移一位a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); }}}