定时中断的流水灯三种状态切换(小白适用)

       最开始学单片机可能会觉得难,就连软件安装和使用都会觉得难。但是不要怕,多去上网查查怎么使用,慢慢就会了。然后就是学过C语言之后学单片机就简单很多,至少懂语句逻辑。

       这里展示的也是我做过的入门作业了。

#include "reg52.h"
#define LED P1

sbit BEEP=P0^0;//蜂鸣器	
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;					    
 
unsigned char COUNTER;	
unsigned char temp;
unsigned char a;
void INTTO() interrupt 1 
{
	COUNTER++;
	if(key1==0){
	if(COUNTER==100){				//计数值加1
		P1=temp;
		if(temp==0xff)
			temp=(temp<<1);
		else
			temp=(temp<<1)+1;
	COUNTER=0;		
			}
	if(key==20){
	if(COUNTER==100)
	
	a=0x05;
	LED=~a;//让LED1和LED3一起亮
    a = a<<1;//左移(整体左移,补0)
			}
	COUNTER=0;
			}
	if(key3==0)
	{
	if(a==0xfc)
	{LED=a;//让LED1和LED2一起亮
   a = a<<2;}//左移(整体左移,补0)
   if(a==0x3f)//反向灭灯123456-1234-12
   {LED=~a;
   a=a>>2;}
   COUNTER=0;
} 

}

main()
{	
	COUNTER=0x01;
	TMOD=0x02;			//定时器0在模式2下工作	 256us
	TL0=(65536-50000)%256;			//定时器每5ms产生一次溢出
	TH0=(65536-50000)/256;			//自动重装的值
	ET0=1;				//使能定时器0中断
	EA=1;				//使能总中断
	TR0=1;				//开始计时
	temp=0xfe;
	while(1)
	{ 
	}				
}

Proteus图示: 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值