3. 定时器与LED模式切换控制
定时器是单片机内部功能,电路连接和运转均在单片机内部完成
- 定时器用于计时系统,或者使程序每隔一段固定时间完成一项操作
- 替代长时间的DELAY,提高效率
每隔一个单位时间,内部的计数单元数值就增加一,当计数单元的数值达到设定值时,技术单元就会向端系统发出中断申请,产生响铃提醒,使程序跳转到中断服务函数中执行
![[Pasted image 20250118110827.png]]
![[Pasted image 20250118111320.png]] - SYSclk:系统时钟,即晶振周期,本开发板为11.0592MHz
- T0 Pin:外部输入时钟,即外部提供脉冲来作为系统时钟
中断系统:暂停当前CPU事件处理,转而去处理紧急事件,处理完之后回到原来中断的地方,继续之前的工作
![[Pasted image 20250118112442.png]]
就是高优先级的中断可以打断低优先级的中断
![[Pasted image 20250118113444.png]]
图中寄存器就是用来控制模式(上图中开关走向)
定时器/计数器使用TCON寄存器控制(Time control)
- 可位寻址寄存器:可以给寄存器内部单独赋值
- 不可位寻址寄存器:只能给寄存器整体赋值
与或式赋值法
复制代码
- 1
- 2
- 3
TMOD = TMOD & 0xF0;
// 也可以直接简写
TMOD &= 0xF0;
这样子赋值可以只给TMOD低四位清零,而高四位不变
可以更加准确的启用想要使用的功能块
复制代码
- 1
- 2
TMOD = TMO | 0x01;
TMOD |= 0x01;
这样可以把低四位置1,高四位不变
总的来说就是与清零,或置1
使用按键控制流水灯
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
unsigned char LEDmod = 0;
void Timer0Init(void) //1毫秒@11.0592MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x66; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA = 1;
ET0 = 1;
}
void Timer0_Rountine(void) interrupt 1
{
static unsigned int timerCount = 0;
TL0 = 0x18;
TH0 = 0xFC;
timerCount++;
if(timerCount >= 1000)
{
timerCount = 0;
if(LEDmod == 0)
{
P2 = _cror_(P2,1);
}
if(LEDmod == 1)
{
P2 = _crol_(P2,1);
}
}
}
void main()
{
P2 = 0xFE;
Timer0Init();
while(1)
{
unsigned char keyNum = key();
if(keyNum != 0)
{
LEDmod++;
if(LEDmod >= 2) LEDmod = 0;
}
}
}
复制代码
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
unsigned char keyNumber;
unsigned char key()
{
if(P3_1 ==0) {Delay(30);while(P3_1 == 0);Delay(30);keyNumber = 1;}
if(P3_0 ==0) {Delay(30);while(P3_0 == 0);Delay(30);keyNumber = 2;}
if(P3_2 ==0) {Delay(30);while(P3_2 == 0);Delay(30);keyNumber = 3;}
if(P3_3 ==0) {Delay(30);while(P3_3 == 0);Delay(30);keyNumber = 4;}
return keyNumber;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步