📄 setsoft.c
字号:
//soft of IOST(instrument for setting temperature)
// Target : ATMEGA128L
// Crystal: 4Mhz
// Programmer: yu xiaolong
// DATE: 2006.11.30
// WRE: temperation sensor receive PC6
// WSE: temperation sensor send PC7
// AD0-AD7: 1520 DAT PA0-PA7
// A0: 1520 A0 PC2
// R/W: 1520 R/W PC3
// E1: 1520 E1 PC4
// E2: 1520 E2 PC5
// PB0: SETTING-KEY PB5
// PB1: INCREASE-KEY PB4
// PB2: REDUCE-KEY PB3
// PB3: OK-KEY AND POWER-KEY PB2
// PD: CONTRAST - PE4
// PU: CONTRAST + PE3
// PLED: BACKLIGHTCON PE2
// ED: COULOMETER DETECT PF0/ADC0
// GP1: PICRE INT0/PD0
// GP2: PICSE INT1/PD1
#include <iom128v.h>
#include <macros.h>
#include <math.h>
#include <eeprom.h>
#include <sub.h>
//#include <sub2.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
//
/*
*/
/* fuction declare */
/* .................................................... */
#pragma data:data
//#pragma abs_address:0xf000
//#pragma end_abs_address
//const unsigned char boot1[];
const uchar xyz[10];
const unsigned char *menkan[]={men,kan,wen,du,maohao};
const unsigned char *shinei[]={shi2,nei,wen,du,maohao};
const unsigned char *bootp[]={boot1,boot2,boot3,boot4,boot5,boot6,boot7,boot8,
boot9,boot10,boot11,boot12,boot13,boot14,boot15,boot16};
const unsigned char *figure[]={zero,one,two,three,four,five,seven,eight,nine,fu};
const unsigned char *fig[]={fig0,fig1,fig2,fig3,fig4,fig5,fig6,fig7,fig8,fig9,
figfu,dangwei,vol,dot};
const unsigned char *shasha[]={jiang,sha,sha,shi,tou,zhu,gantan,zhu};
const unsigned char *cuowu[]={chuan,gan,qi,cuo,wu,gantan,kong};
const unsigned char *wdzhi[]={tang,tou,wen,du,maohao};
const unsigned char *keyshow[]={she,ding,jia,jian,que,ding};
const unsigned char *xiemk[]={zheng,zai,xie,men,kan,zhi,shenlue,shenlue};
const unsigned char *dumk[]={zheng,zai,du1,chu,men,kan,zhi,shenlue};
const unsigned char *start0[]={qing,lian,jie,tang,tou,shenlue,shenlue,shenlue};
const unsigned char *start1[]={an,shanyin,she,ding,xiayin,kai,shi1};
const unsigned char *off[]={zheng,zai,guan,ji,shenlue,shenlue};
const unsigned char *voldat[]={dian,chi,dian,ya,maohao};
const unsigned char *success[]={she,ding,cheng,gong,gantan};
const unsigned char *fail[]={she,ding,shi,bai,gantan};
const unsigned char *fanhui[]={qing,an,ren,yi,jian1,fan,hui,gantan};
//////////////////////////////////////
void wr_ins1(uchar value);
void wr_ins2(uchar value);
void wr_data1(uchar value);
void wr_data2(uchar value);
void lcd_ini(void);
void draw_clr(void);
void draw_clr0(void);
void draw_clr1(void);
void back_off(void);
void back_on(void);
void con_up(void);
void con_down(void);
void delay(unsigned int n);
uchar reset(void);
uchar rd_byte(void);
void wr_byte(uchar value);
uchar crc_ck(uchar *crcp,uchar len);
//////////////////////////////////////
/* .................................................... */
const uchar *p;
const uchar *p1;
uchar keydata,keybak,crc,dzwd,neg,led3flg,leddat=0,ledcnt,keyflg;
uchar errflg,errcnt,xsdat,errdat; //define variable
uchar keyval,backflg=1,backcnt=0;//r,j,k,keyshe,savcnt,xscnt;
uchar fjflg,qjflg=0,adrel,adrelold=0;
uint fjcnt;
int wdbak,wdint;
uint etime_on[4]={0x010,0x011,0x012,0x013};
uint ebak_on[4]={0x030,0x031,0x032,0x033};
uint etime_jon[4]={0x020,0x021,0x022,0x023};
uint ebak_jon[4]={0x040,0x041,0x042,0x043};
uint eoncrc=0x14,ejoncrc=0x24;
uchar ds_char[9]; //define 9 byte sensor'epprom data array
uchar rom_code[8]; //define 8 byte sensor'id array
float voltage;
float onbak,onbak1,onbak2;
union
{
uchar on_byte[4];
uchar on_flo;
}time_on,time_jon;
union
{
uchar pb[2];
int pI;
} wd1820;
//TIMER0 initialisation - prescale:1024
// WGM: Normal
// desired value: 50mSec
// actual value: 49.920mSec (0.2%)
void timer0_init(void)
{
TCCR0 = 0x00; //stop
ASSR = 0x00; //set async mode
TCNT0 = 0x3D; //set count
OCR0 = 0xC3;
TCCR0 = 0x07; //start timer
}
//ADC initialisation
// Conversion time: 208uS
void adc_init(void)
{
ADCSRA = 0x00; //disable adc
ADMUX = 0b01100000; //REFS1,REFS2,ADLAR,MUX4..0 select adc input 0
ACSR = 0x80; //close compare
ADCSRA = 0b11001111;
}
//void send_comdat(uchar u,uchar v);
//#pragma data:eeprom
//uchar etime_on[4],etime_jon[4];
/****************sub fuction**********************/
void port_init(void)
{
PORTA = 0xFF; // pa.0-pa.7 1520 dat
DDRA = 0xFF; // all o
PORTB = 0xFF; // pb.2 OK-KEY AND POWER-KEY pb.4 - pb.3 + pb.5 setting
DDRB = 0b00000000; //
PORTC = 0xFF; // pc.2 a0 pc3 r/w pc4 e1 pc5 e2 pc6 wre pc7 wse
DDRC = 0b10111100;
PORTD = 0xFF; // pd.1 gp2
DDRD = 0b00000010; //
PORTE = 0b11111111; // pe.4 pd pe.3 pu pe.2 pled
DDRE = 0b00011100; //
PORTF = 0xFF;
DDRF = 0x00;
PORTG = 0x1F; //
DDRG = 0x00;
}
//Watchdog initialisation
// prescale: 2048K cycles
/*void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x0f; //WATCHDOG ENABLED - dont forget to issue WDRs
}
*/
//////////////////////////////////////
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
XDIV = 0x00; //xtal divider
XMCRA = 0x00; //external memory
port_init();
//watchdog_init();
timer0_init();
adc_init();
MCUCR = 0x00;
EICRA = 0x00; //extended ext ints INT0 HIGH LEVEL INTRUPUT
EICRB = 0x00; //extended ext ints
EIMSK = 0x00;//1;
TIMSK = 0x01; //timer interrupt sources
ETIMSK = 0x00; //extended timer interrupt sources
SEI(); //re-enable interrupts
//all peripherals are now initialised
}
void draw_boot()
{
uchar i,j,page,seg;
//uchar *p;
for(j=0;j<11;j++)
{
p=bootp[j];
page=0xb8;
for(i=0;i<4;i++)
{
for(seg=0;seg<61;seg++)
{
wr_ins1(page);
wr_ins1(seg);
wr_data1(*p);
p++;
}
for(seg=0;seg<61;seg++)
{
wr_ins2(page);
wr_ins2(seg);
wr_data2(*p);
p++;
}
page++;
}
delay(100);
}
delay(1000);
for(j=11;j<16;j++)
{
p=bootp[j];
page=0xb8;
for(i=0;i<4;i++)
{
for(seg=0;seg<61;seg++)
{
wr_ins1(page);
wr_ins1(seg);
wr_data1(*p);
p++;
}
for(seg=0;seg<61;seg++)
{
wr_ins2(page);
wr_ins2(seg);
wr_data2(*p);
p++;
}
page++;
}
delay(100);
}
draw_clr();
}
void draw_end()
{
uchar i,j,page,seg;
//uchar *p;
p=bootp[10];
page=0xb8;
for(i=0;i<4;i++)
{
for(seg=0;seg<61;seg++)
{
wr_ins1(page);
wr_ins1(seg);
wr_data1(*p);
p++;
}
for(seg=0;seg<61;seg++)
{
wr_ins2(page);
wr_ins2(seg);
wr_data2(*p);
p++;
}
page++;
}
delay(1000);
for(j=10;j>0;j--)
{
p=bootp[j-1];
page=0xb8;
for(i=0;i<4;i++)
{
for(seg=0;seg<61;seg++)
{
wr_ins1(page);
wr_ins1(seg);
wr_data1(*p);
p++;
}
for(seg=0;seg<61;seg++)
{
wr_ins2(page);
wr_ins2(seg);
wr_data2(*p);
p++;
}
page++;
}
delay(100);
}
draw_clr();
}
void draw_16x16(uchar sta,uchar x,uchar cnt ,const uchar *str[],uchar row )
{
uchar i,j,page,seg;
//uchar *p1;
uint t=0;
seg=0;
for(j=sta;j<sta+cnt;j++)
{ p1=str[x];
page=0xb8+2*row;
for(i=0;i<2;i++)
{ t=j*16;
for(seg=t;seg<(t+16);seg++)
{
if(seg>60)
{
wr_ins2(page);
wr_ins2(seg-61);
wr_data2(*p1);
}
else
{
wr_ins1(page);
wr_ins1(seg);
wr_data1(*p1);
}
p1++;
}
page++;
}
x++;
}
}
void draw_8x16(uchar sta,uchar x,uchar cnt ,const uchar *str[],uchar row )
{
uchar i,j,page,seg;
uint t=0;
//uchar *p1;
seg=0;
for(j=sta;j<sta+cnt;j++)
{ p1=str[x];
page=0xb8+2*row;
for(i=0;i<2;i++)
{ t=j*8;
for(seg=t;seg<(t+8);seg++)
{
if(seg>60)
{
wr_ins2(page);
wr_ins2(seg-61);
wr_data2(*p1);
}
else
{
wr_ins1(page);
wr_ins1(seg);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -