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

📄 main._c

📁 meg16 的所有功能实例
💻 _C
字号:
/****************************************Copyright (c)**************************************************
**                               ADEmbed Development Co.,LTD.                                    
**                                 http://www.adembed.com
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2008-12-13
** Last Version:		1.0
** Descriptions:		Nixie Light Test.
** 
**------------------------------------------------------------------------------------------------------
** Created by:			junbolu
** Created date:		2008-12-13
** Version:				1.0
** Descriptions:		
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
**ICC-AVR application builder : 2008-12-13
**Target : M16
**Crystal: 7.3728Mhz
**PA0~PA7口接LED的段码
**PB0~PB3口接LED的位选
**描述:这是一个秒表实验,最大支持99.99秒。由按键K0完成启动计时和停止计时。
**涉及知识点:
**          T/C0的CTC工作模式
**          INT0的下降沿中断工作模式
*******************************************************************************************************/
#include<iom16v.h>
#include<macros.h>

#define		fose	7372800

#define 	START   0
#define 	STOP	1
#define 	CLEAR   3
unsigned char Nixie_State;
unsigned int time_10ms;
unsigned char DISP_NUM;							//显示的位数
unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7};	//三位位选码
unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
unsigned char DISP_DATA[4];		//显示的数字

void Display(void);

void Delay_us(unsigned int time)
{
while(time--);
}

void Delay_ms(unsigned int time)
{
while(time--)
	{
	Delay_us(1000);
	}
}

void INT0_Init()
{
 GIFR |=0X40;              //清楚标志位
 //MCUCR|=0X03; 			   //上升沿触发中断	
 MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断	
 GICR |=0X40;  			   //使能外部中断0
}

#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
 
 if((PIND&0x04)!=0x00)  //读取按键状态
    {
	return;
	}
 if(Nixie_State ==STOP)
 	{
	time_10ms = 0;
	Nixie_State = START;
	}
 else
 	{
	Nixie_State = STOP;
	}
 	
}

//显示函数,DISP_NUM决定显示哪个LED
//采用共阴LED动态显示方法,定时中断函数里面调用
void Display(void)		
{
 PORTA=0x00;					   			//清除显示再位选
 PORTB=BitTab[DISP_NUM];					//PB口接位选
 PORTA=DispTab[DISP_DATA[DISP_NUM]];		//PA口接LED的段码
 
 if(DISP_NUM==1)
    PORTA|=0x80;		//PA口接LED的段码 
 
 DISP_NUM++;			//先显示低位,再显示高位
 if(DISP_NUM==4)
    DISP_NUM=0;
}

#pragma interrupt_handler timer0comp:20
void timer0comp (void)
{
 if(Nixie_State == START)
     {
	 if(time_10ms<9999)
	 	 {
		 time_10ms++;
		 } 
	 }
 
 
 
 DISP_DATA[0]=time_10ms/1000;
 DISP_DATA[1]=(time_10ms/100)-(DISP_DATA[0]*10);
 DISP_DATA[3]=time_10ms%10;
 DISP_DATA[2]=((time_10ms%100)-DISP_DATA[3])/10;
 
 Display();
} 

void main(void)
{
 DDRA=0XFF;
 PORTA=0X00;
 DDRB=0X0F;
 PORTB=0X00;
 
 //按键0端口初始化
 DDRD &=~0x04;	   	//设置PD2为输入   	   						
 PORTD|=0x04;		//设置PD2为上拉
 
 INT0_Init();                 //TART初始化
 
 //t/c0初始化(10ms)
 TCCR0=0X0d;
 TCNT0=0X00;
 OCR0=0X48;
 TIMSK=0X02;
 
 time_10ms=0;
 
 //asm("sei");
 SEI();                       //全局中断使能
 
 Nixie_State = STOP;
 for(;;)
	{ 

	}
   
   
}

⌨️ 快捷键说明

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