请教:12864画点出现杂点的问题(ST7920控制芯片)

2020-01-27 11:33发布

画四个点速度很慢,并且出现原理程序里写的点,请各位帮我分析下程序,不胜感激!!!
#include<reg52.h>
#include<stdlib.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int



sbit LCD_RS=P3^0;//存储器选择输入
sbit LCD_RW=P3^1;//液晶读写控制
sbit LCD_EN=P3^2;//液晶使能控制
sbit LCD_PSB=P3^3;//串并方式控制
sbit RST=P3^4;

#define LCD_BUS P2


void delay_1ms(int x)
{
uint i,j;
for(j=0;j<x;j++)
   for(i=0;i<80;i++);
}
/*写指令到LCD*/
/*RS=L,RW=L,E=H脉冲,D0--D7=指令码。*/
void Send_Cmd(uchar cmd)
{
   LCD_RS=0;
   LCD_RW=0;
   LCD_EN=0;
   LCD_BUS=cmd;
   delay_1ms(2);
   LCD_EN=1;
   delay_1ms(2);
   LCD_EN=0;
}


/*写数据到LCD*/
/*RS=H,RW=L,E=H脉冲,D0--D7=指令码。*/

void Send_Data(uchar dat)
{
   LCD_RS=1;
   LCD_RW=0;
   LCD_EN=0;
   LCD_BUS=dat;
   delay_1ms(2);
   LCD_EN=1;
   delay_1ms(2);
   LCD_EN=0;
}

/*LCD初始化*/
void Lcd_Init()
{
   RST=0;
   delay_1ms(20);
   RST=1;
   delay_1ms(500);
   LCD_PSB=1;//并口方式
   Send_Cmd(0x30);//基本操作
   delay_1ms(2);
   Send_Cmd(0x0c);//开显示,关光标
   delay_1ms(2);
   Send_Cmd(0x01);//清屏
   delay_1ms(2);
}


void CheckBusy( void )          //忙检测函数
{
    uint nTimeOut = 0 ;
        LCD_BUS= 0x80 ;
        LCD_RW=1;
        LCD_RS=0;
        LCD_EN=0;
        LCD_EN=1;
        while( ( LCD_BUS== 0x80 ) && ( ++nTimeOut != 0 ) ) ;
        LCD_EN=0;
}

// 数据读函数
uchar RdData()
{
    uchar DData;
    CheckBusy();
    LCD_RW = 1;
    LCD_RS=1;
    LCD_BUS=0xff;
    LCD_EN = 1;
    DData = LCD_BUS;
    LCD_EN = 0;
    return(DData);
}

void Draw_Dot(uint x,y)
//(x,y) 绘点位置坐标,x,y均以像素点为单位
{
  uchar m,n;
  uint k;
if(y>=32)                  // 如果y>32,则修改地址
   {
    y=y-32;
    x=x+128;
    }
  Send_Cmd(y|0x80);            // 设置垂直地址
  k=x/16;                   // 计算x的地址(字单位)
  Send_Cmd(k|0x80);            // 设置水平地址
  k=0x8000;
  k=k>>x%16;
  m=RdData();               // 空读
  m=RdData()|k>>8;          // 读第一字节
  n=RdData()|k;             // 读第二字节
  k=x/16;
  Send_Cmd(y|0x80);            // 设置垂直地址
  Send_Cmd(k|0x80);            // 设置水平地址
  Send_Data(m);                // 写入第一字节
  Send_Data(n);                // 写入第二字节
}

void main()
{
       Lcd_Init();
               
             Send_Cmd(0x01);
       delay_1ms(5);
        Send_Cmd(0x34);
        Send_Cmd(0x36);
            Draw_Dot(6,3);
        Draw_Dot(7,3);
        Draw_Dot(6,4);
        Draw_Dot(7,4);
while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。