📄 avr_xqv12.h
字号:
#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 + -