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);
}
}
|