找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

请教单片机高手,关于用同一个T0定时器实现闪烁和切换LED的问题

[复制链接]
admin 发表于 2012-9-2 10:04:39 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
#include<reg52.h>
sbit LED1=P0^0;
sbit LED2=P0^1;
#define?? ?count?? ?50000?? ?// T0(MODE 1)之计量值,约0.05秒 ?? ?
#define ??? ?TH_M1 (65636-count)/256?? ?// T0(Mode 1)计量高8位元
#define ??? ?TL_M1 (65636-count)%256?? ?// T0(Mode 1)计量低8位元
int? IntCount=0;?? ??? ?// 宣告IntCount变数,计算T0中断次数
int swap=0;
int i=0;
//==主程序================================
main()?? ??? ??? ??? ??? ?// 主程序开始
{?? ?IE=0x82;?? ??? ??? ?// 启用T0中断(内中断)
?? ?TMOD &= 0xf1;TMOD |= 0x01;?? ?// 设定T0为mode 1
?? ?TH0=TH_M1; TL0=TL_M1;?? ??? ?// 设置T0计数量高8位元、低8位元
?? ?TR0=1;?? ??? ??? ??? ?// 启动T0
?? ? LED1=0;LED2=1;
?? ?while(1);?? ??? ??? ?
}
//== T0中断子程序- 每中断5次,LED反相 ================
void timer0(void) interrupt 1?? ?// T0中断子程序开始
{?? ?TH0=TH_M1; TL0=TL_M1;?? ??? ?// 设置T0计数量高8位元、低8位元
?if(++IntCount==20)?? ??? ??? ??? ??? ??? ??? ??? ? //2秒
?{
?LED1=~LED1;LED2=~LED2;swap=~swap;IntCount=0; };
for(i=0;i<10;i++)
? switch(swap)
{
?? ? case'0': if (IntCount==20) ?? ??? ?// 0.2秒
?? ??? ?{?? ? ?
?? ??? ??? ??? ???? if(i!=0)
?? ??? ??? ??? ??????? ?
?? ??? ??? ??? ???? {LED1=~LED1; }
?? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ?? LED1=0;LED2=1;
?? ??? };break;?? ??? ??? ??? ?

?? ?? case'1':? if (IntCount==20) ?? ??? ?// 0.2秒
?? ??? ?{?? ? ?
?? ??? ??? ??? ?????? if(i!=0)
?? ??? ??? ??? ??????? ?
?? ??? ??? ??? ???? {LED2=~LED2; }
?? ??? ??? ??? ??? ?else
?? ??? ??? ??? ??? ?? LED2=0;LED1=1;
}
}
?? ?}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-28 08:51 , Processed in 0.049851 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表