HGS128321并口8080例程

发布时间:2020/8/14 16:08:23

#include "sys.h"   
#include "lcd.h"
#include "delay.h"


/******** 写指令 ********/
void write_com(u8 com)
{   
  CS=0;
  RS=0;
  RD=1;
  DATAOUT(com);
  WR=0;
  WR=1;
  CS=1;
}


/******** 写数据********/
void write_data(u8 data)
{
  CS=0;
  RS=1;
  RD=1;
  DATAOUT(data);
  WR=0;
  WR=1;
  CS=1; 
}


/******** 读“数据”程序 ********/
u8 read_data(void) 

  u8 temp;    
  GPIOB->CRL=0X88888888;  //PDB-7  上拉输入
  GPIOB->ODR=0XFFFF;      //全部输出高


  CS=0;
  RS=1;
  WR=1;
  RD=0;
  temp=DATAIN; 
  RD=1;
  CS=1;


  GPIOB->CRL=0X33333333;  //PB0-7  通用推挽输出
  GPIOB->ODR=0XFFFF;      //全部输出高  


  return temp;
}




/******** 地址设置 ********/
void address(u8 page,u8 col)
{
  col=col+4;
  write_com(0xb0|page);  //Set Page Start Address 
  write_com(0x00|(col&0x0f));  //Set Column Start Address LSB 
  write_com(0x10|((col>>4)&0x0f));  //Set Column Start Address 
}


/******** 全屏显示*******/
void fill(u8 dat)

  u8 i,j; 
  for(i=0;i<HD/8;i++)
   {
     address(i,0);
     for(j=0;j<WD;j++)
       write_data(dat); 
   }
}


/******** 隔列显示 ********/
void fill_2(u8 dat1,u8 dat2)

  u8 i,j;
  for(i=0;i<HD/8;i++)
   {
     address(i,0);
     for(j=0;j<WD;j++)
       {
  if(j%2==0)
         write_data(dat1); 
       else
         write_data(dat2); 
}
   }
}


/******** 字符显示程序********/
void chhzes(u8 x,u8 y,u8 m,u8 n,u8 kk,u8 *s)  

  u8 i,j,k,sum=0;
  for(k=y;k<WD&&sum<kk;k+=n,sum++)
   { 
       for(i=0;i<m/8;i++)
      { 
        address(x+i,k);
        for(j=0;j<n;j++)
        write_data(*s++); 
       } 
   }
}




/******** 绘点显示程序 ********/
/**** x:0-HD; y:0-WD ****/ 
void point(u8 x,u8 y,u8 z)

  u8 temp1,temp2,dat; 
  temp1=x/8;
  temp2=x%8;
  temp2=0x01<<temp2;
  address(temp1,y);  //地址
  dat=read_data();  //Dummy Read
  dat=read_data();
  if(z==1) //置‘1’ 
    dat=temp2|dat;
  else //置‘0’ 
    dat=~temp2&dat;
  address(temp1,y);  //地址
  write_data(dat);
}




/******** 画矩形方块显示程序 ********/
void matrix(u8 x1,u8 y1,u8 x2,u8 y2,u8 z)
{ u8 i,j;
  for(i=x1;i<=x2;i++)
    for(j=y1;j<=y2;j++)
      point(i,j,z);
}




/******** 画矩形方框显示程序 ********/
void block(u8 x1,u8 y1,u8 x2,u8 y2,u8 z)
{   
  matrix(x1,y1,x2,y1,z);  //左边框  
  matrix(x1,y2,x2,y2,z);  //右边框 
  matrix(x1,y1,x1,y2,z);  //上边框 
  matrix(x2,y1,x2,y2,z);  //下边框 
}






void reset(void)
{
  RCC->APB2ENR|=1<<3;  //使能外设PORTB时钟
  RCC->APB2ENR|=1<<4;  //使能外设PORTC时钟
  RCC->APB2ENR|=1<<0;    //开启辅助时钟

JTAG_Set(JTAG_SWD_DISABLE);  //关闭SWD,JTAG

GPIOC->CRL&=0X00000000;//清端口
GPIOC->CRL|=0X33333333;//PC0-PC7 推挽输出
GPIOC->ODR|=0x00FF;    //PC0-PC7 输出高 

  GPIOB->CRL&=0X00000000;//清端口PORTB0~7
  GPIOB->CRL|=0X33333333;//PORTB0~7为通用推挽输出,速度50MHz   
  GPIOB->ODR=0X00FF;  //全部输出高   //*/
 

delay_ms(15);
RST=0;
  delay_ms(50);
  RST=1;
delay_ms(50);
}




void LCD_Init(void)
{


reset();//复位 

write_com(0xae);//关显示


write_com(0xd5);//设定显示频率
write_com(0x10);


write_com(0xa8);//设定占空比
write_com(0x1f);// 1/32DUTY


write_com(0xd3);//设定显示范围 COM
write_com(0x00);


write_com(0x40);//起始行


write_com(0xad);//外部dc-dc
write_com(0x8e);


write_com(0xd8);//外部dc-dc
write_com(0x05);


//write_com(0x20);//内存地址模式:页方式
//write_com(0x02);


write_com(0xa1);//seg方向 132-0
write_com(0xc8);//com方向 63-0


write_com(0xda);//Set COM Pins Hardware Configuration
write_com(0x12);


write_com(0x81);//对比度调节
write_com(0x80);//对比度为中


write_com(0xd9);
write_com(0xd2);


write_com(0xdb);//倍压调节
write_com(0x08);//0.77 x VCC (RESET)


write_com(0xa4);//Entire Display ON


write_com(0xa6);//Normal display


fill(0x00);


write_com(0xaf);//开显示

}












上一篇:2.8寸彩屏测试程序
下一篇:HGO2401603基于STM8单片机测试程序