HGSC128643UART口测试程序

发布时间:2016/11/1 14:03:08

#include<reg51.h>
#include<intrins.h>
#include<string.h>  
#include<stdio.h> 

#define uchar unsigned char
#define uint unsigned int 


#define UART  //Uart通信
//#define UART_emulate  //模拟Uart通信


#ifdef UART
//  sbit txd = P3^1;
  sbit BUSY = P3^4;
  sbit REST = P3^5;
#endif


#ifdef UART_emulate
  sbit txd = P3^1;
  sbit BUSY = P3^4;
  sbit REST = P3^5;
#endif


#define WD 128  /* 显示区宽度 */
#define HD 64  /* 显示区高度 */  
#define clear 0x00  /* Clear Display */
#define time 1000  /* 1000延时 1.03895500 s */
#define c_time 50  


uchar code  CHHZ1[]={"清达光电技术公司"};
uchar code  CHHZ2[]={"一二三四五六七八"};
uchar code  CHHZ3[]={"01234567"};
uchar code  CHHZ4[]={"abcd,。+-"};


uchar code  CHHZ21[]={" ! #$%&'()*=,-./"};
uchar code  CHHZ22[]={"0123456789:;<=>?"};
uchar code  CHHZ23[]={"@ABCDEFGHIJKLMNO"};
uchar code  CHHZ24[]={"PQRSTUVWXYZ[ ]^_"};
uchar code  CHHZ25[]={"`abcdefghijklmno"};
uchar code  CHHZ26[]={"pqrstuvwxyz{|}~ "};
uchar code  CHHZ27[]={0x5b,0x5c,0x5d,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e};




/******** 西文字符库 *******/
/*-- 
   提取点阵方向:横向(先左->右, 再上->下)    
                                         --*/      
uchar code CTAB[][16]={
/*--  文字:  H  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x42,0x42,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x42,0x42,0x00,0x00,


/*--  文字:  G  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x38,0x44,0x82,0x82,0x80,0x8E,0x82,0x82,0x82,0x46,0x3A,0x00,0x00,


/*--  文字:  S  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x38,0x44,0x82,0x80,0x60,0x18,0x04,0x82,0x82,0x44,0x38,0x00,0x00,


/*--  文字:  D  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xF8,0x84,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0x84,0xF8,0x00,0x00,


/*--  文字:  O  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00,


/*--  文字:  T  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0xFE,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,


/*--  文字:  1  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x10,0x30,0x70,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,


/*--  文字:  2  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x02,0x04,0x08,0x10,0x20,0x40,0x7E,0x00,0x00,


/*--  文字:  8  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x22,0x1C,0x22,0x41,0x41,0x22,0x1C,0x00,0x00,


/*--  文字:  6  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x1C,0x22,0x42,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00,


/*--  文字:  4  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x02,0x06,0x0A,0x12,0x12,0x22,0x42,0x7F,0x02,0x02,0x02,0x00,0x00,


/*--  文字:  6  --*/
/*--  黑体12;  此字体下对应的点阵为:宽x高=8x16   --*/
0x00,0x00,0x00,0x1C,0x22,0x42,0x40,0x5C,0x62,0x42,0x42,0x42,0x22,0x1C,0x00,0x00,


};


/******** 中文字符库 *******/
/*-- 
   提取点阵方向:横向(先左->右, 再上->下)    
                                         --*/      
