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

📄 新建 文本文档.txt

📁 MEGA16多功能工业控制板(实现IO,DA,RS232,LCD,PWM功能)附送电路图&范例程序
💻 TXT
字号:
#include<ioM16V.h> 
#include <macros.h> 
#include <stdlib.h> 
#include   "eeprom.h"  
#define CON_P    PORTC  
#define RS_BIT    BIT(5)  
#define RW_BIT    BIT(7) 
#define E_BIT    BIT(6) 

#define RS_H       CON_P &=~ RS_BIT  
#define RS_L        CON_P |= RS_BIT   
#define RW_H      CON_P &= ~RW_BIT 
#define RW_L       CON_P |= RW_BIT    
#define E_H         CON_P &= ~E_BIT  
#define E_L         CON_P |= E_BIT 


#define outport PORTB 
#define y0_bit BIT(0) 
#define y1_bit BIT(1) 
#define y2_bit BIT(2) 
#define y3_bit BIT(3) 
#define y4_bit BIT(4) 
#define y0_on outport |=y0_bit 
#define y0_off outport &=~y0_bit 

#define y1_on outport |=y1_bit 
#define y1_off outport &=~y1_bit 

#define y2_on outport |=y2_bit 
#define y2_off outport &=~y2_bit 

#define y3_on outport |=y3_bit 
#define y3_off outport &=~y3_bit 

#define y4_on outport |=y4_bit 
#define y4_off outport &=~y4_bit 

unsigned char x0=0; 
unsigned char x1=0; 
unsigned char x2=0; 
unsigned char x3=0; 
unsigned char x4=0; 
unsigned char x5=0; 
unsigned char x6=0; 
signed int maneu; 
signed int delay1; 
signed int delay2; 
signed int delay3; 
unsigned char aa[3]; 
unsigned char aa2[3]; 
unsigned char aa3[3]; 
unsigned long cnt; 

void delay_us(unsigned int n)  
{  
   unsigned int i;  
   for(i=0;i<n;i++)  
   {  
      ;  
   }  
   return;  
}  

void delay_1ms(void)  
{  
   unsigned int i;        
   for(i=0;i<141;i++)//(XTAL 8M*143-2)  
   {  
      ;  
   }  
}  

void delay_ms(unsigned int n)  
{  
   unsigned int i;  
   for(i=0;i<n;i++)  
   {  
      delay_1ms();  
   }  
} 

char Lcd_Busy()  
{  
      char r;  
      DDRA = 0x00;       
      E_L;RS_L;RW_H;        
      delay_us(20);        
      E_H;  
      delay_us(20);         
      r = PINA & 0x80;     
      E_L;  
      DDRA=0xFF;        
      return r;           
}  

void Lcd_Command(unsigned char Command)  
{  
      while(Lcd_Busy());  
      E_L;RS_L;RW_L;        
      delay_us(20);        
      E_H;  
      PORTA = Command;    
      delay_us(20);          
      E_L;  
}  

void Lcd_Write(unsigned char Data)  
{  
      while(Lcd_Busy());  
      E_L;RS_H;RW_L;        
      delay_us(20);     
      E_H;  
      PORTA = Data;       
      delay_us(20);        
      E_L;  
}  

void Lcd_Init()  
{  
      DDRA = 0xFF;       
      DDRC = 0xFF;         
      Lcd_Command(0x38);  
      Lcd_Command(0x08);  
      Lcd_Command(0x01);  
      Lcd_Command(0x06);  
      Lcd_Command(0x0c);  
}  
   
void inputio(void) 
   {  
   DDRD=DDRD&0x3F; 
   DDRC=DDRC&0xE0; 
   PORTD=0xC0; 
   PORTC=0x1F; 
  if(PINC&0x10) 
    x0=0; 
   else 
   x0=1; 
    
  if(PINC&0x08) 
   x1=0; 
   else 
   x1=1; 
    
  if(PINC&0x04) 
   x2=0; 
   else 
   x2=1; 
    
  if(PINC&0x02) 
   x3=0; 
   else 
   x3=1; 
    
  if(PINC&0x01) 
   x4=0; 
   else 
   x4=1;  
    
   if(PIND&0x80) 
    x5=0; 
        else 
        x5=1; 
         
        if(PIND&0x40) 
         x6=0; 
         else 
         x6=1;    
        }   

void lcddis() 
{ 
                 Lcd_Command(0x81);                    
         asc_tran("[Down delay ]=   ms");       
         Lcd_Command(0xc1);                
         asc_tran("[Resign Time]=   ms");                       
         Lcd_Command(0x95);                
         asc_tran("[Finishdelay]=   ms");         
                 Lcd_Command(0xd5);                
         asc_tran("PRODUCTS=");    
} 

void asc_tran(unsigned char *asc)  
{  
      while((*asc) != 0)     
      {  
          Lcd_Write(*asc);  
          asc++;            
      }  
}  

