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

📄 avr_xqv12.h

📁 ATmega16-TLC5615
💻 H
📖 第 1 页 / 共 2 页
字号:

#define		TRUE			0xff					//真
#define		FALSE			0x00					//假
#define		null			0x00					//空
#define 	Open_LED		PORTA|=0x10				//使能LED
#define 	Close_LED		PORTA&=~0x10			//关闭LED
#define		LED				PORTB					//LED端口
#define		SMG				PORTB					//数码管端口
#define 	Open_SMG_DATA	PORTA|=0x08				//使能数码管数据
#define 	Close_SMG_DATA	PORTA&=~0x08			//关闭数码管数据
#define 	Open_SMG_BIT	PORTA|=0x04				//使能数码管位选择
#define 	Close_SMG_BIT	PORTA&=~0x04			//关闭数码管位选择
#define		KEY0			(PIND&0x04)				//INT0
#define		KEY1			(PIND&0x08)				//INT1
#define 	SetSclk			(PORTC|=0x80)			//LCD12864 CLK
#define 	ClrSclk			(PORTC&=~0x80)
#define 	SetRs			(PORTD|=0x40) 			//LCD12864 CS
#define 	ClrRs			(PORTD&=~0x40)
#define 	SetSid			(PORTC|=0x40) 			//LCD12864 DATA
#define 	ClrSid			(PORTC&=~0x40)
#define 	D0 				0x20		  			//18B20 DATA
#define 	port 			PORTA
#define 	ddrt 			DDRA
#define 	pin 			PINA
#define 	Set_CS5615 		(PORTA|=0x80)			//片选5615
#define 	Clr_CS5615 		(PORTA&=~0x80)			//释放
#define 	Period 			0x6bfe					//PWM脉冲周期20ms
#define 	rd_device_add 	0xa3					//定义器件读地址
#define 	wr_device_add 	0xa2					//定义器件写地址
#define 	START 		   	0x08					//起始信号
#define 	MT_SLA_ACK 	   	0x18
#define 	MT_DATA_ACK    	0x28
#define 	RE_START 	   	0x10
#define 	MR_SLA_ACK 	   	0x40
#define 	MR_DATA_NOACK  	0x58
#define 	START 			0x08
#define 	MT_SLA_ACK 		0x18
#define 	MT_DATA_ACK 	0x28
#define 	RE_START 		0x10
#define 	MR_SLA_ACK 		0x40
#define 	MR_DATA_NOACK 	0x58
#define 	MR_DATA_ACK 	0x50

#if AD==TRUE					//条件编译指令
unsigned char Adc_Mux=0;
unsigned int Adc0_Rel=0;
unsigned int Adc1_Rel=0;
unsigned int Adc0_Catch=0;
unsigned int Adc1_Catch=0;
unsigned int Adc0_Conver[20];
unsigned int Adc1_Conver[20];
unsigned char Adc0_F;
unsigned char Adc1_F;
#endif	 	  		 		 	//条件编译结束
unsigned char Key_Number;			   	   	//全局变量:按键标志
unsigned int temprter;
#pragma data:code 
const unsigned char SMG_Conver[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
		                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};
				   							//数码管译码数组
#pragma data:data
/*******************************************************/
/******   函数名称: Scan_Key()                    ******/
/******   功    能: 键盘扫描                      ******/
/******   参    数: 无                            ******/
/******   返回值  : 按键的键值,无按键时返回null  ******/
/*******************************************************/
unsigned char Scan_Key(void)
{
 	unsigned char i;
	PORTC=0x00;
	DDRC =0xf0;	  						//设置端口高4位输出,低四位输入
	PORTC=0x0f;							//低四位内部上拉
	delay_nus(1);						//短暂延时
	i=PINC&0x0f;						//读取端口电平
	if(i!=0x0f)							//判断是否有键按下
	{
	 	PORTC=0x00;
		DDRC =0x0f;						//设置端口低4位输出,高四位输入
		PORTC=0xf0;						//高四位内部上拉
		delay_nus(10);					//短暂延时,去抖
		if((PINC&0xf0)!=0xf0)			//再次判断是否有键按下
		{
		 	i+=(PINC&0xf0);				//读取端口电平
			while((PINC&0xf0)!=0xf0);	//等待按键释放
			return i;					//返回键值
		}
	}
	return null;   						//无按键按下返回null
}