uchar code CCTAB[][32]={
/*--  文字:  清  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x00,0xE0,0x33,0x80,0x10,0xE0,0x03,0x80,0x40,0xFC,0x2F,0x00,0x01,0xE0,
0x12,0x20,0x13,0xA0,0x22,0x20,0x63,0xA0,0x42,0x20,0x02,0x60,0x00,0x20,0x00,0x00,


/*--  文字:  达  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x40,0x00,0x40,0x20,0x40,0x10,0x40,0x00,0x78,0x03,0xC0,0x70,0x40,0x10,0xA0,
0x21,0x10,0x12,0x08,0x10,0x00,0x7C,0x00,0x03,0xFE,0x00,0x38,0x00,0x00,0x00,0x00,


/*--  文字:  光  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x01,0x00,0x01,0x00,0x01,0x20,0x09,0x60,0x05,0x80,0x01,0x00,0x03,0xF0,0x3C,0x80,
0x04,0x80,0x04,0x80,0x08,0x82,0x10,0x82,0x20,0x82,0x40,0x7C,0x00,0x00,0x00,0x00,


/*--  文字:  电  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xE0,0x3E,0x20,0x22,0x20,0x23,0x20,0x2E,0x20,
0x13,0xC0,0x1E,0x00,0x02,0x04,0x02,0x04,0x02,0x04,0x01,0xF8,0x00,0x00,0x00,0x00,


/*--  文字:  技  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x10,0x40,0x10,0x40,0x10,0x40,0x10,0x70,0x1D,0xC0,0x70,0x40,0x10,0x70,0x19,0x90,
0x30,0x20,0xD1,0x20,0x10,0xC0,0x11,0x20,0x36,0x18,0x10,0x0E,0x00,0x00,0x00,0x00,


/*--  文字:  术  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x02,0x00,0x02,0x20,0x02,0x10,0x02,0x00,0x03,0xE0,0x3E,0x00,0x03,0x00,0x06,0x80,
0x0A,0x40,0x12,0x20,0x22,0x18,0x42,0x0E,0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,


/*--  文字:  公  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x03,0x00,0x00,0x80,0x08,0x80,0x08,0x40,0x10,0x20,0x10,0x18,0x22,0x0E,
0x42,0x00,0x84,0x80,0x08,0x40,0x11,0xE0,0x1E,0x20,0x00,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  司  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x01,0xF0,0x0E,0x10,0x00,0x10,0x07,0x10,0x18,0x10,0x03,0x10,0x3D,0x10,
0x21,0x10,0x23,0x10,0x1C,0x10,0x00,0x10,0x00,0x50,0x00,0x20,0x00,0x00,0x00,0x00,


/*--  文字:  液  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x80,0x00,0x40,0x30,0x00,0x10,0xF0,0x07,0x00,0x62,0x40,0x22,0x70,0x04,0x90,
0x2D,0x50,0x34,0xA0,0x24,0x40,0x44,0xB0,0x47,0x1E,0x04,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  晶  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x01,0xC0,0x06,0x40,0x04,0x40,0x07,0x40,0x04,0x40,0x07,0xC0,0x00,0x00,0x00,0x78,
0x3C,0x88,0x24,0x88,0x34,0xE8,0x24,0x88,0x3C,0xF8,0x24,0x88,0x00,0x00,0x00,0x00,


/*--  文字:  显  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x01,0xE0,0x1E,0x20,0x11,0xA0,0x0E,0x20,0x09,0xC0,0x0E,0x00,0x04,0x90,
0x04,0x90,0x24,0xA0,0x14,0xC0,0x04,0x80,0x07,0xFC,0xF8,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  示  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x60,0x0F,0x80,0x00,0x00,0x00,0x00,0x00,0xFC,0x7F,0x00,0x01,0x00,
0x11,0x20,0x11,0x18,0x31,0x08,0x21,0x00,0x03,0x00,0x01,0x00,0x00,0x00,0x00,0x00,


/*--  文字:  模  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x10,0x10,0x90,0x10,0xFE,0x11,0x90,0x1C,0x78,0x71,0x88,0x11,0x68,0x19,0x08,
0x34,0xF0,0x50,0x4E,0x93,0xF0,0x10,0x60,0x10,0x90,0x11,0x08,0x16,0x06,0x00,0x00,


/*--  文字:  块  --*/
/*--  楷体_GB231212;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x10,0x80,0x10,0x80,0x10,0x80,0x10,0xF0,0x1B,0x90,0x70,0xA0,0x10,0xFC,
0x1B,0x80,0x30,0x80,0xC1,0x40,0x02,0x20,0x04,0x18,0x18,0x0E,0x00,0x00,0x00,0x00,


};


/********* 时间延时程序 *********/
void delay(uint t)   /* 1.02500 ms */
{ uint i,j;
  for(i=t;i>0;i--)
    for(j=125;j>0;j--);
}


#ifdef UART
/******** Uart初始化 ********/
void UART_init(void)
{
  SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
  TMOD = 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
  PCON = 0x00 ; //SMOD=0;
  TH1 = 0xFD ; //Baud:9600 fosc=11.0592MHz
  TL1 = 0xFD ;
  IE  = 0x90 ; //Enable Serial Interrupt
  TR1 = 1 ; // timer 1 run
  EA=1;  //使能全局中断
  ES=1; //允许UART中断  
}


/******** 向Uart口发送一个字符 ********/ 
void write(uchar ch)

  while(BUSY==1);
  SBUF=ch;
  while (TI== 0 );
  TI= 0 ;   
}
#endif
  
#ifdef UART_emulate
/********* 计数器初始化 ********/
void S2INI(void)

  TMOD=0x02;  //计数器0,方式2
  TH0=0xa0;  //晶振X=11.0592MHz,指令周期 S=(1000000/9600)/(12/X)=96 ,故计数初值为256-S=160=0xA0 
  TL0=TH0;        
  TR0=1;  //开始计数 
  TF0=0;
}


