题目要求用定时器1,中断方式2实现数码管显示0~9,那你就需要用到定时中断
1,先去看如何初始化定时器,如何开启中断
2,中断服务函数以及中断号,如何编写中断服务函数。
3,中断服务函数内判断1s时间是否到达(当当的定时器模式2只有八位,故只有0~255),即使初值设定最小,也只能在12T模式下定时大概256us,所以在中断服务函数里面你就要用变量计算好到达1s的时间
- #include<reg52.h>
- unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char j=0; //数码管循环显示变量
- void Time1_Init();
- //不包含数码管位选,数码管位自行添加//
- void main()
- {
- Time1_Init();
- while(1);
- }
- void Time1_Init()
- {
- TMOD=0X20; //定时器1模式2
- TH1=0x05; //定时---250us;
- TL0=0X05; //重装值
- ET1=1; //定时器1中断使能
- EA=1; //总中断使能
- TR1=1; //开启定时器1
- }
- void Time_Interrpt() interrupt 3
- {
- unsigned char i; //计数变量
-
- i++;
- if(i==4000) //定时到达1s
- {
- i=0; //初始化计数变量i
- j++;
- if(j==10)
- j=0;
- P1=smgduan[j];
- }
- }
复制代码
|