📄 12864h.txt
字号:
dat=t5x8[(da-0x20)*5+i];
disp(col_x+i,dat,3);
}
}
else
{
for(i=0;i<5;i++)
{
ctrl(yy,0); //set page address
ctrl(yy,1); //set page address
temp=t5x8[(da-0x20)*5+i];
dat=temp<<a;
disp(col_x+i,dat,3);
ctrl(yy+1,0); //set page address
ctrl(yy+1,1); //set page address
dat=temp>>(8-a);
disp(col_x+i,dat,3);
}
}
} */
//========================================
//
//=======================================
void scroll_up()
{
}
//====================================
//
//====================================
void write_text(uchar dat)
{
uchar temp,temp1;
temp=column*6;
temp1=row*8;
// wtext8x8(temp,temp1,dat,3);
}
//===============================================
//==== move cursor one character left ==========
//===============================================
void cursor_left()
{
if(column==0)
{
if(row!=0)
{ row--,column=21 ;}
}
else
{column--;}
wtext8x8(cursor,1);// write_text(cursor);
}
//===============================================
//==== move cursor one character right ==========
//===============================================
void cursor_right()
{
column++;
if(column>20) //判列是否超出范围
{
row++;
column=0;
if(row>7) //判行是否超出范围
{
if(autoscroll==1) //超出范围,判是否卷动显示
{
scroll_up(); //卷动显示
column=0,row=7; // display_line-1
}
else {row=0;} //行返回第一行
}
}
wtext8x8(cursor,1);//write_text(cursor);
}
//=============================================
void EEPROM_write(uint addr, uchar dat)
{
while(EECR & (1<<EEWE)); // 等待上一次写操作结束
EEAR = addr; // 设置地址和数据寄存器
EEDR = dat;
EECR |= (1<<EEMWE); // 置位EEMWE //
EECR |= (1<<EEWE); // 置位EEWE 以启动写操作
}
//=====================================
uchar EEPROM_read(uint addr)
{
while(EECR & (1<<EEWE)); // 等待上一次写操作结束
EEAR = addr; // 设置地址寄存器
EECR |= (1<<EERE); // 设置EERE 以启动读操作
return EEDR; // 自数据寄存器返回数据
}
//==============================
void mcu_init()
{
PORTA=0xff;
DDRA=0xff;
pdout=0xff;
DDRB=0xff;
pdout=0xff;
DDRB=0xff;
pcont=0xff;
DDRC=0xff;
pcont1=0xff;
DDRD=0xff;
}
//==================================
//SPI初始化
//===============================
/*
DDRB=0x2C; //PB口初始化
SPCR=0x53; //SPI初始化,主机模式,时钟7.8.3K,时钟相位0度,极性Low,数据方向MSB
while (1) //循环函数
{
data=170;
spi (data);//从spi口输出数据函数
DDRC=255;
PORTC=255;
PORTC=0;
};
*/
//===================================
//采用timer2 产生波形
// PWM频率 = 系统时钟频率/(分频系数*2*计数器上限值))
//===================================
void timer2_init()
{
TCCR2 = 0x00; //stop
TCNT2= 0x01; //set count
OCR2 = pwmbuf; //set compare
TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|0x01; // start timer 快速pwm模式,匹配清零,溢出置位 8分频
//占空比=高:低为OCR2-0X01)/(0XFF-OCR2) OX01++++++(OCR2)__________OXFF (+表示输出高,_表示输出低)
//即OCR2越大,输出越大
}
//========================================
//电压检测初始化
//===========================================
void Init_ADC(void)
{
ADMUX=0x47; //参考电压为 AVCC,转换结果左对齐 选择第七通道ADC7;
ADCSRA=0xe6; //125K转换速率,自由转换模式;启动AD转换器;
}
//=====================================
//A/D转换采样电压值
//===================================
//参数说明:
//Channel:0 A点电压采样;1:B点电压采样;2:A、B电压差值
//返回值:电压采样值或者A、B点采样差值
uint ADC_Convert(void)
{
uint temp1,temp2;
delay(4);
temp1=(uint)ADCL;
temp2=(uint)ADCH;
temp2=(temp2<<8)+temp1;
return(temp2);
}
/*
uint temp1,temp2;
delay(4);
temp1=(uint)ADCL;
temp2=(uint)ADCH;
temp2=(temp2<<8)+temp1;
return(temp2);
*/
//====================================
//分解2位16进制数据
//=======================================
void read16db(uint da)
{
// uchar i,ii;
// datbuf1=strcmp_P leddat[(uchar)(da&0x000f)];
datbuf4=pgm_read_byte(&leddat[(uchar)(da&0x000f)]);
da=da>>4;
datbuf3=pgm_read_byte(&leddat[(uchar)(da&0x000f)]);
da=da>>4;
datbuf2=pgm_read_byte(&leddat[(uchar)(da&0x000f)]);
da=da>>4;
datbuf1=pgm_read_byte(&leddat[(uchar)(da&0x000f)]);
/* for (i=0;i<4;i++)
{
ii=3-i;
datbuf[ii]=leddat[(uchar)(da&0x000f)];
da=da>>4;
} */
}
//======================================
//
//=======================================
void display_16()
{
// uchar i;
wtext8x8(datbuf1,3);
cursor_right();
wtext8x8(datbuf2,3);
cursor_right();
wtext8x8(datbuf3,3);
cursor_right();
wtext8x8(datbuf4,3);
cursor_right();
/*
for (i=0;i<4;i++)
{
wtext8x8(datbuf[i],3);//write_text(datbuf[i]);
cursor_right();
}*/
}
//=============================================
// 检测电压即获得ADC转换值 转换通道ADC7
//=============================================
uint work_adc7(void)
{
uchar i;
uint ret;
uchar max_id,min_id,max_value,min_value;
//ADMUX=0x47; //内部AVCC参考电压,通道7
ADMUX=0x43;
ADCSRA=_BV(ADEN); //使能ADC,单次转换模式
for(i=0;i<8;i++) //连续转换8 次
{
ADCSRA|=_BV(ADSC);
_delay_loop_1(60);
while(ADCSRA&_BV(ADSC))
_delay_loop_1(60);
ret=ADCL;
ret|=(uint)(ADCH<<8);
g_aAdValue[i]=ret;
}
ret=0;
for(i=1;i<8;i++)
ret+=g_aAdValue[i];
//找到最大和最小值索引
ret/=7;
max_id=min_id=1;
max_value=min_value=0;
for(i=1;i<8;i++)
{
if(g_aAdValue[i]>ret)
{
if(g_aAdValue[i]-ret>max_value)
{
max_value=g_aAdValue[i]-ret;
max_id=i;
}
}
else
{
if(ret-g_aAdValue[i]>min_value)
{
min_value=ret-g_aAdValue[i];
min_id=i;
}
}
}
//去掉第一个和最大最小值后的平均值
ret=0;
for(i=1;i<8;i++)
{
if((i!=min_id)&&(i!=max_id))
ret+=g_aAdValue[i];
}
if(min_id!=max_id){ret/=5;}
else {ret/=6;}
ADCSRA=0;//关闭ADC
return ret;
}
//==========================
int main()
{
uchar i;
uchar led=0;
uint temp,temp1;
delay(1);
column=0,row=0;
mcu_init();
pwmbuf=0x62;
timer2_init(); //驱动LCD对比度
lcd_init();
for(;;)
{
for(i=0;i<8;i++)
{
PORTA=0xf0; //11110000 PA4=1,PA1=0
DDRA=0xf0; //
delay(255);
column=0,row=i;
temp=work_adc7();
read16db(temp);
display_16();
PORTA=0xff; //常温
DDRA=0xff;
delay(255);
PORTA=0xE2; //11100010 PA4=0,PA1=1
DDRA=0xE2;
temp1=work_adc7();
read16db(temp1);
column=8,row=i;
display_16();
PORTA=0xff; //NTC
DDRA=0xff;
delay(255);
column=14,row=i;
if(temp<temp1){temp=(temp1-temp);}
else
{
wtext8x8(0x2d,3);
cursor_right();
temp=(temp-temp1);
}
read16db(temp);
display_16();
}
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
delay(255);
}
delay(255);
delay(255);
delay(255);
delay(255);
}
/*
PORTA=0xE2; //11100010 PA4=0,PA1=1
DDRA=0xE2;
example=work_adc7();
read16db(example);
column=8,row=0;
display_16();
PORTA=0xff; //11110000 PA4=1,PA1=0
DDRA=0xff;
delay(255);
PORTA=0xf0; //11110000 PA4=1,PA1=0
DDRA=0xf0;
delay(255);
column=0,row=0;
example=work_adc7();
read16db(example);
display_16();
PORTA=0xff; //11110000 PA4=1,PA1=0
DDRA=0xff;
delay(255);
// Init_ADC(); //ADC初始化
column=0,row=1;
delay(255);
for(i=0;i<35;i++)
{
wtext8x8(i+0x21,3);
cursor_right();
delay(255);
}
cursor_right();
//Voltage_A=ADC_Convert(0); //采样A点电压
// Voltage_B=ADC_Convert(1); //采样B点电压
// Voltage_Diff=ADC_Convert(2); //计算AB点电压采样差值
pwmbuf=0x45;
for(i=0;i<8;i++)
{
pwmbuf=pwmbuf+4; //加16,电压升0.31V
timer2_init();
delay(255);
delay(255);
}
DDRB=0xff;
while (1)
{
if(led)
{
//pcont=(1<<cs1);
PORTB|=0X01;
}
else
PORTB&=0XFE;
led=!led;
//延时
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -