Microcontroller Programming Forum
July 24, 2008, 11:15:13 AM *
Welcome, Guest. Please login or register.

Login with username, password and session length
News: P89V51 code for SDCC is now ready to download
 
   Home   Help Search Links Login Register  
Del.icio.us Digg FURL FaceBook Stumble Upon Reddit SlashDot

Pages: [1]
  Print  
Author Topic: AVR12864  (Read 253 times)
mooco
Freshy
*
Posts: 5


View Profile
« on: April 21, 2008, 09:05:12 PM »

/************************************************************
   LCD??HD61202,128x64
   Huh??ATMega16L 8MHz
************************************************************/

#include <mega16.h>
//#include <delay.h>
//#include <stdio.h>
#include "hzk.h"

/*LCD?Huh PB0-7??LCD DB0-DB7*/
#define CS1 PORTA.6
#define CS2 PORTA.5
#define RS PORTA.2
#define RW PORTA.3
#define E PORTA.4
#define RST PORTA.7
#define SPEAK PORTA.0
#define LCDEL PORTA.1

#define MOTO1A PORTD.6
#define MOTO1B PORTD.7     
#define MOTO2A PORTC.0
#define MOTO2B PORTC.1     

#define HD7279CS       0
#define HD7279CLK       1
#define HD7279DATA      4
#define HD7279KEY      5

#define PD2      2
#define   PD3      3

#define  URSEL    7
//#define  UMSEL    6
//#define  UPM1     5
//#define  UPM0     4
//#define  USBS     3
#define  UCSZ1    2
#define  UCSZ0    1
//#define  UCPOL    0
 
#define  RXCIE    7
#define  TXCIE    6
#define  UDRIE    5
#define  RXEN     4
#define  TXEN     3
#define  UCSZ2    2
#define  RXB8     1
#define  TXB8     0
         
#define  RXC      7
#define  TXC      6
#define  UDRE     5
#define  FE       4
#define  DOR      3
#define  OVR      3    /*This definition differs from the databook*/
#define  PE       2
#define  U2X      1
#define  MPCM     0


typedef const struct 
{
   unsigned char X;
   unsigned char Y;
}LCDPos;

LCDPos const LCDInfo[]={{0x28,0x00},{0x30,0x00},{0x38,0x00},{0x40,0x00},{0x48,0x00},
                      {0x50,0x00},{0x58,0x00},
                      {0x30,0x02},{0x38,0x02},{0x40,0x02},
                      {0x48,0x02},{0x50,0x02},
                      {0x30,0x04},{0x40,0x04},
                      {0x30,0x06},{0x40,0x06},{0x48,0x06}};
unsigned char LCDInfoBuf[17];

int Count = 1234;

void delay_us(int time)
 {     
  do
   {
   time--;
   }   
  while (time>1);
 }

void Delay(int x)
{
   int i,j;
   for(j=0;j<x;j++)
   {
        for(i=0;i<250;i++);
   }
}

/*         HuhHuh          */
unsigned char receive_byte(void)
{
   unsigned char i,temp=0;
   DDRD &= ~(1<<HD7279DATA);
   delay_us(90);
   for(i=0;i<8;i++)
   {
        temp=temp<<1; 
        PORTD |= (1<<HD7279CLK);
        delay_us(10);
        if((PIND & (1<<HD7279DATA))!=0)
           temp|=0x01;   
        PORTD &= ~(1<<HD7279CLK);
        delay_us(10);
   }
   DDRD |= (1<<HD7279DATA); 
   return temp;
}
/*         HuhHuh            */
void send_byte(unsigned char para)
{
    unsigned char i;
    PORTD &= ~(1<<HD7279CS);
    delay_us(90);
    for(i=0;i<8;i++)
    {
       if((para&0x80)==0x80)
           PORTD |= (1<<HD7279DATA);   
          else
           PORTD &= ~(1<<HD7279DATA);   
        PORTD |= (1<<HD7279CLK);     
        delay_us(10);
        PORTD &= ~(1<<HD7279CLK);     
        delay_us(10);
        para=para<<1;               
   }        
}
/*               ?HD7279?Huh?                */     
void write7279(unsigned char cmd1, unsigned char cmd2)
{
   send_byte (cmd1);
   send_byte (cmd2);                             
   PORTD |= (1<<HD7279CS);
}
     
