蓝桥杯单片机学习过程记录(五)定时器和外部中断

蓝桥杯单片机学习过程记录(五)定时器和外部中断

定时器1秒控制小灯

//1秒控制led闪烁
#include<STC15F2K60S2.H>
unsigned int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char t,g;
void main(void){
 //初始化
 P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
 AUXR=0X80;
 TMOD=0Xf0;TH0=0X28;TL0=0X00;
 TF0=0;TR0=1;
 EA=1;ET0=1;
 while(1);
}
//每计时一次进入中断,1s亮灭
void time0(void) interrupt 1
{
 t++;
 if(t==200)
 {
  P00=~P00;
  t=0;
 }
}

定时器1秒控制数码管0-9

//1s控制数码管+1
#include<STC15F2K60S2.H>
unsigned int seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};
unsigned char t,g;
void Timer0Init(void);
void main(void){
 P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
 P2=0XC0;P0=0X01;P2=0XFF;P0=0XFF;
 Timer0Init();
 EA=1;ET0=1;
 while(1);
}
void Timer0Init(void)
{
 AUXR |=0X80;
 TMOD &=0XF0;
 TL0=0X00;
 TH0=0X28;
 TF0=0;
 TR0=1;
}
//控制数码管+1
//定时器0
void time0(void) interrupt 1
{
 t++;
 if(t==200)
 {
  P0=seg[g];
  g++;
  if(g==10)
   g=0;
  t=0;
 }
}

外部中断

//外部中断灭灯
#include<STC15F2K60S2.H>
void key_scan(void);
void delayms(int ms);
unsigned char led;
void main(void){
 P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
 IT0=0;//上升下降均触发
 EX0=1;EA=1;
 while(1){
  key_scan();
  P0=~(0X01<<led);
  delayms(200);
  led++;
  if(led==8)
   led=0;
  }
}
//按键s控制灯全亮
void key_scan(void){
 if(P30==0)
 {
  delayms(5);
  if(P30==0)
  {
   P0=0X00;
   delayms(100);
  }
  while(!P30);
 }
}
//延时函数
void delayms(int ms){
 int q,w;
 for(q=0;q<ms;q++)
  for(w=845;w>0;w--);
}
//中断P32控制led亮灭
void int0() interrupt 0
{
 //下降沿灭,即按下灭
 if(P32==0){
   P0=0XFF;
   delayms(200);
 }
 //上升沿亮,即抬起亮
 if(P32==1){
  P0=0X00;
  delayms(200);
 }
}
发布了27 篇原创文章 · 获赞 17 · 访问量 4161

猜你喜欢

转载自blog.csdn.net/weixin_44747240/article/details/104129539