/******** 查询计数器溢出标志位 ********/
void WaitTF0(void)
{ while(!TF0);
  TF0=0;
}


/******** 向Uart口发送一个字符 ********/ 
void write(uchar ch)

  uchar i;
  while(BUSY==1);
  TR0=1;   
  txd=(bit)0; //起始位
  WaitTF0();     
  for(i=0;i<8;i++)  //8bit数据,先传低位
   { txd=(bit)(ch&0x01);  
     WaitTF0();
     ch=ch>>1;
   }         
  txd=(bit)1;  //停止位
  WaitTF0();
  TR0=0;       

#endif




/******** 清屏显示程序 ********/
void clr(void)

  write(0x58);      
}


/******** 字符显示程序 ********/
void chhzes(uchar x,uchar y,uchar m,uchar n,uchar k,uchar rev,uchar *s)

  uchar i;
  uint j;
  write(0x5A); 
  write(x);  //垂直地址
  write(y);  //水平地址
  write(m);  //字符垂直点行数
  write(n);  //字符水平点列数
  write(k);  //字符个数
  write(rev);  //rev=0:正常显示;rev=1:反白显示


  for(i=0;i<k;i++)
    for(j=0;j<(n+7)/8*m;j++)
      write(*s++); 
}//*/


/******** 自带字符显示程序 ********/
void INTER_chhzes(uchar x,uchar y,uchar m,uchar n,uchar k,uchar rev,uchar *s)

  write(0x5B); 
  write(x);  //垂直地址
  write(y);  //水平地址
  write(m);  //字符垂直点行数
  write(n);  //字符水平点列数
  write(k);  //字符个数
  write(rev);  //rev=0:正常显示;rev=1:反白显示


  while(*s!='\0')
    write(*s++);
}//*/


/******** 图片显示程序 ********/
void graph(uchar x,uchar y,uchar m,uchar n,uchar *s)

  uint i;
  write(0x5D); 
  write(x);  //垂直地址
  write(y);  //水平地址
  write(m);  //图片垂直点行数
  write(n);  //图片水平点列数


  for(i=0;i<n/8*m;i++) 
    write(*s++);
}


/******** 绘点显示程序 ********/
void point(uchar x,uchar y,uchar z)

  write(0x60); 
  write(x);  //垂直地址
  write(y);  //水平地址
  write(z);  //绘点或消点
}


/******** 画任意直线显示程序 ********/
void show_line(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)

  write(0x61); 
  write(x1);  //垂直起始地址
  write(y1);  //水平起始地址
  write(x2);  //垂直结束地址
  write(y2);  //水平结束地址
  write(z);  //绘点或消点
}


/******** 画矩形方框显示程序 ********/
void block(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)

  write(0x62); 
  write(x1);  //垂直起始地址
  write(y1);  //水平起始地址
  write(x2);  //垂直结束地址
  write(y2);  //水平结束地址
  write(z);  //绘点或消点
}


/******** 画矩形方块显示程序 ********/
void matrix(uchar x1,uchar y1,uchar x2,uchar y2,uchar z)

  write(0x63); 
  write(x1);  //垂直起始地址
  write(y1);  //水平起始地址
  write(x2);  //垂直结束地址
  write(y2);  //水平结束地址
  write(z);  //绘点或消点
}


/******** 画圆显示程序 ********/
void draw_circle(uchar x,uchar y,uchar r,uchar fil,uchar z)

  write(0x64); 
  write(x);  //垂直圆心地址
  write(y);  //水平圆心地址
  write(r);  //半径
  write(fil);  //fil=0:空心圆;fil=1:实心圆
  write(z);  //绘点或消点
}


/******** 光标显示程序 ********/
void cursor(uchar x,uchar y,uchar n,uchar z)

  write(0x70); 
  write(x);  //垂直地址
  write(y);  //水平地址
  write(n);  //光标水平点列数
  write(z);  //绘点或消点
}


/******** 初始化程序 ********/
void set()

  #ifdef UART
    UART_init();  //UART串口初始化
  #endif
 
  #ifdef UART_emulate
    S2INI();  //UART模拟串口:计数器初始化
  #endif 


  delay(100);
  REST=0;
  delay(5);
  REST=1;
  delay(100);
  
  write(0x50);  //Display OFF


  write(0x52);  //Set Contrast Current
  write(0x40);   


  write(0x51);  //Display ON
  