void Rst7279(void)
{
    send_byte(0xa4);      // ??HD7279
   PORTD |= (1<<HD7279CS);
}         

unsigned char Read7279(void)
{                     
   unsigned char keyval;
   if((PIND & (1<<HD7279KEY))==0)
   {
      send_byte(0x15);
      keyval=receive_byte();
      PORTD |= (1<<HD7279CS);
      return keyval;
   }
   return 0xff;
}
void LCD_NOP(void)
{
   unsigned char i;
   for(i=0;i<50;i++);
//   #asm("NOP");
}


//LCD?HuhHuh
void LCD_Write_ComL(unsigned char x)
{
     CS1=0;
     CS2=1;
     LCD_NOP();
     RS=0;
     E=1;
     LCD_NOP();
     RW=0;
     PORTB=x;
     E=1;
     E=0;
     CS1=1;
     CS2=1;
}

//LCD?Huh??
void LCD_Write_DatL(unsigned char x)
{
     CS1=0;   
     CS2=1;
     LCD_NOP();
     RS=0;
     E=1;
     LCD_NOP();
     RS=1;
     RW=0;
     PORTB=x;
     E=1;
     E=0;
     CS1=1;
     CS2=1;
}

//LCD?HuhHuh
void LCD_Write_ComR(unsigned char x)
{
     CS1=1;
     CS2=0;
     LCD_NOP();
     RS=0;
     E=1;
     LCD_NOP();
     RW=0;
     PORTB=x;
     E=1;
     E=0;
     CS1=1;
     CS2=1;
 
}     

//LCD?Huh??
void LCD_Write_DatR(unsigned char x)
{
     CS1=1;
     CS2=0;
     LCD_NOP();
     RS=0;
     E=1;
     LCD_NOP();
     RS=1;
     RW=0;
     PORTB=x;
     E=1;
     E=0;
     CS1=1;
     CS2=1;
 
}

//LCD???
void LCD_Init(void)

   RST = 1;
   RST = 0;
   Delay(200);
    RST = 1;
     LCD_Write_ComL(0x3e);
     LCD_Write_ComR(0x3e);
     LCD_Write_ComL(0x3f);
     LCD_Write_ComR(0x3f);
     LCD_Write_ComL(0xc0);
     LCD_Write_ComR(0xc0);
}


//LCD??
void LCD_Clr(void)
{
   unsigned char i,j;

   for(j=0;j<8;j++)
   {
        LCD_Write_ComL(0xb8|j); 
        LCD_Write_ComL(0x40);
        LCD_Write_ComR(0xb8|j); 
        LCD_Write_ComR(0x40);
        for(i=0;i<64;i++)
        {
          LCD_Write_DatL(0x00); 
          LCD_Write_DatR(0x00);
        }
   }
}

