OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4487|回复: 0

屏幕显示问题

[复制链接]

154

主题

263

帖子

0

精华

高级会员

Rank: 4

积分
902
金钱
902
注册时间
2012-6-29
在线时间
39 小时
发表于 2013-4-26 13:15:00 | 显示全部楼层 |阅读模式

 STM32显示的时候显示一两点显示不出来  但显示图案的时候可以显示  但显示出来图案所在列(整列)带有很明显的阴影并且显示出来的点有点暗 这是啥问题  请指教?  我用的黑白液晶屏  这个程序我在51单片机上可以正常显示  搬过来的 
我用的单片机芯片是stm32f103VEt6使用的IO口为PE口 对PE端口直接设为推挽输出      屏幕控制器是uc1608

// ********** 写指令 ****************
void SdCmd(u8 Command)
{
 D_C=0;
  delay_us(2);
 _RW=1; 
     delay_us(2);
 //_RD=0;
 
 shuju(Command); 
      delay_us(2);
 
 CS=1;      delay_us(2);
 _RW=0;
 delay_us(10);
 _RW=1; 
       delay_us(2);
 CS=0;
       delay_us(2);
}

// ********** 写数据 **************
void SdData(uchar DData)
{
 D_C=1; 
      delay_us(2);
// _RD=0;
 _RW=1;
       delay_us(2);
 shuju(DData); 
       delay_us(2);
 CS=1;
        delay_us(2);
 _RW=0;
 delay_us(10);
 _RW=1; 
        delay_us(2);
 CS=0;
           delay_us(2);
}

/// *********  模仿字符的形式显示图像 **********
// **********  显示一个字符           ***********
lcd_ShowChar_1(u8 num,int a)
{
 uint pos;

 num=num-'1';
 if(a==1)
 for(pos=0;pos<16;pos++)
 {
  SdData(cc[num][pos]); 
 }
 else if(a==0)
 for(pos=0;pos<16;pos++)
 {
  SdData(cc1[num][pos]); 
 }
 else if(a==2)
 for(pos=0;pos<16;pos++)
 {
  SdData(cc2[num][pos]); 
 }
 else if(a==3)
 for(pos=0;pos<16;pos++)
 {
  SdData(cc3[num][pos]); 
 }
 else if(a==4)
 for(pos=0;pos<8;pos++)
 {
  SdData(dianchi1[num][pos]); 
 }
 else if(a==5)
 for(pos=0;pos<8;pos++)
 {
  SdData(dianchi2[num][pos]); 
 }  
 else if(a==6)
 
 for(pos=0;pos<8;pos++)
 {
  SdData(dianchi_put[num][pos]); 
 }
 else
 for(pos=0;pos<8;pos++)
 {
  SdData(dianchi_put1[num][pos]); 
 }
}
/// *********  模仿字符的形式显示图像 **********
// *********** 在指定位置显示字符串  *********** /
void PrintASCII_1(u16 x,u16 y,const u8 *pstr,int a)
{
 u8 addr;
 switch(x)
 {
  case 0:  addr=0xb0;break;
  case 1:  addr=0xb1;break;
  case 2:  addr=0xb2;break;
  case 3:  addr=0xb3;break;
  case 4:  addr=0xb4;break;
  case 5:  addr=0xb5;break;
  case 6:  addr=0xb6;break;
  case 7:  addr=0xb7;break;
  case 8:  addr=0xb8;break;
  case 9:  addr=0xb9;break;
  case 10: addr=0xba;break;
  case 11: addr=0xbb;break;
  case 12: addr=0xbc;break;
  case 13: addr=0xbd;break;
  case 14: addr=0xbe;break;
  case 15: addr=0xbf;break;
 }
 SdCmd(addr);
 SdCmd(y&0x0f);
 SdCmd((y>>4)|0x10);
 while(*pstr!='\0')
 {
  lcd_ShowChar_1(*pstr,a);

  pstr++;
 }
}
lcd_init()
{
lcd_zhiling()

//并行通讯 8位
     BM1=1;
      BM0=0;

  _RST=1;
  delay_ms(100);
  _RST=0;
  delay_ms(100);
  _RST=1;
  delay_ms(800);
  CS=1;
   SdCmd(0xE2);   /* System reset*/
  
   delay_us(10);
  
   SdCmd(0xEB);   /* Set lcd bias ratio: 111010_10 */
   SdCmd(0x25);   /* Set mux rate and temperature compensation*/
   SdCmd(0x81);
   SdCmd(0xA5);   /* Set gain and potentiometer 1_01_00101 */
   SdCmd(0x2F);   /* Set power control 00101_1_11 */
   SdCmd(0xAF);   /* Display Enable:    1010111_1 */

   delay_us(10);
                   
   SdCmd(0x40);   /* Set start line:      01_000000     */
   SdCmd(0xA4);   /* Set all pixel on:    1010010_DC[1] */
   SdCmd(0xA6);   /* Set inverse display: 1010011_DC[0] */
   SdCmd(0x89);   /* Set ram address control: 10001_001 */
   SdCmd(0xC8);   /* Set lcd mapping control: 1100_1_0__0 */


}
}
//主函数
int main()
{
lcd_config();  //端口配置  IO口配为输出
lcd_init();    //初始化
clear_ram(); //清屏
 while(1)
 {
  
  rintASCII_1(6,120,"123",4);
  rintASCII_1(7,120,"123",5);
}
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-20 22:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表