画四个点速度很慢,并且出现原理程序里写的点,请各位帮我分析下程序,不胜感激!!!
#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);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>