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

📄 term.c

📁 LPC2132通协议源代码和液晶源代码 LPC2132通协议源代码和液晶源代码
💻 C
📖 第 1 页 / 共 3 页
字号:
/*======================================================
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 "math.h"
#include "Ascii8x16.h"
//#include "LittleHZ.h"
#include "hzzk.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  X9313INC  (1<<11)
#define  X9313UD   (1<<10)

#define  TRUE    1
#define  FAULT   0

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

#define Rx_Leng  2048
uint8 Rx_Buff[1024];
uint8 Rx=0,Rd=0;


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


uint16 buffadd=0;         //SRAM缓冲区指针
unsigned char data_len=0;        //命令参数个数
//bit cursor_status=0;            //光标状态:1,显示;0,不显示。
unsigned 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 int  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_on_bg[1]={0x14};      //正常模式,第一层无闪烁。第二层关闭。
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()
{
;
}
void Delay(uint8 dly)
{
   uint8 i;
   for(i=0;i<dly;i++);
}

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++);
}
void adj_gray(uint8 adj)
{
   switch(adj)
   {
      case 0:
      {
         IO0CLR=X9313UD;
         IO0SET=X9313INC;      
         Delay(3);
         IO0CLR=X9313INC;  
         Delay(3);             
         IO0SET=X9313INC;                  
      }
      break;
      case 1:
      {
         IO0SET=X9313UD;
         IO0SET=X9313INC;      
         Delay(3);
         IO0CLR=X9313INC;                        
         Delay(3);             
         IO0SET=X9313INC;                           
      }
      break;
      default:
      break;
   }
}

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;
					 X=x;Y=y;
//                   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 int xx;
unsigned char xoffset;   
	if(y>240||x>320) return;
	xx=x/8;
	xoffset=x%8;
	Row[y].Xbyte[xx]=(Row[y].Xbyte[xx])|(0x80>>xoffset);
}
//画线函数
void vertical_line(int x1,int yy1,int x2,int y2)
{
        while(yy1!=y2){
                            write_dot(x1,yy1);
                            if(yy1<y2) ++yy1;
                            else if(yy1>y2) --yy1;
        }
}
void horizontal_line(int x1, int yy1,int x2,int y2)
{
        while(x1!=x2){
                            write_dot(x1,yy1);
                            if(x1<x2) ++x1;
                            else if(x1>x2) --x1;
        }
}


void draw_line(int x1,int yy1,int x2,int y2)
{
float k=0;

short b=0;

        if(x1==x2) vertical_line(x1,yy1,x2,y2);
        else if(yy1==y2) horizontal_line(x1,yy1,x2,y2);

        else {
             k=(y2-yy1)/(x2-x1);
             b=yy1-k*x1;

             if(k<1 && k>-1){
                             while(x1!=x2){
                                                 write_dot(x1,yy1);
                                                 if(x1>x2) --x1;
                                                 else if(x1<x2) ++x1;
                                                 yy1=k*x1+b;
                             }
             }
             else {
                   while(yy1!=y2){
                                       write_dot(x1,yy1);
                                       if(yy1>y2) --yy1;
                                       else if(yy1<y2) ++yy1;
                                       x1=(yy1-b)/k;
                   }
            }
        }
        return;
}

void draw_circle(int a,int b,int R)
{
int xdot,ydot;

float tmp,i=0;

        while(i<3.15/2){
                        tmp=R*sin(i); if(tmp-(int)tmp>0.7) ++tmp;
                        ydot=(int)tmp;
                        tmp=R*cos(i); if(tmp-(int)tmp>0.7) ++tmp;
                        xdot=(int)tmp;
                        write_dot(a+xdot,b+ydot);
                        if(b-ydot>0) write_dot(a+xdot,b-ydot);
                        if(a-xdot>0) write_dot(a-xdot,b+ydot);
                        if(a-xdot>0 && b-ydot>0) write_dot(a-xdot,b-ydot);
                        i+=1.57/(1+R*2);
        }
}

//开关光标
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++)

⌨️ 快捷键说明

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