日志档案

发表于 2008-3-8 17:28:08

9

标签: 单片机  开发板  入门  程序  

开发板程序之一(定时器试验+数码管显示)

****************************************************************************
*     (C) Copyright 2007,单片机初学者园地
*                          All Rights reserved.
*项目名称:    51单片机学习开发系统
*               
*本文件名称:time.c
* 完成作者 : 单片机初学者 
* 当前版本 : V1.0       
* 完成日期 : 2007年4月1日
* 描    述 : 
*               
此程序实现,定时器中断20次,数码管显示加1
*             在0~9间循环显示

*           我的博客地址:  
*       http://blog.ednchina.com/ahai0306/
*       淘宝网店铺地址:http://shop35284066.taobao.com/

*       我的论坛:http://dianzi.5d6d.com/?fromuser=mcu_51
*       我在此论坛任软件区和硬件区超级版主,希望大家来这里讨论电子、

*       电气控制方面的问题。             
***************************************************************************/

#include  <reg52.h>   //调用头文件(单片机内部的寄存器定义)

/******本段为硬件I/O口定义********/
sbit  KEY0   = P0 ^ 0;  //KEY和发光管复用,请将4个跳线插到KEY端
sbit  KEY1   = P0 ^ 1;
sbit  KEY2   = P0 ^ 2;
sbit  KEY3   = P0 ^ 3;
sbit  DIG0   = P0 ^ 4;  //数码管位0
sbit  DIG1   = P0 ^ 5;  //数码管位1

sbit  BUZZ   = P3 ^ 3;  //蜂鸣器

//数码管显示0~9
code unsigned  char DispBuf[10]= {0x3f,0x06,0x5b,0x4f,0x66,
          0x6d,0x7d,0x07,0x7f,0x6f};

//函数声明
void  disp_selec(unsigned  char bit_selec,unsigned  char  seg);

/**************************************************
** 函数名称: dellay
** 入口参数:h(unsigned int型)
** 出口参数:无
** 功能描述: 短暂延时,使用11.0592晶体,约0.01MS
****************************************************/

void dellay(unsigned int  h)
{
  while(h--);    //0.01MS
}

unsigned  char   time_temp;     //全局变量,定时器加1
unsigned  char   time_num;      //全局变量,显示的数加1


/************主程序**************/
main()

   time_num=0;
   time_temp=0;
   ET0=1;
   TMOD="1";               //16位定时器
   TH0=-50000/256;   //定时器赋值,定时约50毫秒
   TL0=-50000%256;
   TR0=1;
   EA="1";
   dellay(100);
    disp_selec(0,time_num);
   while(1);     //单片机待机
}

/**************************************************
** 函数名称: disp_selec
** 入口参数:bit_selec,seg
** 出口参数:无
** 功能描述: 选择相应数码管,进行显示
****************************************************/

void  disp_selec(unsigned  char bit_selec,unsigned  char  seg)
{
   if(bit_selec==0)   //数码管位选0
 {
   DIG0=0;
   DIG1=1;
  }
 if(bit_selec==1)   //数码管位选1
  {
    DIG0=1;
    DIG1=0;
  }
   P1=DispBuf[seg];

}


void time0_ISR (void) interrupt 1
{
  EA="0";
  time_temp++;
  if(time_temp>20)   //约1S
 {KEY3=!KEY3;
  time_temp=0;
   time_num++;
   if(time_num>9)
   time_num=0;
   disp_selec(0,time_num);  //显示
  }
   TH0=-50000/256; //定时器赋值
   TL0=-50000%256;
  EA="1";
}

系统分类: 单片机   |   用户分类: 单片机程序   |   来源: 原创   |   【推荐给朋友】

    阅读(1179)    回复(4)  

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

  • ahai0306

    2008-3-8 18:00:51

    程序中EA="1"; 应该EA=1,不应该有引号,不知道为什么上去就有了,去也去不掉,大家注意!

  • syf20040100

    2008-3-10 12:06:14

    不错!顶一下

  • huangkaipeng

    2008-3-13 16:42:00

    都有注释,不错啊

  • 电子实验室

    2008-3-13 20:24:29

    电子制作,电子应用,电路图,电路元器件,电路基础,单片机,嵌入式教程