void timer_change() 
{ 
 if(x3==1) 
 { 
  if(maneu<4) 
  { 
  maneu++; 
  delay_ms(300); 
  } 
  if(maneu==4) 
  {maneu=1;} 
 } 
  
 if(maneu==1) 
  { 
   Lcd_Command(0x80);                    
   asc_tran(">"); 
   Lcd_Command(0xc0);                    
   asc_tran(" "); 
   Lcd_Command(0x94);                    
   asc_tran(" ");  
      if(x4) 
       { 
              if(delay1>500) 
          {delay1=498;} 
             delay1=delay1+2; 
                    itoa(aa,delay1,10);   
             Lcd_Command(0x8f); 
             asc_tran("   ");    
             Lcd_Command(0x8f);                  
         asc_tran(aa); 
                 delay_ms(100); 
            } 
      if(x5) 
      { 
        if(delay1<0) 
        {delay1=2;} 
           delay1=delay1-2; 
           itoa(aa,delay1,10);   
           Lcd_Command(0x8f);  
           asc_tran("   ");  
           Lcd_Command(0x8f);           
       asc_tran(aa); 
           delay_ms(100); 
           } 
             //EEPROM_WRITE(0x3000,delay1); 
        delay_ms(10); 
       
 } 
          
 if(maneu==2) 
  { 
   Lcd_Command(0x80);                    
   asc_tran(" "); 
   Lcd_Command(0xc0);                    
   asc_tran(">"); 
   Lcd_Command(0x94);                    
   asc_tran(" "); 
   if(x4) 
    { 
            if(delay2>500) 
        {delay2=498;} 
            delay2=delay2+2; 
                   itoa(aa2,delay2,10);   
            Lcd_Command(0xcf);  
            asc_tran("   "); 
                Lcd_Command(0xcf);                    
        asc_tran(aa2); 
            delay_ms(100); 
     } 
    if(x5) 
    { 
        if(delay2<0) 
        {delay2=2;} 
            delay2=delay2-2; 
                    itoa(aa2,delay2,10);   
             Lcd_Command(0xcf);             
                 asc_tran("   "); 
             Lcd_Command(0xcf);         
         asc_tran(aa2);  
                 delay_ms(100); 
     }          
            //EEPROM_WRITE(0x3010,delay2); 
        delay_ms(10);   
 }          
          
  if(maneu==3) 
  { 
    Lcd_Command(0x80);                    
   asc_tran(" "); 
   Lcd_Command(0xc0);                    
   asc_tran(" "); 
   Lcd_Command(0x94);                    
   asc_tran(">"); 
   if(x4) 
    { 
        if(delay3>500) 
        {delay3=498;} 
             delay3=delay3+2; 
                    itoa(aa3,delay3,10);   
                 Lcd_Command(0xa3); 
             asc_tran("   ");   
             Lcd_Command(0xa3);                    
         asc_tran(aa3); 
                 delay_ms(100); 
           } 
     
    if(x5) 
    { 
        if(delay3<0) 
        {delay3=2;} 
             delay3=delay3-2; 
                    itoa(aa3,delay3,10); 
                 Lcd_Command(0xa3); 
             asc_tran("   ");   
             Lcd_Command(0xa3);                    
         asc_tran(aa3); 
                 delay_ms(100); 
           } 
        //EEPROM_WRITE(0x3020,delay3); 
        //delay_ms(10); 
   } 
} 