//  clr();  //清屏
//  clr();  //清屏
//  delay(1);  //*/
}
 
/********* 主函数 *********/
void main()

  uchar i,j;       


  set();  //液晶屏初始化
  while(1)
   {
clr();  //清屏
     point(2,2,1);point(2,125,1);point(61,2,1);point(61,125,1);  //绘点
matrix(16,16,16,64,1);  //直线
matrix(32,40,56,40,1);  
matrix(24,90,40,106,1);  //方块
block(0,0,63,127,1);  //方框
delay(time);   //*/
     
     clr();  //清屏 
     draw_circle(32,100,25,0,1);  //空心圆
     draw_circle(32,100,20,1,1);  //实心圆
     matrix(8,8,55,55,1);  //方块
     delay(time);   //*/


     clr();  //清屏
     show_line(0,0,63,127,1);
     show_line(0,127,64,0,1);
     block(0,0,63,127,1);  //方框
     delay(time);   //*/


clr();  //清屏 
chhzes(0,0,16,16,8,0,CCTAB);  //清达光电技术公司 
chhzes(16,32,16,16,4,0,CCTAB+10);  //显示模块 
chhzes(32,0,16,8,8,1,CTAB+3);  //DOT12864
     chhzes(48,1,16,8,8,0,CTAB+3);  //DOT12864
     delay(time);   //*/ 


#ifdef UART 


/************** 波特率值:19200bps **************/
     write(0x53);  //Set UART BAUD Rate
     write(7);   
     delay(1);  //*/


//     SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//     TMOD = 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload  //*/
     PCON = 0x80 ; //SMOD=1;
     TH1 = 0xFD ; //Baud:19200 fosc=11.0592MHz
     TL1 = 0xFD ; 
     IE  = 0x90 ; //Enable Serial Interrupt
//     IE  = 0x90 ; //Enable Serial Interrupt
//     TR1 = 1 ; // timer 1 run
//     EA=1;  //使能全局中断
//     ES=1; //允许UART中断  //*/


clr();  //清屏 
chhzes(0,0,16,16,8,0,CCTAB);  //清达光电技术公司 
chhzes(16,32,16,16,4,0,CCTAB+10);  //显示模块 
chhzes(32,0,16,8,8,1,CTAB+3);  //DOT12864
     chhzes(48,1,16,8,8,0,CTAB+3);  //DOT12864
     delay(time);   //*/ 


/************** 波特率默认值:9600bps **************/
     write(0x53);  //Set UART BAUD Rate
     write(5); 
     delay(1);  //*/
     UART_init();  //UART串口初始化


#endif 


     for(i=0;i<64;i+=16)  //光标显示
       for(j=0;j<128;j+=16)
        { 
          cursor(i+15,j,16,1);
          delay(c_time);
          cursor(i+15,j,16,0);
        }        //*/


     block(0,0,63,127,1);  //方框 
delay(time);   //*/ 
 
     clr();  //清屏 
     INTER_chhzes(0,0,16,16,8,0,CHHZ1);
     INTER_chhzes(16,0,16,16,8,0,CHHZ2);
     INTER_chhzes(32,0,16,16,8,0,CHHZ3);
     INTER_chhzes(48,0,16,16,8,1,CHHZ4);
delay(time);    //*/


     clr();  //清屏 
     INTER_chhzes(0,0,16,8,16,0,CHHZ21);
     INTER_chhzes(16,0,16,8,16,0,CHHZ22);
     INTER_chhzes(32,0,16,8,16,0,CHHZ23);
     INTER_chhzes(48,0,16,8,16,0,CHHZ24);
     delay(time);   


     clr();  //清屏 
     INTER_chhzes(0,0,16,8,16,0,CHHZ25);
     INTER_chhzes(16,0,16,8,16,0,CHHZ26); 
     INTER_chhzes(48,0,16,8,16,0,CHHZ27);
     delay(time);    //*/


     clr();  //清屏 
     INTER_chhzes(0,0,8,8,16,0,CHHZ21);
     INTER_chhzes(8,0,8,8,16,0,CHHZ22);
     INTER_chhzes(16,0,8,8,16,0,CHHZ23);
     INTER_chhzes(24,0,8,8,16,0,CHHZ24);
     INTER_chhzes(32,0,8,8,16,0,CHHZ25);
     INTER_chhzes(40,0,8,8,16,0,CHHZ26);
     INTER_chhzes(56,0,8,8,16,0,CHHZ27);
     delay(time);    //*/
   }  
//  delay(time);*/
}



上一篇:7寸彩屏测试程序
下一篇:3.5寸彩屏测试程序