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

📄 dispaly6963.c

📁 avr M128 读取ADS7843实现触摸屏的控制。
💻 C
字号:
#include <mega128.h>
#include <delay.h>
#define Uchar      unsigned char
#define Uint       unsigned int 

#define BG   PORTA.7
#define LED  PORTD.7
#define BP   PORTA.6  

#define AD7843_IRQ    PINA.0
#define AD7843_DOUT   PINA.1
#define AD7843_BUSY   PINA.2
#define AD7843_DIN    PORTA.3
#define AD7843_CS     PORTA.4
#define AD7843_CLK    PORTA.5
  
extern	 void Init_LCD_Graphic();	//初始化屏幕
extern   void ClrGraphic();  
extern   void DrawLines(int x,int y,int x1,int y1) ;/*以(x行,y列)为起点,以(x1行,y1列)为终点画一条直线*/
extern   void DrawCircle(int x,int y,int r); /*以(x,y)为圆心以r为半径画一个圆*/
extern   void DrawJX(int x,int y,int x1,int y1,Uchar fg);/*以x,y为左上角坐标x1,y1为右下角坐标画矩形*/
extern   void Display8(Uint row,Uint col,Uint SZ,Uchar fg);
extern   void Display16(Uint row,Uint col,Uint HZ,Uchar fg  );
extern   void Display24(Uint row,Uint col,Uint HZ ,Uchar fg );
extern unsigned char const HZTable24[];   
extern unsigned char const HZTable16[]; 
extern unsigned char const HZTable8[];  
  
flash Uchar Menu_char16[12]={0,1,2,3,4,5,6,7,8,9,2,3};/*导航数据 电子车钟 机舱数据 */
flash Uchar Menu_char24[8]={20,21,22,23,24,25,26,27};/*船舶智能监控系统*/
flash Uchar Menu_com[12]={33,34,35,36,8,4,37,38,39,40,41,42};/* 浙江双鱼机电科技有限公司*/
flash Uchar Menu_Tel[15]={55,14,21,68,1,3,1,3,6,2,9,2,0,8,0};/*Tel:13136292080*/
flash Uchar Menu_Index3[18]={15,16,17,18, 1,20, 1,19,21,
                             22, 4, 5, 6, 7, 8, 9, 2, 3};
// I2C Bus functions
#asm
   .equ __i2c_port=0x12 ;PORTD
   .equ __sda_bit=1
   .equ __scl_bit=0
#endasm
#include <i2c.h>

// PCF8583 Real Time Clock functions
#include <pcf8583.h>     

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART0 Receiver buffer
#define RX_BUFFER_SIZE0 8
char rx_buffer0[RX_BUFFER_SIZE0];

#if RX_BUFFER_SIZE0<256
unsigned char rx_wr_index0,rx_rd_index0,rx_counter0;
#else
unsigned int rx_wr_index0,rx_rd_index0,rx_counter0;
#endif

// This flag is set on USART0 Receiver buffer overflow
bit rx_buffer_overflow0;

// USART0 Receiver interrupt service routine
interrupt [USART0_RXC] void usart0_rx_isr(void)
{
char status,data;
status=UCSR0A;
data=UDR0;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer0[rx_wr_index0]=data;
   if (++rx_wr_index0 == RX_BUFFER_SIZE0) rx_wr_index0=0;
   if (++rx_counter0 == RX_BUFFER_SIZE0)
      {
      rx_counter0=0;
      rx_buffer_overflow0=1;
      };
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the USART0 Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter0==0);
data=rx_buffer0[rx_rd_index0];
if (++rx_rd_index0 == RX_BUFFER_SIZE0) rx_rd_index0=0;
#asm("cli")
--rx_counter0;
#asm("sei")
return data;
}
#pragma used-
#endif

// USART0 Transmitter buffer
#define TX_BUFFER_SIZE0 8
char tx_buffer0[TX_BUFFER_SIZE0];

#if TX_BUFFER_SIZE0<256
unsigned char tx_wr_index0,tx_rd_index0,tx_counter0;
#else
unsigned int tx_wr_index0,tx_rd_index0,tx_counter0;
#endif

// USART0 Transmitter interrupt service routine
interrupt [USART0_TXC] void usart0_tx_isr(void)
{
if (tx_counter0)
   {
   --tx_counter0;
   UDR0=tx_buffer0[tx_rd_index0];
   if (++tx_rd_index0 == TX_BUFFER_SIZE0) tx_rd_index0=0;
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Write a character to the USART0 Transmitter buffer
#define _ALTERNATE_PUTCHAR_
#pragma used+
void putchar(char c)
{
while (tx_counter0 == TX_BUFFER_SIZE0);
#asm("cli")
if (tx_counter0 || ((UCSR0A & DATA_REGISTER_EMPTY)==0))
   {
   tx_buffer0[tx_wr_index0]=c;
   if (++tx_wr_index0 == TX_BUFFER_SIZE0) tx_wr_index0=0;
   ++tx_counter0;
   }
else
   UDR0=c;
#asm("sei")
}
#pragma used-
#endif

// Get a character from the USART1 Receiver
#pragma used+
char getchar1(void)
{
char status,data;
while (1)
      {
      while (((status=UCSR1A) & RX_COMPLETE)==0);
      data=UDR1;
      if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
         return data;
      };
}
#pragma used-

// Write a character to the USART1 Transmitter
#pragma used+
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-




int ReadTouch(unsigned char command)
{unsigned char temp,i,ack;
 ack=0;
 AD7843_CS=0;
 AD7843_CLK=0;
 temp=0x80;
 for(i=0;i<8;i++)
    {if(command&temp)AD7843_DIN=1;
     else  AD7843_DIN=0;
     AD7843_CLK=1;
     delay_us(1);
     AD7843_CLK=0;
     delay_us(1);
     temp=temp>>1;
    }             
 while(AD7843_BUSY==0);
 AD7843_DIN=0;
 AD7843_CLK=1;
 delay_us(1);
 AD7843_CLK=0;
 delay_us(1);
 for(i=0;i<7;i++)
    {AD7843_CLK=1;
     if(AD7843_DOUT)ack+=1;
     ack=ack<<1;
     delay_us(1);
     AD7843_CLK=0;
     delay_us(1);
    }            
 AD7843_CLK=1;
 if(AD7843_DOUT)ack+=1;
 delay_us(1);
 AD7843_CLK=0;
 AD7843_CS=1;
 return ack;   
}

bit key_fg=0;
unsigned char data_x,data_y,key_count=4;
unsigned char key_old=0;       //键盘原值;
unsigned char KeyStateIndex=0;//画面状态索引号;       
void getkey(void)
{if(AD7843_IRQ==0)
   {delay_ms(10);
    if(AD7843_IRQ==0)
      { data_x=ReadTouch(0xdc);
        data_y=ReadTouch(0x9c); 
        switch(KeyStateIndex)  
             {case 0:
                 {if((20<data_x)&&(data_x<70)&&(90<data_y)&&(data_y<160))
                         {key_fg=1;KeyStateIndex=1;}
                  else if((105<data_x)&&(data_x<155)&&(90<data_y)&&(data_y<160))
                         {key_fg=1;KeyStateIndex=2;}
                  else if((190<data_x)&&(data_x<240)&&(90<data_y)&&(data_y<160))
                         {key_fg=1;KeyStateIndex=3;} 
                  break;
                      }
              case 1:
                 {
                  break;
                 }      
              case 2:
                 {break;
                 }
              case 3:
                 {if((10<data_x)&&(data_x<80)&&(60<data_y)&&(data_y<90))
                         {key_fg=1;KeyStateIndex=0;}
                  else if((10<data_x)&&(data_x<80)&&(110<data_y)&&(data_y<140))
                         {key_fg=1;KeyStateIndex=0;}       
                  break;
                 }             
              }            
      }  
   }   
}


void disp_menu(void)
{unsigned char i,j;
 if(KeyStateIndex==0)
    {ClrGraphic(); 
     for(i=0;i<8;i++)
        {Display24(8,3+i*3,Menu_char24[i],0);} 
     for(i=0;i<3;i++)
         {for(j=0;j<4;j++)
             {Display16(56,1+i*10+j*2,Menu_char16[j+i*4],0);}
          if(i==0)DrawJX(54,8,74,74,1); 
          else if(i==1)DrawJX(54,88,74,154,1);  
          else   DrawJX(54,166,74,234,1);
          } 
     for(i=0;i<12;i++)
        {Display16(94,3+i*2,Menu_com[i],0); }    
     for(i=0;i<15;i++)
        { Display8(112,7+i,Menu_Tel[i],0); }
    }  
    
 else if(KeyStateIndex==1) 
        {ClrGraphic(); 
        }
 else if(KeyStateIndex==2)
        {ClrGraphic(); 
        }
 else if(KeyStateIndex==3)
        {ClrGraphic(); 
         Display24(4,6,20,0);
         Display24(4,9,21,0); 
         for(i=0;i<4;i++)
            {Display24(4,12+i*3,12+i,0);} 
         for(i=0;i<5;i++)
            {for(j=0;j<2;j++)
                {Display16(32+i*20,1+j*2,Menu_Index3[i*2+j],0);}
             Display8(32+i*20,5,68,0);   
            }   
         for(i=0;i<2;i++)
            {for(j=0;j<4;j++)
                {Display16(48+i*40,21+j*2,Menu_Index3[10+i*4+j],0);
                 if(i==0)DrawJX(47,166,65,234,1);
                 else    DrawJX(87,166,104,234,1);
                }
            }   
        }
 //else break;                             
}

void main(void)
{// unsigned char i;
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=Out Func0=In 
// State7=0 State6=0 State5=0 State4=0 State3=T State2=T State1=0 State0=T 
PORTA=0x7F;
DDRA=0xF8;
//PORTA=0xFF;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTB=0x00;
DDRB=0xFF;

// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTC=0x00;
DDRC=0xFF;

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

// Port E initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=T State0=T 
PORTE=0x00;
DDRE=0xFC;

// Port F initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTF=0x00;
DDRF=0xFF;

// Port G initialization
// Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State4=0 State3=0 State2=0 State1=0 State0=0 
PORTG=0x00;
DDRG=0x1F;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;

// USART0 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART0 Receiver: On
// USART0 Transmitter: On
// USART0 Mode: Asynchronous
// USART0 Baud rate: 19200
UCSR0A=0x00;
UCSR0B=0xD8;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x19;

// USART1 initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART1 Receiver: On
// USART1 Transmitter: On
// USART1 Mode: Asynchronous
// USART1 Baud rate: 19200
UCSR1A=0x00;
UCSR1B=0x18;
UCSR1C=0x06;
UBRR1H=0x00;
UBRR1L=0x19;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// I2C Bus initialization
i2c_init();

// PCF8583 Real Time Clock initialization
rtc_init(0,0);
    BG=0;
    BP=1;
    LED=0;
	
Init_LCD_Graphic();	//初始化屏幕
ClrGraphic();		//清屏  
disp_menu();
// Global enable interrupts
#asm("sei")

while (1)
      {
       getkey();
       if(key_fg)
         {key_fg=0;   
	      disp_menu(); 
         }
            
      };
}

⌨️ 快捷键说明

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