标签:
单片机 入门 开发板 程序
/****************************************************************************
* (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";
}
系统分类:
单片机 | 用户分类:
单片机程序 | 来源:
原创 | 【推荐给朋友】