急求利用定时中断方式0实现led每0.4秒闪烁一次的c语言程序!谢谢!!!

急求利用定时中断方式0实现led每0.4秒闪烁一次的c语言程序!谢谢!!!,第1张

#include<reg52h>

sbit P10=P1^0;//控制LED闪烁

unsigned char count=0;//计数变量

void main()

{

TMOD = 0x01; //设定时器0为模式1,16位模式

TH0=0xdc;

TL0=0x00; //设定时值为10ms,此时晶振频率是110592MHZ

//若晶振频率是12MHZ,则初值应为 TH0=0xd8; TL0=0xf0;

ET0 = 1; //定时器0中断打开

EA = 1; //允许CPU中断

TR0 = 1;//启动定时器0

while(1)

{

if(count==40) //04秒时间是否到

{

count=0; //计数变量清零,为下一次计数做准备

P10=!P10; //IO口取反,即LED亮灭变化

}

}

}

//定时器0中断处理子程序

void Time0() interrupt 1 using 0

{

TH0=0xdc;

TL0=0x00; //设定时值为10ms

count++; //计数加一

}

我写的这个程序应该可以,按一下灯亮,再按一下灯灭

#include

"REG52H"

sbit

LED1_01

=

P1^1;

//LED灯

sbit

KEY0_01

=

P1^2;

//按键

void

Delay_1ms(unsigned

int

Time)

{

unsigned

int

x,

y;

for(x

=

Time;

x

>

0;

x--)

for(y

=

120;

y

>

0;

y--);

}

int

main(void)

{

LED1_01

=

1;

//打开LED灯点亮

while(1)

{

if(KEY0_01

==

0)

//检测按键是否按下

{

Delay_1ms(10);

//延时去抖动

if(KEY0_01

==

0)

//确定按键按下

{

LED1_01

=

~

LED1_01;

//取反LED灯

[

]

}

while(KEY0_01

==

0);

//检测松手

}

}

}

你的图里有A/D转换器

AD转换函数ADC_DISC

#include

<REGX51H>

#include"defh"

#include"libh"

sbit

adc_cs=P1^0;

sbit

adc_rd=P1^1;

sbit

adc_wr=P1^2;

/ADC0804启动转换函数/

INT8U

start_ad()

{

INT8U

temp;

adc_cs=0;

adc_wr=1;

delay(1);

adc_wr=0;

delay(1);

adc_wr=1;

delay(1);

//启动AD

adc_rd=1;

delay(1);

adc_rd=0;

delay(1);

temp=P2;

delay(1);

adc_rd=1;

delay(1);

//读取数据

return

temp;

}

用这个程序。

在main()函数前面声明一下

如:

#include<reg52h>

void delay(uint i);//延时函数声明

void main(void)

{

delay(500); //延时函数调用

}

void delay(uint i) //延时函数定义

{

while(i--);

}

你这个程序死循环了,我一点一点给你纠正:

1 你有个不好的习惯,希望你改正:

定义变量的时候,请明确的指明变量的类型:unsigned char i,或者unsigned int i

而不要是unsigned i,这是不好的习惯。

2 你的这个地方是个死循环:

for(j=7;j>=0;j--)

{

led=(temp>>=1);

yanshi(50);

}

因为你的j定义的是unsigned 类型,所以,j永远都会是非负数,所以,你的for循环会一直进行,修改如下:

for(j=7;j>0;j--)

{

led=(temp>>=1);

yanshi(50);

}

3 看你的while(1)循环里:

while(1) {

if(kaiguan==0) yanshi(20);

if(kaiguan==0)

{

kaideng();

}

if(kaiguan!=1)

{led=0xff;}

}

你这样写,我问你 if(kaiguan==0)和if(kaiguan!=1)有什么区别吗?

以上就是关于急求利用定时中断方式0实现led每0.4秒闪烁一次的c语言程序!谢谢!!!全部的内容,包括:急求利用定时中断方式0实现led每0.4秒闪烁一次的c语言程序!谢谢!!!、汇编语言或C语言编写一个控制灯闪烁的程序、单片机LED闪烁程序的延时Delay()写在main()的后面,该怎么改啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10175378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存