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

📄 setsoft.c

📁 atmega128 读取18b20并液晶显示
💻 C
📖 第 1 页 / 共 2 页
字号:
//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 + -