单片机编程。试编写程序,使LED灯逐个点亮,时间为一秒。先谢谢。

如题所述

不知道要汇编的还是C的,C的就是
#include<单片机型号头文件>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay();
void main()
{
uchar temp=0xfe;
while(1)
{
Px=temp //x代表你的单片机接在P几口 如果你接在P1口就是P1自己修改下
delay();
Px=_crol_(temp,1);
}
}
void delay() //程序延时
{
uint i,j;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
}
}
汇编的是:
1.实验任务
开关K1接在P3.2管脚上,在AT89S51单片机的P0.0端口接有1个发光二极管,上电的时候,L1接在P1.0管脚上的发光二极管在亮,当一次按下开关K1的时候,灯灭,再按一次,灯亮,如此轮流下去。
2.系统板上硬件连线
把“单片机系统”区域中的P3.2端口连接到“独立式键盘”区域中的K1端口上;把P0.0连到L1上
3.程序设计方法
(1. 设计思想由来
在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的ID号标识,这样,每按下一次按键,ID的值是不相同的,所以单片机就很容易识别不同功能的身份了。
(2. 设计方法
从上面的要求我们可以看出,L1到亮灭受开关K1来控制,我们给L1亮灭定义出不同的ID号,当L1在亮时,ID=0;当L1在灭时,ID=1;分别给出不同的ID号我们就能够完成上面的任务了
4.汇编程序:
ID EQU 30H
K1 BIT P3.2
L1 BIT P0.0
ORG 0000H
CLR P1.7
MOV ID,#00H
START: JB K1,REL ;K1没闭合转
LCALL DELAY10MS ;K1闭合,延时消抖动
JB K1,REL :再判断
INC ID
MOV A,ID
CJNE A,#02,REL
MOV ID,#00H
REL: JNB K1,$ ;等待开关弹起
MOV A,ID
CJNE A,#00H,IS0 ;判断相应ID
CLR L1 :ID=0,灯亮
LCALL DELAY光 ;延时
SJMP START
IS0: CJNE A,#01H,START;
SETB L1
LCALL DELAY
SJMP START

DELAY10MS: MOV R6,#20 ;延时10MS子程序
LOOP1: MOV R7,#248
DJNZ R7,$
DJNZ R6,LOOP1
RET
DELAY: MOV R5,#20 ;延时20MS子程序
LOOP2: LCALL DELAY10MS
DJNZ R5,LOOP2
RET
END
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-05-03
这个是用C语言编写的,延时采用的是延时子程序,如果想精确些用定时器延时在联系我 HI我。

#include<单片机型号头文件>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delay();
void main()
{
uchar temp=0xfe;
while(1)
{
Px=temp //x代表你的单片机接在P几口 如果你接在P1口就是P1自己修改下
delay();
Px=_crol_(temp,1);
}
}
void delay() //程序延时
{
uint i,j;
for(i=1000;i>0;i--)
for(j=110;j>0;j--);
}
}
第2个回答  2010-05-03
晶振认为是12MHz定时器中断时间为50ms,累计20次中断的时间为1s
这个程序是精确定时的,不像楼上的delay函数定时不精确
#include <reg52.h>
#include <intrins.h>

unsigned char i=0;
void init();

void main()
{
init();
while (1)
{
if(i==20)
{
i=0;
P1=_crol_(P1,1);//循环移位函数 在intrins函数中定义
}
}
}

void init()
{
TH0=0x3c; //定时器赋初值定时时间50ms
TL0=0xB0;
TMOD=0x01; //设置定时器工作方式为方式1
EA=1; //开总中断
ET0=1; //开中断允许位
TR0=1; //定时器计数

P1=0xfe; //这里假设led灯与P1口相连并且
//低电平有效

}

void timer0() interrupt 1
{
TH0=0x3c;
TL0=0xB0; //溢出后重新赋初值
i++; //定时器中断时间为50ms
//20次中断时间为1s
}
第3个回答  2010-05-03
void main()
{
unsigned char temp,i;
temp=0xfe;
for(i=0;i<8;i++)
{
P0=temp;
temp<<=1;
delay(100);
}
}
相似回答