⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 脚踏测试20080721c.c

📁 记录切换次数
💻 C
字号:
////*这是一个4位数码管的显示控制程序,实现1到9999的显示 */
#include <reg51.h> //单片机的头文件
#include <stdio.h> //接口输入输出的头文件
#include <intrins.h>//???
sbit led1=P3^3;  /*左为led1,右为led4    置0时显示*/
sbit led2=P3^2;
sbit led3=P3^5;
sbit led4=P3^4;
sbit lamp=P1^2;
sbit lamp1=P1^3;

led1on();
led2on();
led3on();
led4on();
disp4();
void mesc(unsigned int n);
void oddeven(unsigned int n);

/* 从左往右依次为0,1,2,.....8,9*/
const unsigned char num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned int cishu,x,qian,bai,shi,ge;
unsigned int y,y1,y2,y3,y4;

led1on()
{
   led2=1;
   led3=1;
   led4=1;
   led1=0;
}

led2on()
{
   led1=1;
   led2=0;
   led3=1;
   led4=1;
}

led3on()
{
   led1=1;
   led2=1;
   led3=0;
   led4=1;
}

led4on()
{
   led1=1;
   led2=1;
   led3=1;
   led4=0;
}


//////////*显示4位数  使用循环来显示
///如果程序中使用延时子程序可以减少y1、y2、y3、y4几个变量。
disp4()   
{
 //        x=cishu/10;
         qian=x/1000;
	     bai=(x-qian*1000)/100;
	     shi=(x-qian*1000-bai*100)/10;
	     ge=x-qian*1000-bai*100-shi*10;
         for(y=0;y<1;y++)  //old 20
		 {
		     for(y1=0;y1<10;y1++)
			 {
              led1on();
		      P0=num[qian];
			 }
		      for(y2=0;y2<10;y2++)
			  {
			      led2on();
				  P0=num[bai];
			  }
		      for(y3=0;y3<10;y3++)
			  {
			          led3on();
				      P0=num[shi];
			  }
		      for(y4=0;y4<10;y4++)
			  {
			          led4on();
				      P0=num[ge];
			  }
		 }
		 oddeven(x);
}
//显示3位数  使用延时程序来显示
disp3()
{
//         x=cishu/10;
         qian=x/100;            //百位
		 bai=(x-qian*100)/10;    //十位
		 shi=x-qian*100-bai*10;   //个位
	     for(y=0;y<10;y++)  //old 30
		 {
			      led2on();
				  P0=num[qian];
				  mesc(2);  //数值再大会闪烁

				  led3on();
				  P0=num[bai];
				  mesc(2);

				  led4on();   
				  P0=num[shi];
				  mesc(2);
		 }
		 oddeven(x);
}

//显示2位数  使用延时程序来显示
disp2()
{
//         x=cishu/10;
         qian=x/10;
         bai=x-qian*10;
         for(y=0;y<10;y++) //old28
	     {
			      led3on();
				  P0=num[qian];
				  mesc(3);

			      led4on();
				  P0=num[bai];
				  mesc(3);
		}
		oddeven(x);
}

//延时程序  通过调用时改变时长n值来改变延迟时间
void mesc(unsigned int n)   
{
  unsigned char j;
  while((n--)!=0)
  {
     for (j=0;j<2;j++)
	 {
	 ;
	 }
  }
}

void oddeven(unsigned int n)
{
   if(n%2==1)
      lamp=1;
   else
      lamp=0;
}


/////*将数值显示分别用子程序,减少主程序长度,可能能提高运行速度
/////*当然也可以把各中线时种显示直接写入主程序
/////*不过 直到2008.04.01还不清楚子程序名称的void的使用方法
void main(void) 
{
   int j;
   int shuliang;
   int status=0;
   do{
      for(cishu=0;cishu<50000;cishu++)
      {
	     x=cishu/1;
         if(x/1000>=1)  //4位数
		 {
		   	for(j=0;j<1;j++)  //j为延时时长
			//{
	  	       disp4(); 
			
			oddeven(cishu);
		 }
	     else if(x/100>=1) //3位数
		 {
		    for(j=0;j<1;j++)  //j为延时时长
			{
	  	       disp3(); 
			}
			oddeven(cishu);
		 }
	        else if(x/10>=1)   //2位数
			{
			   for(j=0;j<1;j++)  //j为延时时长
			   //{
		          disp2();
				//}
				oddeven(cishu);
			}
		        else
		        {
			      if(lamp1==1 )
			      {
			         led4on();
 			         P0=0x7f;//8
			         mesc(2000);//old 100
				     oddeven(cishu);
				     status=1;
		          }
			      else
 			      {			         
			         led4on();
			         P0=num[shuliang];//1
			         mesc(2);//old 100
				     if(lamp==1)
					    shuliang=shuliang+1;
					 else
					    shuliang=shuliang;
					 oddeven(cishu);
				     status=0;
			      }
			   }
      }
   }
   while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -