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

📄 at6010n.c

📁 LPC2132通协议源代码和液晶源代码 LPC2132通协议源代码和液晶源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*======================================================
condition:
          Controller Board:	AMC-5S111 1.0
          LCD Controller:	SED1335
	  MCU Mode:		arm2119
          compiler:		keil arm

LCM MODEL:    AM320240T-57B68

Designer:Prinse

========================================================
I/O configure:

DataBus------------P1.16~p1.23


A0-----------------P1.25
RD-----------------P1.24
WR-----------------P0.28
LCDCS--------------P0.29
LCDRST-------------P0.30

====================================================*/

#include "Config.h"
#include "bk1.h"
#include "bk2.h"
#include "asc12x6.h"


#define system_set		0x40
#define sleep_in		0x53
#define disp_on			0x59
#define disp_off		0x58
#define scroll			0x44
#define	scrform			0x5d
#define	cgram_adr		0x5c
#define	csrdir_right    0x4c
#define	csrdir_left		0x4d
#define	csrdir_up		0x4e
#define	csrdir_down		0x4f
#define	hdot_scr		0x5a
#define ovlay			0x5b
#define csrw			0x46
#define csrr			0x47
#define mwrite			0x42
#define mread			0x43

#define A0                      0x02000000
//sbit	A0=P3^3;
#define LCDCS                   0x20000000
//sbit    LCDCS=P1^4;
#define LCDRST                  0x40000000
//sbit    LCDRST=P1^5;
#define RD                      0x01000000
#define WR                      0x10000000

#define P1PORT                  0x00ff0000

#define  ADCINT  0x00010000
#define  LP      0x00100000
#define 	LED1CON   (1<<22)

#define  TRUE    1
#define  FAULT   0

typedef struct UartMode
{
	uint8 datab;
	uint8 stopb;
	uint8 parity;
} UARTMODE;

struct {
unsigned char Xbyte[40];
}Row[240];

uint32 AD_tmp;
unsigned char  AD_Buf[3000];
unsigned char  AD_Data[230];

uint32 ADC_Data;
uint32 tmp1;
uint16 numb;
uint8 ADC_Flag;
uint16  count;
char str[20];

uint8 com1_on,com2_on,com1_off,com2_off,comu_err,serial_on;
uint8 p1Rx,p2Rx;
uint8 p1Rd,p2Rd;
#define UART_LEN 128
uint8 Uart0_RxBuf[UART_LEN];
uint8 Uart1_RxBuf[UART_LEN];

uint16 SendNumb;
char SendBuf[12];

uint8 OneToPC,AutoToPC;
uint16 AddrNo;

uint8  PC_MK;
uint8  PC_CenterFreq;
uint8  PC_Ref;
uint8  PC_Attn;
uint8  PC_Span;
uint8  PC_ResBW;
uint8  PC_VideoBW;
uint8  PC_UNCAL;
uint8  PC_RM;
uint8  PC_Read;
uint8  PC_Auto;



uint16 buffadd=0;         //SRAM缓冲区指针
unsigned char data_len=0;        //命令参数个数
//bit cursor_status=0;            //光标状态:1,显示;0,不显示。
//bit sleep=0;
unsigned char disp_mode=0;                //显示模式;0:240行,无自动换行。1:字符自动换行模式。
unsigned char bit_offset=0;
unsigned char H_font=0;                   //字体模式:高度放大标志
unsigned char W_font=0;                   //字体模式:宽度放大
//bit first=0;                    //复位后未接收数据标志
//bit oky=0;                      //数据接收完毕标志
                                //注意:编译器中,汉字字符串读取先低位,后高位。

unsigned char hz_code[2];       //汉字内码缓存
unsigned char hzmatrix[32];       //汉字点阵数据缓存
unsigned char ascii[16];   //ASCII码点阵数据缓存
unsigned char csradd[2]={0,0};  //sed1335光标地址
unsigned char X=0,Y=0;        //字符自动换行模式下坐标。

unsigned char	system_set_ini[8]={0x34,0x87,0x00,0x27,0x48,0xf0,0x28,0x00};
unsigned char	scroll_ini[9]={0x00,0x00,0xf0,0x80,0x25,0xf0,0x00,0x4b,0xf0};

unsigned char   scrform_ini[2]={0x07,0x86};
unsigned char	hdot_scr_ini[2]={0x00,0x0b};
unsigned char	ovlay_ini[1]={0x0e};//{0x0d};
unsigned char	disp_on_ini[1]={0x14};//{0x24};      //正常模式,底层2HZ闪烁。
unsigned char	disp_off_ini[1]={0x00};
unsigned char	cur_set_ini1[2]={0x00,0x00};
unsigned char	cur_set_ini2[2]={0x80,0x25};
unsigned char	cur_set_ini3[2]={0x00,0x4b};
unsigned char   null[]={0x00};



void draw_table()
{
unsigned char i,j;
	for(j=0;j<10;++j)
		for(i=1;i<240-48;i+=2) {
			Row[48+i].Xbyte[j*3]=0x80;
			Row[48+i+1].Xbyte[j*3]=0x00;
		}
	for(j=0;j<8;++j)
		for(i=0;i<30;++i) Row[48+24*j].Xbyte[i]=0x55;
	for(i=0;i<30;++i) Row[48].Xbyte[i]=0xff;
	for(i=0;i<30;++i) Row[239].Xbyte[i]=0xff;
	for(i=0;i<240-48;++i) Row[48+i].Xbyte[30]=0x80;
	for(i=0;i<240-48;++i) Row[48+i].Xbyte[0]|=0x80;
}


void DelayNS(uint32 dly)
{
   uint32 i;
   for(;dly>0;dly--)
       for(i=0;i<50000;i++);
}
void DelayUS(int t)
{
   int i;
   for(i=0;i<t;i++);
}
uint8 UART0_Ini(uint32 baud,UARTMODE set)
{
	uint32 bak;
	if((0==baud)||(baud>115200)) return(0);
	if((set.datab<5)||(set.datab>8)) return(0);
	if((0==set.stopb)||(set.stopb>2)) return(0);
	if(set.parity>4) return(0);

	U0LCR=0x80;
	bak=(Fpclk>>4)/baud;
	U0DLM=bak>>8;
	U0DLL=bak&0xff;

	bak=set.datab-5;
	if(2==set.stopb)bak|=0x04;
	if(0!=set.parity)
	{
		set.parity=set.parity-1;
		bak|=0x08;
	}
	bak|=set.parity<<4;

	U0LCR=bak;
	U0FCR=0x01;
	U0IER=0x01;
    return(1);
}
uint8 UART1_Ini(uint32 baud,UARTMODE set)
{
	uint32 bak;
	if((0==baud)||(baud>115200)) return(0);
	if((set.datab<5)||(set.datab>8)) return(0);
	if((0==set.stopb)||(set.stopb>2)) return(0);
	if(set.parity>4) return(0);

	U1LCR=0x80;
	bak=(Fpclk>>4)/baud;
	U1DLM=bak>>8;
	U1DLL=bak&0xff;

	bak=set.datab-5;
	if(2==set.stopb)bak|=0x04;
	if(0!=set.parity)
	{
		set.parity=set.parity-1;
		bak|=0x08;
	}
	bak|=set.parity<<4;

	U1LCR=bak;
	U1FCR=0x01;
	U1IER=0x01;

    return(1);
}

void en_lcd()
{
  IO0CLR=LCDCS;
//  DelayUS(10);
}

void off_lcd(void)
{
  IO0SET=LCDCS;
  //DelayUS(10);
}
//写入一个字节
void write_byte(unsigned char dta)
{
uint32  tmp;
        tmp=dta<<16;	
        IO1SET=RD; 
        IO1CLR=P1PORT;
        IO1SET=tmp;
		IO0CLR=WR;
        IO0SET=WR;
	
}	
//SED1335命令写函数
void sed1335_write(unsigned char commandcode, unsigned char *parameter,unsigned char n)
{
unsigned char i=0;

    en_lcd();

    IO1SET=A0;
    write_byte(commandcode);
	for(i=0;i<n;i++)
	{
            IO1CLR=A0;
            write_byte(parameter[i]);
	}
}


//sed1335读函数,可以读取光标,显示数据

void sed1335_read(char commandcode, unsigned char *parameter,unsigned int n)
{
int i=0;
uint32 tmp;

    en_lcd();
	tmp=commandcode<<16;
	IO1SET=A0;
    IO1SET=RD;
	IO1CLR=P1PORT;
	IO1SET=tmp;
	IO0CLR=WR;
	IO0SET=WR;
	IO1DIR=A0|RD;
	for(i=0;i<n;i++)
	{
		IO1CLR=A0;
		IO0SET=WR;
		IO1CLR=RD;
		IO1SET=RD;
		tmp=IO1PIN;
		parameter[i]=tmp>>16;
	}
	IO1DIR=P1PORT|A0|RD;
}

//============================================================================
//光标地址写入sed1335寄存器并进行校验
//============================================================================
void cursor_write()
{
//unsigned char csr_ver[2];

         sed1335_write(csrw,csradd,2);
/*
         sed1335_read(csrr,csr_ver,2);
//对于写入的光标地址校验
         while((csr_ver[0]!=csradd[0])||(csr_ver[1]!=csradd[1])){
                        sed1335_write(csrw,csradd,2);
                        sed1335_read(csrr,csr_ver,2);
         }
*/
         return;
}

//
void set_xy(unsigned int x, unsigned int y)
{
unsigned int cursor_addr;

    if(disp_mode==0){              //点阵坐标定位
                     if(x>319) x=319;
                     if(y>239) y=239;
                     bit_offset=x%8;           //相对字节单位的移位
                     cursor_addr=y*40+(x/8);   //计算光标地址
                     csradd[0]=(unsigned char)cursor_addr;
                     csradd[1]=(unsigned char)(cursor_addr>>8);
                     cursor_write();
    }
    if(disp_mode==1){
                     bit_offset=0;
                     if(X>39) X=39;   //根据字体限定设定字符坐标范围。
                     if(Y>14-H_font) Y=14-H_font;
                     X=x; Y=y;
                     cursor_addr=y;
                     cursor_addr=cursor_addr*40*16+x;       //计算光标地址
                     csradd[0]=(unsigned char)cursor_addr;
                     csradd[1]=(unsigned char)(cursor_addr>>8);
                     cursor_write();
    }
    return;
}


//写点函数
void write_dot(int x, int y)
{
unsigned char dot[2];
        disp_mode=0;
        set_xy(x,y);    
        dot[1]=0x80>>bit_offset;
        sed1335_read(mread,dot,1);
        dot[0]|=dot[1];
        set_xy(x,y);     
        sed1335_write(mwrite,dot,1);
        return;
}

//开关光标
void cursor_disp(unsigned char onoff)
{
uint16 addr;
unsigned char hl[2]={0x80,0x25};
uint16 i=0;

         addr=csradd[1];
         addr=addr<<8;
         addr+=csradd[0];
         addr+=0x2580;
         hl[0]=(unsigned char)addr;
         hl[1]=(unsigned char)(addr>>8);

         en_lcd();
         sed1335_write(csrdir_down,null,1);
         sed1335_write(csrw, hl,2);
         IO1SET=A0;
         write_byte(mwrite);
         IO1CLR=A0; 
         if(onoff==1) 
         {
             for(i=0;i<16;i++)
             {
                write_byte(0xff);
             }
         }    
         if(onoff==0)
         {
             for(i=0;i<16;i++)
             {
                 write_byte(0x00);
             }
         }

         sed1335_write(csrw,csradd,2);
}


//设置光标 X Y 位置,X以字节8bit为单位,Y以线为单位。
void set_cursor(unsigned int x, unsigned int y)
{
unsigned int  addr;

         X=x; Y=y;
         addr=y*40+x;
         if(addr>0x2580) return;
         csradd[0]=(unsigned char)addr;
         csradd[1]=(unsigned char)(addr>>8);
         sed1335_write(csrw,csradd,2);
}

/*写任何大小的一块, high点高度,width*8点为宽度*/
void wr_any(unsigned int XX,unsigned int YY, unsigned char *word,unsigned int high,unsigned int width)
{
int k=0;
unsigned char xy[2];
unsigned int adr=0;

        adr=YY*40+XX;
        xy[0]=(unsigned char)adr;
        xy[1]=(unsigned char)(adr>>8);
        for( k=0;k<width;k++)
        {

			sed1335_write(csrw,xy,2);
			sed1335_write(csrdir_down,null,1);
			sed1335_write(mwrite,word+high*k,high);
            xy[0]++;
            if(xy[0]==0) xy[1]++;
        }
}
void wr_anyb(unsigned int XX,unsigned int YY, unsigned char  *word,unsigned int high,unsigned int width)
{
int k=0;
unsigned char xy[2];
unsigned int adr=0;

        for( k=0;k<high;k++)
        {
        adr=YY*40+XX;
        xy[0]=(unsigned char)adr;
        xy[1]=(unsigned char)(adr>>8);

			sed1335_write(csrw,xy,2);
			sed1335_write(csrdir_right,null,1);
			sed1335_write(mwrite,word+width*k,width);
			YY++;
        }
}

void Write_Buff(unsigned int x,unsigned int y,unsigned char const wrd[],unsigned int high,unsigned int width)
{
unsigned int i,j;
		for(i=0;i<high;i++)
		   for(j=0;j<width;j++)
		      Row[y+i].Xbyte[x+j]=wrd[i*width+j]; 
   
}
void Write_Char(unsigned int x,unsigned int y,unsigned char str)
{
unsigned int i;
        for(i=0;i<12;i++)
           Row[y+i].Xbyte[x]=chardot[(str-0x20)*12+i]; 		        
}
void Write_String(unsigned int x,unsigned int y,char *str)
{
	while(1)
	{
	    if(*str=='\0')break;
		Write_Char(x++,y,*str++);
	}
}
void Write_BackG(void)
{
   Write_Buff(1,0,at1,48,40);
   Write_Buff(31,48,at2,192,9);

   draw_table();
}
void Write_Message(void)
{
   Write_String(11,18,"123456");
   Write_String(24,18,"40");
   Write_String(31,12,"12345");
   Write_String(29,23,"1234567");
   Write_String(32,72,"123456");
   Write_String(32,106,"123456");
   Write_String(32,139,"123456");
   Write_String(36,177,"OFF");
   Write_String(36,208,"OFF");
}


//清显示内存32K
void clr_scr()
{
unsigned int i=0;

    en_lcd();

    sed1335_write(csrdir_right,null,1);
    sed1335_write(csrw,cur_set_ini1,2);

⌨️ 快捷键说明

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