程序如下,仿真见附件。有问题请追问。
#include <AT89X51h>
#define uchar unsigned char
#define uint unsigned int
bit flag_1s=0;
uchar code tab[8]={1,2,4,8,16,32,64,128};//[第1小题用这个表]
//uchar code tab[8]={0x05,0,0x50,0xa0,0xaa,0x55,0xff,0x00};//[第2小题用这个表]
void InitTimer1(void)
{
TMOD = 0x10;
TH1 = 0x3C;
TL1 = 0x0B0;
EA = 1;
ET1 = 1;
TR1 = 1;
}
void main(void)
{
static uchar j;
InitTimer1();
P0=0;
P1=0;
P2=0;
P3=0;
flag_1s=1;
while(1)
{
if(flag_1s==1)
{
flag_1s=0;
P2=tab[j];
j++;
if(j>=8) j=0;
}
}
}
void Timer1Interrupt(void) interrupt 3
{
static uchar i;
TH1 = 0x3C;
TL1 = 0x0B0;
//add your code here!
i++;
if(i>=20)//50ms20=1000ms
{
i=0;
flag_1s=1;
}
}
r7在赋了42H后就不能在延时程序里再用了。因为在延时程序里用的话,当从延时程序里跳出后,R7的值就不是42H了。
把这三句(DJNZ R7, LOOP; DELAY:MOV R7,#10H; DJNZ R7,DELAY0;)里的r7改成R4 试试。
LED的阳极接电源正,阴极接P1口,IO某位低电平时,就点亮相应位的LED。P1=0xff,灯全灭。P1=0xfe时点亮P10灯,延时500ms 。P1=0xfd,点亮P11灯。。。。
for(;;)
{} 这条就是程序在大括号里无限循环,就是灯从1~8点亮后再从1~8,一直反复循环,没必要 退出。
org 0000h
mov p1,#00h;P1口送00,全灭
clr a;累加器请0
l0:jnb p35,l1;P35为低转l1
k0:jb p35,l2;P35为高转l2
mov r4,#0fh;R4=0fH
l1:inc a;累加器加1
mov p1,a;P1=A
lcall dl;延时
djnz r4,l1;R4减1不为0转l1
ljmp k0;转k0
mov r2,#07h;R2=07H
mov a,#80h;累加器=80H
l4:mov p1,a;P1=A
dl:mov r7,#0c8h;R7=C8H延时外层循环
dl1:mov r6,#7dh;R6=7DH延时内存循环
dl2:djnz r6,dl2;内存循环
djnz r7,dl1;外层循环
ret
l2:mov r2,#07h;R2=07H
mov r5,#01h;R5=1
k1:mov a,#01h;A=1
l3:mov p1,a;P1=A
rl a;A循环左移
lcall dl;延时
djnz r2,l3;R2减1不为0转l3
rr a;A循环右移
lcall dl;延时
djnz r2,l4;R2减1不为0转l4
djnz r5,k1;R5减1不为0转k1
sjmp l0;转l0
end
P37 连接按键,P1 外接 LED。
没有使用中断。
8个led的点亮方式用数组保存。
--3种不同的点亮方式。
--点亮方式仅仅是一个数字(0、1、2)而已,还用数组保存?
--用变量 mode 保存即可。
#include<reg51h>
#include<intrinsh>
sbit key = P3^7;
unsigned char kc, kb, kz, mode = 2, aa = 0xff;
void delay10ms(void)
{
unsigned int i, j;
for (i = 0; i < 60; i++) for (j = 0; j < 20; j++);
kc = ~key;
kz = kc ^ kb;
kb = kc;
if (kz & kb) {
mode++;
mode %= 3;
if (mode == 0) aa = 0x7f; //3种方式
if (mode == 1) aa = 0x3f;
if (mode == 2) aa = 0x1f;
}
}
main()
{
char i;
while(1) {
for (i = 0; i < 50; i++) {
delay10ms();
if (kz & kb) break;
}
P1 = aa;
aa = _cror_(aa, 1);
}
}
本程序给出的三种方式,显得简陋了一些。
试试看吧。
以上就是关于51单片机流水灯程序全部的内容,包括:51单片机流水灯程序、51单片机的流水灯程序—、单片机中流水灯的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)