求写一个单片机(AT89C51)C语言程序。

要求:1、控制8个LED灯依次闪烁,第1个亮了间隔1S熄灭,然后第2个亮间隔1S熄灭.....依次闪烁。2、程序可以循环,也就是第8个灯熄灭了第个又亮。... 要求:1、控制8个LED灯依次闪烁,第1个亮了间隔1S熄灭,然后第2个亮间隔1S熄灭.....依次闪烁。
2、程序可以循环,也就是第8个灯熄灭了第个又亮。
展开
 我来答
意法半导体(中国)投资有限公司 2023-06-12
展开全部
char seg7[10]={0xc0,0xf9,0xa4,0xb0,0x9,0x92,0x82,0xf8,0x80} sbit w1=b2^0; sbit w2=b2^1; sbit k1=b3^0; /=1表示键盘按下 char count; void main(){ char flg=0; count =0; P0=0xf; /P0口接共阳极数码管,则低电平LED亮 w1=0; w2=0; /高电平LED亮 while(1){ P0=seg7[count/10];w1=1;w2=0; /显示十位 if(k1=0 & flg=0) flg=1; /键盘按下 delaymS(20); /延时20mS P0=seg7[count%10];w1=0;w2=1; /显示个位 if(k1=0 & flg=1) flg=2; /键盘按下有效 delaymS(20); /延时20mS if(k1=1 & flg=2) /键盘抬起 { count+; flg=0;} if(count>9)count=0; w1=0; w…
seuzhouww
2011-03-24 · TA获得超过1386个赞
知道小有建树答主
回答量:658
采纳率:0%
帮助的人:310万
展开全部
用C啊,我想想:
1、和硬件有点儿关系,这个你清楚么?
2、假设LED连接到P1口吧。第一个灯接到P1.0。阴极接IO,阳极接5V。
#include <reg51.h>
bit SecFlag;
unsigned char mS;
void Display(unsigned char num,unsigned char sec)
{
num%=8;
P1=~(1<<num);
while(sec--!=0)
{
TR0=1;
while(SecFlag==0);SecFlag=0;
TR0=0;
}
}
main()
{
unsigned char i;
TMOD=1;IE=0x82;
while(1)
{
Display( (i++)%8,1);
}
}
void ISRT0(void) interrupt 1
{
TH0=(-50000)>>8;TL0=-50000;
mS++;
if(mS>20){mS=0;SecFlag=1;}//12MHz, 50mS定时中断,1秒计时。
}
你很容易扩展出任意要求的闪烁流水灯啦。
Display(2,1);
Display(1,1);
Display(3,2);
Display(1,2);
……放到while里面就好了。祝你玩得开心。
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
百度网友3de737b
2011-03-24 · TA获得超过693个赞
知道答主
回答量:45
采纳率:0%
帮助的人:33.3万
展开全部
ORG 0000H
AJMP START
ORG 000BH
AJMP TIME0

ORG 30H
START:
MOV P1, #0FFH;Note:Hex立即数前必须补0
MOV 35H, #07FH

MOV 30H, #00H
MOV TMOD, #01H
MOV TH0, #0D5H;更改此处可以更改定时器高位,调节以实现1s
MOV TL0, #9FH;更改此处更改定时器地位,调节以实现1s(两者共同作用以实现1s)
SETB EA
SETB ET0
SETB TR0
LOOP:
AJMP LOOP

TIME0:
PUSH ACC
PUSH PSW
INC 30H
MOV A, 30H
CJNE A, #10, T_RET

T_L1:
MOV A, 35H;Note:必须移到ACC中才可以右移
RR A
MOV 35H, A
MOV P1, A
MOV 30H,#0

T_RET:
MOV TH0, #0D5H
MOV TL0, #9FH
POP PSW
POP ACC
RETI
END
追问
C语言啊
不是汇编
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
meng454619501
2011-03-24 · 超过14用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:38.5万
展开全部
gvgvfghv2 这位仁兄的答案可以,只是我不喜欢在中断里面处理事情,因为中断时间总是很急的嘛,那就得注重效率咯,还有一种最愚蠢的方法,就是延时1s啊(一个效率最低的方法哈)
//选择12MHz晶振
//由P0.0~P0.7分别接8个LED,采用共阳极接法。
#include<at89x51.h>
#define uchar unsigned char
uchar time=0;

void timer0_init()
{
TMOD=0X01;
TL0=0XAF;
TH0=0X3C;
ET0=1;
EA=1;
}

void main()
{
timer0_init();
TR0=1;
P0=0XFE;
while(1)
{
if(time>=20)
{
time=0;
P0=(P0<<1)|1;
if(P0==0XFF)P0=0XFE;
}
}
}

void TIMER0_ISR() interrupt 1
{
TL0=0XAF;
TH0=0X3C;
time++;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gvgvfghv2
2011-03-24
知道答主
回答量:24
采纳率:0%
帮助的人:22.1万
展开全部
//选择12MHz晶振
//由P0.0~P0.7分别接8个LED,采用共阳极接法。
#include<at89x51.h>
#define uchar unsigned char

void timer0_init()
{
TMOD=0X01;
TL0=0XAF;
TH0=0X3C;
ET0=1;
EA=1;
}

void main()
{
timer0_init();
TR0=1;
P0=0XFE;
while(1);
}

void TIMER0_ISR() interrupt 1
{
static uchar time=0;
TL0=0XAF;
TH0=0X3C;
time++;
if(time>=20)
{
time=0;
P0=(P0<<1)|1;
if(P0==0XFF)P0=0XFE;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式