日志档案

发表于 2008-3-8 17:15:16

7

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

开发板程序之一(中断试验+数码管显示)

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

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

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

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

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

/******本段为硬件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   int_temp;     //全局变量,按一次键加1
/************主程序**************/
main()
{ int_temp=0; //初始化
   IT0=1;     //外部中断0下降沿触发
   EX0=1;   //开外部中断0
   EA="1";   //开所有中断
  disp_selec(0,int_temp);  //显示初始状态
 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 int0_ISR (void) interrupt 0
{
  EA="0";
   dellay(300);   //软件去抖
  int_temp++;
  if(int_temp>9)
  int_temp=0;
  disp_selec(0,int_temp);  //显示
  EA="1";
}

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

    阅读(397)    回复(0)  

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