蓝桥杯单片机综合小实验1

独立键盘;流水灯;数码管。

功能:用定时器0 定时间隔 1 秒 循环0~9 当按下s2时,开始计时;当按下s3时,停止计时;按下s4 流水灯全亮。

#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit du = P2^6;//数码管段选
sbit we = P2^7;//数码管位选
sbit s2 = P3^0;//独立按键S2
sbit s3 = P3^1;//独立按键S3
sbit s4 = P3^2;//独立按键S4
sbit s5 = P3^3;//独立按键S5
uchar num;//数码管显示的值

//共阴数码管段选表0-9
uchar code leddata[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};


//毫秒级延时函数定义
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 114; y > 0 ; y--); 		
}
 void main ()
 {
     uint a,b;
 	 TMOD = 0x01; // 定时器0,16位计数器;
	 TH0  = 0x4b;	 //	  定时50ms
	 TL0  = 0xfc;	
	 we = 1;
	 P0 = 0xfe;	  // 打开第一数码管
	 we = 0;
	while(1)
	{
	  if(TF0 == 1)	// 定时50毫秒
	  {
	   TH0  = 0x4b;
	   TL0  = 0xfc;
	   TF0 = 0;
		a++;
	  }
	   if(a==20) // 定时1秒
	  {
	    a = 0;
	    b++;	
	  }
 	if(b == 10)
    {
	 b=0; 
	}
	 du = 1;
	 P0 = leddata[b];
	 du = 0;
	 if(s2==0) 
	 {
	   delay(5);
	   if(s2==0)
	   {
	   	 TR0 = 1;	// 当s2 按下 启动定时器,开始计时
	   }
	   while(!s2);
	 }
	  if(s3==0) 
	 {
	   delay(5);
	   if(s3==0)
	   {
	   	 TR0 = 0; 	// 当s3 按下 关闭定时器,停止计时
	   }
	   while(!s3);
	 }
	  if(s4==0) 
	 {
	   delay(5);
	   if(s4==0)
	   {
	   	P1=0x0;
	   }
	   while(!s4);
	 }	
	 if(s5==0) 
	 {
	   delay(5);
	   if(s5==0)
	   {
	   	P1=0xff;
	   }
	   while(!s5);
	 }
   }
 }
 
发布了5 篇原创文章 · 获赞 2 · 访问量 133

猜你喜欢

转载自blog.csdn.net/weixin_42432428/article/details/103970977