//------------------------------------------------------
//            HuhHuh?             
//  x?? x+1?Huh?1?;y?? y+1?Huh?8?
//------------------------------------------------------
void CCW_PR(unsigned int neima,unsigned char X,unsigned char Y,unsigned char fan)
{
    unsigned char k,com,dat1,hz;
    unsigned int i;
    Y=Y|0xb8;            //?Huh
    LCD_Write_ComL(Y);
    LCD_Write_ComR(Y);
    if(neima<CB1B1)          //?HuhHuh??
        hz=8;
    else
        hz=0;
    if(X<0x40)            //?HuhHuhHuh??HD61202
    {
       com=X+0x40;         //?Huh
       LCD_Write_ComL(com);
       k='L';
    }
    else
    {
       com=X;
       LCD_Write_ComR(X);            //Com=X-0x40+0x40
    }
    com=com&0x3f;
    for(i=neima;i<(16+neima-hz);i++)
    {
        dat1=hzdot;
        if(fan)
           dat1=~dat1;
        if(k=='L')
        {
            LCD_Write_DatL(dat1);
        }
        else
        {
            LCD_Write_DatR(dat1);
        }
        com++;
        if(com==0x40)         //?HuhHuh?HD61202
        {
           LCD_Write_ComR(com);
           k='R';
        }
    }
    Y++;
    LCD_Write_ComL(Y);
    LCD_Write_ComR(Y);
    if(X<0x40)            //?HuhHuhHuh??HD61202
    {
       com=X|0x40;
       LCD_Write_ComL(com);
       k='L';
    }
    else
    {
       com=X;
       LCD_Write_ComR(X);            //Com=X-0x40+0x40
    }
    com=com&0x3f;
    for(i=(16+neima-hz);i<(32+neima-hz-hz);i++)    //?HuhHuh??
    {
        dat1=hzdot;
        if(fan)
           dat1=~dat1;
        if(k=='L')
        {
            LCD_Write_DatL(dat1);
        }
        else
        {
            LCD_Write_DatR(dat1);
        }
        com++;
        if(com==0x40)         //?HuhHuh?HD61202
        {
           LCD_Write_ComR(com);
           k='R';
        }
    }
}

void logo(void)
{

    CCW_PR(CB5E7,0x4-2,0x06,0);       //?
    CCW_PR(CBBB0,0x14-2,0x06,0);      //?

    CCW_PR(CHAR_30,0x28-2,0x06,0);
    CCW_PR(CHAR_31,0x30-2,0x06,0);
    CCW_PR(CHAR_32,0x38-2,0x06,0);
    CCW_PR(CHAR_33,0x40-2,0x06,0);
    CCW_PR(CHAR_34,0x48-2,0x06,0);
    CCW_PR(CHAR_35,0x50-2,0x06,0);
    CCW_PR(CHAR_36,0x58-2,0x06,0);
    CCW_PR(CHAR_37,0x60-2,0x06,0);
    CCW_PR(CHAR_38,0x68-2,0x06,0);
    CCW_PR(CHAR_39,0x70-2,0x06,0);
//    CCW_PR(ASC0,0x78-2,0x06,0);
}

// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
   if(PIND & (1<<PD3))
      Count++;
   else
      Count--;
}

//???
void main(void)
{
   unsigned int i;
   unsigned char Key;
   DDRB=0xff;
   PORTB=0x00;
   DDRA=0xff;

   DDRC = 0xff;
   PORTC = 0x00;

// Port D initialization
// Func7=Out Func6=Out Func5=In Func4=Out Func3=In Func2=In Func1=Out Func0=Out
// State7=0 State6=0 State5=P State4=0 State3=P State2=P State1=0 State0=0
   PORTD=0x2C;
   DDRD=0xD3;

// External Interrupt(s) initialization
// INT0: On
// INT0 Mode: Rising Edge
// INT1: Off
// INT2: Off
   GICR|=0x40;
   MCUCR=0x03;
   MCUCSR=0x00;
   GIFR=0x40;

   Rst7279();
    #asm("wdr");
 
   #asm("SEI");    //?Huh
   
   LCD_Init(); //LCD???
   LCD_Clr();     //LCD??
    MOTO1A = 0;
    MOTO1B = 1;
    MOTO2A = 0;
    MOTO2B = 1;
    SPEAK = 1;
    LCDEL = 1;
   logo();
   Delay(200);
   Delay(200);
   while(1)
   {                   
      Key = Read7279();
      if(Key != 0xff)
         Count = Key;
       LCDInfoBuf[0]=(Count/10000)%10;
       LCDInfoBuf[1]=(Count/1000)%10;
       LCDInfoBuf[2]=(Count/100)%10;
       LCDInfoBuf[3]=(Count/10)%10;
       LCDInfoBuf[4]=(Count)%10;
      for (i=0;i<7;i++)
      {
         CCW_PR(LCDInfoBuf*16,LCDInfo.X,LCDInfo.Y,0);   
      }
   
   }   
}
Logged
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.4 | SMF © 2006-2007, Simple Machines LLC | Sitemap Valid XHTML 1.0! Valid CSS!