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

📄 复件 main.c

📁 三位数码管正计时程序
💻 C
字号:
 /*********************************************************
  程序名称:一个单片机控制数码显示块的正计时程序;
  描述:单片机的P0口并行输出,驱动数码管的A-G的各段位,
  P2口的前三个口通过三极管选择各数码管。
  P1、P3做数码块的初始值设定。
  通过T0的方式1做计时,计时不太准确。
  适用:只显示安全的天数,要求不太精确的地方。
  缺点:计时时从加电时开始计时,增加变化时在加电时刻(以后天数)
 ***********************************************************/
 
 #include <reg51.h>
 #define uchar unsigned char
 #define uint  unsigned int
 
 code uchar a[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
 
 uchar k,m,n;

 int timer; 

 delay(void){
 
  uchar i,j;
   for(i=0;i<50;i++){  
   	  for(j=0;j<50;j++){;}  
   }
 }
/***定时器初始化程序*************/
void timer_init(void)
{

   TMOD = 0x01;	 /*定时器0方式1*/
   TH0=0xB1;    /* 计数初值写入TH0 */
   TL0=0xDF;    /* 写入计数初值到TL0 */
   ET0=1;       /* 定时器0中断允许*/
   EA=1;        /* 全局中断允许 */
   TF0=0;       /* 定时器0中断标志位清0 */
   TR0 = 1;
}
 //定时器中断处理
void timer_0() interrupt 1 using 1
{
  
   TH0=0xB1;    /* 计数初值写入TH0 */
   TL0=0xDF;    /* 写入计数初值到TL0   20MS*/
   if(timer == 100) {  	 
   	  if(n<9){
	      n++;
	   }else{
	     if(m<9){
	    	n = 0;m++;		
		 }else{n = 0;m = 0;k++;}	  	  
	   } 
	  timer = 0;   
   }else{ 
       timer++;	   
     }
}
 void main(void){
   P1 = P3 = 0xFF;
   timer_init();

 /*确定个位的初始值*/
 switch (P1&0x0F)
  {
    case 0: n = 0;break;
	case 1: n = 1;break;
	case 2: n = 2;break;
	case 3: n = 3;break;
	case 4: n = 4;break;
	case 5: n = 5;break;
	case 6: n = 6;break;
	case 7: n = 7;break;
	case 8: n = 8;break;
	default: n = 9;break;   
  }

 /*确定十位的初始值*/
 switch (P1&0xF0)
  {
    case 0: m = 0;break;
	case 16: m = 1;break;
	case 32: m = 2;break;
	case 48: m = 3;break;
	case 64: m = 4;break;
	case 80: m = 5;break;
	case 96: m = 6;break;
	case 112: m = 7;break;
	case 128: m = 8;break;
	default: m = 9;break;
   
  }
 
 /*确定百位的初始值*/
 switch (P3&0x0F)
  {
    case 0: k = 0;break;
	case 1: k = 1;break;
	case 2: k = 2;break;
	case 3: k = 3;break;
	case 4: k = 4;break;
	case 5: k = 5;break;
	case 6: k = 6;break;
	case 7: k = 7;break;
	case 8: k = 8;break;
	default: k = 9;break;   
  }

 while(1){
     P2 = 0x01; P0 = a[k];
     delay();
     P2 = 0x02; P0 = a[m];
     delay();
     P2 = 0x04; P0 = a[n];
     delay();	
  }
 }

⌨️ 快捷键说明

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