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

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

#include<reg52.h>

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

unsigned char count=0//计数变量

void main()

{

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

TH0=0xdc

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

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

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

EA = 1//允许CPU中断

TR0 = 1//启动定时器0

while(1)

{

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

{

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

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

}

}

}

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

void Time0() interrupt 1 using 0

{

TH0=0xdc

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

count++ //计数加一

}

因为你的显示数码管数量比较多,应该是用扫描的方法来显示的。

1.所以对于硬件来说,你可以在单片机的输出端使用244缓冲输出器,提高负载的驱动能力,同时加三极管形成达林顿阵列(当然你也可以使用IC芯片),接在数码管的一段,在数码管的另一端(比如说共阴数码管共阴端)你可以加一个三极管作为地址锁存器,关闭不需要显示的数码管,同时锁住需要显示的部分,减少闪烁。

2.中断用C来写的话可能你程序部分没有写好,写好的话不会出现闪烁的现像,建议你用汇编语言再写一次试。

你先试着在公共端,增加三极管,锁住数码管显示的数字,一般来说这样应该可以避免闪烁了。

#include<reg52.h>

sbit P00=P0^0

sbit key=P1^0

unsigned int i=0

void main(void)

{

TMOD=0x10//设定定时器的工作模式为定时器1方式1

TH1=15536/256//向定时器装入初值高八位

TL1=15536%256//向定时器装入初值低八位

EA=1//开总开关

ET1=1//开分开关

TR1=1//启动定时器

while(1)

{

if(key==0)TR1=0

else TR1=1

}

}

void t1(void) interrupt 3//定时器0服务函数

{

TH1=15536/256//向定时器装入初值高八位

TL1=15536%256//向定时器装入初值低八位

if(++i==30)//延时1.5S

{

i=0

P00=~P00//闪烁

}

}


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

原文地址:https://54852.com/yw/11524504.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存