/*******************************************************/
/******   函数名称: Key_Num()                     ******/
/******   功    能: 转换键值为0-f十六进制数       ******/
/******   参    数: key--键值                     ******/
/******   返回值  : 0-f                           ******/
/*******************************************************/
unsigned char Key_Num(unsigned char key)
{
 	switch(key)
	{
	 	case 0xe7:return 0;	   			//按键0
		case 0xd7:return 1;				//按键1
		case 0xb7:return 2;				//按键2
		case 0x77:return 3;				//按键3
		case 0xeb:return 4;				//按键4
		case 0xdb:return 5;				//按键5
		case 0xbb:return 6;				//按键6
		case 0x7b:return 7;				//按键7
		case 0xed:return 8;				//按键8
		case 0xdd:return 9;				//按键9
		case 0xbd:return 10;			//按键A
		case 0x7d:return 11;			//按键B
		case 0xee:return 12;			//按键C
		case 0xde:return 13;			//按键D
		case 0xbe:return 14;			//按键E
		case 0x7e:return 15;			//按键F
		default: return 16;				//无按键按下
	}
}		
/*******************************************************/
/******   函数名称: Display_One_SMG()             ******/
/******   功    能: 显示指定内容在指定位          ******/
/******   参    数: bit--位(1-8),              ******/
/******             data--显示内容(0-15,16为全灭)****/
/******   返回值  : 无                            ******/
/*******************************************************/
void Display_One_SMG(unsigned char bit,unsigned char data)
{
	SMG=SMG_Conver[data];	  	   		//送显示数据
	Open_SMG_DATA;						//锁存数据
	Close_SMG_DATA;					
	SMG=~BIT(bit);						//送位数据
	Open_SMG_BIT;						//锁存数据
	Close_SMG_BIT;
	delay_nms(2);
}
/*******************************************************/
/******   函数名称: Display_One_SMG_Point()       ******/
/******   功    能: 显示小数点在指定位            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void Display_One_SMG_Point(unsigned char bit)
{
	SMG=0x80;	  	   		  	   	   	//送显示数据
	Open_SMG_DATA;						//锁存数据
	Close_SMG_DATA;					
	SMG=~BIT(bit);						//送位数据
	Open_SMG_BIT;						//锁存数据
	Close_SMG_BIT;
	delay_nms(2);
}
/*******************************************************/
/******   函数名称: En_Led()                      ******/
/******   功    能: 使能LED功能                   ******/
/******   参    数: 无                            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void En_Led(void)
{
 	DDRB=0xff;	 				//设置输出
	PORTB=0xff;					//输出高电平
	Open_LED;					//打开LED功能
}
/*******************************************************/
/******   函数名称: Un_Led()                      ******/
/******   功    能: 关闭LED功能                   ******/
/******   参    数: 无                            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void Un_Led(void)
{
 	DDRB=0xff;	 				//设置输出
	PORTB=0xff;					//输出高电平
	Open_LED;					//打开LED功能
	Close_LED;					//关闭LED功能
}
/*******************************************************/
/******   函数名称: Clear_SMG()                   ******/
/******   功    能: 关闭数码管功能                ******/
/******   参    数: 无                            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void Clear_SMG(void)
{
 	DDRB=0xff;	 				//设置输出
	PORTB=0x00;					//输出高电平
	Open_SMG_DATA;				//锁存数据
	Close_SMG_DATA;
	Open_SMG_BIT;
	Close_SMG_BIT;
}
/*******************************************************/
/******   函数名称: Spi_Init()                    ******/
/******   功    能: 初始化SPI接口                 ******/
/******   参    数: 无                            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void Spi_Init(void)
{
 	unsigned char i;
	DDRB|=0xb0;	  	   			//MISO输入MOSI,SCK,SS输出
	DDRB&=~0x40;				
	PORTB|=0x40;				//MISO上拉有效
	SPSR=0x01;					//SPI允许,主机模式,高位在先,极性00,1/2系统时钟速率
	SPCR=0x50;
	i=SPSR;
	i=SPDR;						//清空SPI,和中断标志,使SPI空闲
}
/*******************************************************/
/******   函数名称: PutSPIchar()                  ******/
/******   功    能: 用SPI发送数据                 ******/
/******   参    数: data--待发的数据              ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void PutSPIchar(char data)
{
 	SPDR=data;
	while(!(SPSR&(1<<SPIF)));	//等待发送完毕
}
/*******************************************************/
/******   函数名称: CPU_Init()                    ******/
/******   功    能: 初始化CPU端口                 ******/
/******   参    数: 无                            ******/
/******   返回值  : 无                            ******/
/*******************************************************/
void CPU_Init(void)
{
 	PORTB=0xff;
	DDRB=0xff;
	PORTA=0x80;				 		
	DDRA=0xdc;
	DDRB=0x00;
	PORTC=0xff;

⌨️ 快捷键说明

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