void main()  
{  
unsigned int start,ready,temp; 
unsigned long cnt; 
unsigned char ad1,ad2,ad3,t,enable; 
delay_ms(1); 
DDRB=DDRB|0x1f; 
PORTB=PORTB&0xe0; 
y2_on; 
y3_on; 
y4_on; 
 maneu=0; 
 ad1=0x3000; 
 ad2=0x3010; 
 ad3=0x3020; 
 delay_ms(100); 
 Lcd_Init(); 
 lcddis(); 
 CLI(); 
 EEPROM_READ(ad3,delay3); 
 delay_ms(100); 
 EEPROM_READ(ad2,delay2); 
 delay_ms(100); 
 EEPROM_READ(ad1,delay1); 
 delay_ms(100); 

            itoa(aa,delay1,10);   
         Lcd_Command(0x8f);                    
     asc_tran(aa); 
          delay_ms(1); 
           
          itoa(aa,delay2,10);   
         Lcd_Command(0xcf);                
     asc_tran(aa); 
     delay_ms(1); 
              
         itoa(aa,delay3,10);   
         Lcd_Command(0xa3);                    
     asc_tran(aa); 
          
         Lcd_Command(0xde);                
     asc_tran("0"); 
          
         start=0; 
         ready=0; 
         cnt=0; 
         t=0; 
        while(1) 
        { 
         inputio(); 
         ready=0; 
         enable=1; 
         delay_ms(1); 
        if (x0&enable==1) 
               { 
                    delay_ms(100); 
                    ready=1;         
                    //maneu=0;  
                    } 
                 
                if(ready&x2==1) 
                  { 
                           delay_ms(100); 
                 start=1; 
                } 
          
         if(start==1) 
         { 
           delay_ms(100); 
           y0_on; 
         }    
          
          if(maneu+x4==5) 
          { 
           delay_ms(2); 
           enable=0; 
           CLI(); 
       CLI(); 
                   CLI(); 
       CLI(); 
       delay_ms(50); 
           /* 
           EEPROM_WRITE(ad3,t); 
           delay_ms(500); 
           EEPROM_WRITE(ad2,t); 
           delay_ms(500); 
           EEPROM_WRITE(ad1,t); 
              delay_ms(500); 
           */ 
           EEPROM_WRITE(ad3,delay3); 
           delay_ms(500); 
           EEPROM_WRITE(ad2,delay2); 
           delay_ms(500); 
           EEPROM_WRITE(ad1,delay1); 
              delay_ms(500); 
              Lcd_Command(0x80);                    
         asc_tran(" "); 
         Lcd_Command(0xc0);                    
         asc_tran(" "); 
          Lcd_Command(0x94);                    
          asc_tran(" ");  
                  maneu=0; 
                  enable=1; 
          } 
         
           if(x1&start==1) 
             { 
             delay_ms(delay1); 
             y1_on; 
             delay_ms(delay2); 
             y1_off; 
             delay_ms(delay3); 
             y0_off; 
             start=0; 
                 ready=0; 
                 cnt++; 
                 itoa(aa,cnt,10);   
             Lcd_Command(0xde);                
          asc_tran(aa); 
                 } 
          
          
     
         
         
        if(x3==1) 
    { 
     if(maneu<5) 
      { 
       maneu++; 
       delay_ms(300); 
      } 
    if(maneu==5) 
      {maneu=1;} 
     } 
  
 if(maneu==4) 
 { 
   Lcd_Command(0x80);                    
   asc_tran("+"); 
   Lcd_Command(0xc0);                    
   asc_tran("+"); 
   Lcd_Command(0x94);                    
   asc_tran("+");  
 }                                   
  
                  
 if(maneu==1) 
  { 
   Lcd_Command(0x80);                    
   asc_tran(">"); 
   Lcd_Command(0xc0);                    
   asc_tran(" "); 
   Lcd_Command(0x94);                    
   asc_tran(" ");  
      if(x4==1) 
       { 
              if(delay1>500) 
          {delay1=498;} 
             delay1=delay1+2; 
                    itoa(aa,delay1,10);   
             Lcd_Command(0x8f); 
             asc_tran("   ");    
             Lcd_Command(0x8f);                  
         asc_tran(aa); 
                 delay_ms(100); 
            } 
      if(x5==1) 
      { 
        if(delay1<0) 
        {delay1=2;} 
           delay1=delay1-2; 
           itoa(aa,delay1,10);   
           Lcd_Command(0x8f);  
           asc_tran("   ");  
           Lcd_Command(0x8f);           
       asc_tran(aa); 
           delay_ms(100); 
           } 
             //EEPROM_WRITE(0x3000,delay1); 
       // delay_ms(10); 
       
 } 
          
 if(maneu==2) 
  { 
   Lcd_Command(0x80);                    
   asc_tran(" "); 
   Lcd_Command(0xc0);                    
   asc_tran(">"); 
   Lcd_Command(0x94);                    
   asc_tran(" "); 
   if(x4) 
    { 
            if(delay2>500) 
        {delay2=498;} 
            delay2=delay2+2; 
                   itoa(aa2,delay2,10);   
            Lcd_Command(0xcf);  
            asc_tran("   "); 
                Lcd_Command(0xcf);                    
        asc_tran(aa2); 
            delay_ms(100); 
     } 
    if(x5) 
    { 
        if(delay2<0) 
        {delay2=2;} 
            delay2=delay2-2; 
                    itoa(aa2,delay2,10);   
             Lcd_Command(0xcf);             
                 asc_tran("   "); 
             Lcd_Command(0xcf);         
         asc_tran(aa2);  
                 delay_ms(100); 
     }          
            //EEPROM_WRITE(0x3010,delay2); 
        //delay_ms(10);   
 }          
          
  if(maneu==3) 
  { 
    Lcd_Command(0x80);                    
   asc_tran(" "); 
   Lcd_Command(0xc0);                    
   asc_tran(" "); 
   Lcd_Command(0x94);                    
   asc_tran(">"); 
   if(x4==1) 
    { 
        if(delay3>500) 
        {delay3=498;} 
             delay3=delay3+2; 
                    itoa(aa3,delay3,10);   
                 Lcd_Command(0xa3); 
             asc_tran("   ");   
             Lcd_Command(0xa3);                    
         asc_tran(aa3); 
                 delay_ms(100); 
           } 
     
    if(x5==1) 
    { 
        if(delay3<0) 
        {delay3=2;} 
             delay3=delay3-2; 
                    itoa(aa3,delay3,10); 
                 Lcd_Command(0xa3); 
             asc_tran("   ");   
             Lcd_Command(0xa3);                    
         asc_tran(aa3); 
                 delay_ms(100); 
           } 
        //EEPROM_WRITE(0x3020,delay3); 
        //delay_ms(10); 
   } 
        } 
}



http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=456596&bbs_page_no=4&bbs_id=1000

⌨️ 快捷键说明

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