EDN首页   博客首页

日志档案

发表于 2006-10-3 21:48:39

2

标签: 无标签

实验10-99计数器

#include "reg51.h"

/********************/
unsigned char table[]=
   {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
   //
共阴数码管 0-9
/********************/  
sbit seclet_A = P1^0; //
管脚定义 74-138 3-8 控制信号线
sbit seclet_B = P1^1;
sbit seclet_C = P1^2;
/********************/  //
宏定义  
#define  SM_1  seclet_C=0;seclet_B=0;seclet_A=0
#define  SM_2  seclet_C=0;seclet_B=0;seclet_A=1
#define  SM_3  seclet_C=0;seclet_B=1;seclet_A=0
#define  SM_4  seclet_C=0;seclet_B=1;seclet_A=1
#define  SM_5  seclet_C=1;seclet_B=0;seclet_A=0
#define  SM_6  seclet_C=1;seclet_B=0;seclet_A=1
#define  SM_7  seclet_C=1;seclet_B=1;seclet_A=0
#define  SM_8  seclet_C=1;seclet_B=1;seclet_A=1

/******************************/
void delay(unsigned int d_time);
     //
延时子函时,
     
unsigned char count_99=0;
unsigned char count="0";
/***************/  
void main(void) 
{
 unsigned char i;  //
定义循环变量
    TMOD="0x01";   //T0
工作在方式1 16位计数器
    TH0=(65536-10000)/256;  //
预先 设定定时器 初值
    TL0=(65536-10000)%256;
    EA="1";    //
开启 总中断
    ET0=1;    //
开启定时器 0
    TR0=1;    //
定时器 0 的运行标志位 
 while(1)
 {
  SM_8;    //
点亮第八个数码管  
  P2=table[count_99%10]; //P2
作为数据传输端口
  delay(70);
  SM_7;    //
点亮第七个数码管  
  P2=table[count_99/10]; //P2
作为数据传输端口
  delay(70);
  
 }
}

/**********************************/
void time0(void)  interrupt 1 using 1  //
产生50MS定时

 TH0=(65536-50000)/256; //
重新设置定时器 初值
 TL0=(65536-50000)%256;
 count++;   //50ms
太短,闪烁频率太快
 if(count==20)  //
用变量 count 延长到1s
 {
  count=0;  //
计数器清零
  count_99++;
  if(count_99==100)
   count_99=0;
 }
}

/*******************************/
//
延时子函数
//
参数范围 0-65536
void delay(unsigned int d_time)   //
参数 d_time 大小
{            //
决定延时时间长短

 for(; d_time>0; d_time--);
}

 点击看大图


系统分类: 单片机   |   用户分类: 试验板相关   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(855)    回复(0)  

投一票您将和博主都有获奖机会!