12684打点程序
时间:10-02
整理:3721RD
点击:
打点的路径自己设定
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^1; //寄存器选择输入
sbit rw=P1^5; //液晶读/写控制
sbit en=P1^6; //液晶使能端控制
sbit psb=P2^0; //串/并方式控制
sbit rst=P1^7; //复位
sbit wela=P2^6;
sbit dula=P2^7;
sbit k1=P3^2; //上移
sbit k2=P3^3; //下移
#define LcdData P0 //液晶数据端口
//延时函数
void delayms(unsigned int n)
{
unsigned char i;
for(;n>0;n--)
for(i=0;i<100;i++);
}
//液晶检测忙状态
void check_busy(void)
{
rs=0;
rw=1;
en=1;
LcdData=0xff;
while((LcdData&0x80)==0x80);
en=0;
}
//写入指令代码
void Lcd_WriteCmd(unsigned char Cmd)
{
check_busy();
rs=0;
rw=0;
en=1;
LcdData=Cmd;
_nop_();
en=0;
}
//写入数据
void Lcd_WriteData(unsigned char Data)
{
check_busy();
rs=1;
rw=0;
en=1;
LcdData=Data;
_nop_();
en=0;
}
//读数据
unsigned char Lcd_ReadData(void)
{
unsigned char temp;
check_busy();
LcdData=0xff;
rs=1;
rw=1;
en=0;
en=1;
temp=LcdData;
en=0;
return temp;
}
//清除内存
void ClrGDARM(void)
{
unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
Lcd_WriteCmd(0x34);
Lcd_WriteCmd(y+0x80);
Lcd_WriteCmd(x+0x80);
Lcd_WriteCmd(0x30);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
}
}
//初始化函数
void Lcd_Init(void)
{
wela=0;
dula=0;
Lcd_WriteCmd(0x30);//选择基本指令集
delayms(50);
Lcd_WriteCmd(0x01);//来显示(无游标,不泛白)
delayms(50);
Lcd_WriteCmd(0x06);//清除指令
delayms(50);
Lcd_WriteCmd(0x0c);//指定在资料的读取及写入时
ClrGDARM();
psb=1;
}
//画点,打点位置(x0,y0)colour=1,点亮,colour
void drawPoint(uchar x,uchar y,uchar colour)
{
unsigned char row,collum,cbite; //行列
unsigned char tempH,tempL; //定义两个临时变量,用于存放读出来的数据
Lcd_WriteCmd(0x34);
Lcd_WriteCmd(0x36);
collum=x>>4;
cbite=x&0x0f;
if(y<32)
row=y;
else
{
row=y-32;
collum+=8;
}
Lcd_WriteCmd(0x80+row);
Lcd_WriteCmd(0x80+collum);
Lcd_ReadData();
tempH=Lcd_ReadData();
tempL=Lcd_ReadData();
Lcd_WriteCmd(0x80+row);
Lcd_WriteCmd(0x80+collum);
if(colour)
{
if(cbite<8)
{
tempH|=(1<<(7-cbite));
}
else
{
tempL|=(1<<(15-cbite));
}
}
else
{
if(cbite<8)
{
tempH&=(1<<(7-cbite));
}
else
{
tempL&=(1<<(15-cbite));
}
}
Lcd_WriteData(tempH);
Lcd_WriteData(tempL);
Lcd_WriteCmd(0x30);
}
void main()
{
unsigned x=0,y=0;
Lcd_Init();
while(1)
{
if(k1==0)
{
y++;
x=0;
drawPoint(x,y,1);
while(k1==0);
}
if(k2==0)
{
y=63;
x++;
drawPoint(x,y,1);
while(k2==0);
}
if(x>127)
{
x=0;
}
}
}
#include<reg52.h>
#include<math.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P2^1; //寄存器选择输入
sbit rw=P1^5; //液晶读/写控制
sbit en=P1^6; //液晶使能端控制
sbit psb=P2^0; //串/并方式控制
sbit rst=P1^7; //复位
sbit wela=P2^6;
sbit dula=P2^7;
sbit k1=P3^2; //上移
sbit k2=P3^3; //下移
#define LcdData P0 //液晶数据端口
//延时函数
void delayms(unsigned int n)
{
unsigned char i;
for(;n>0;n--)
for(i=0;i<100;i++);
}
//液晶检测忙状态
void check_busy(void)
{
rs=0;
rw=1;
en=1;
LcdData=0xff;
while((LcdData&0x80)==0x80);
en=0;
}
//写入指令代码
void Lcd_WriteCmd(unsigned char Cmd)
{
check_busy();
rs=0;
rw=0;
en=1;
LcdData=Cmd;
_nop_();
en=0;
}
//写入数据
void Lcd_WriteData(unsigned char Data)
{
check_busy();
rs=1;
rw=0;
en=1;
LcdData=Data;
_nop_();
en=0;
}
//读数据
unsigned char Lcd_ReadData(void)
{
unsigned char temp;
check_busy();
LcdData=0xff;
rs=1;
rw=1;
en=0;
en=1;
temp=LcdData;
en=0;
return temp;
}
//清除内存
void ClrGDARM(void)
{
unsigned char x,y;
for(y=0;y<64;y++)
for(x=0;x<16;x++)
{
Lcd_WriteCmd(0x34);
Lcd_WriteCmd(y+0x80);
Lcd_WriteCmd(x+0x80);
Lcd_WriteCmd(0x30);
Lcd_WriteData(0x00);
Lcd_WriteData(0x00);
}
}
//初始化函数
void Lcd_Init(void)
{
wela=0;
dula=0;
Lcd_WriteCmd(0x30);//选择基本指令集
delayms(50);
Lcd_WriteCmd(0x01);//来显示(无游标,不泛白)
delayms(50);
Lcd_WriteCmd(0x06);//清除指令
delayms(50);
Lcd_WriteCmd(0x0c);//指定在资料的读取及写入时
ClrGDARM();
psb=1;
}
//画点,打点位置(x0,y0)colour=1,点亮,colour
void drawPoint(uchar x,uchar y,uchar colour)
{
unsigned char row,collum,cbite; //行列
unsigned char tempH,tempL; //定义两个临时变量,用于存放读出来的数据
Lcd_WriteCmd(0x34);
Lcd_WriteCmd(0x36);
collum=x>>4;
cbite=x&0x0f;
if(y<32)
row=y;
else
{
row=y-32;
collum+=8;
}
Lcd_WriteCmd(0x80+row);
Lcd_WriteCmd(0x80+collum);
Lcd_ReadData();
tempH=Lcd_ReadData();
tempL=Lcd_ReadData();
Lcd_WriteCmd(0x80+row);
Lcd_WriteCmd(0x80+collum);
if(colour)
{
if(cbite<8)
{
tempH|=(1<<(7-cbite));
}
else
{
tempL|=(1<<(15-cbite));
}
}
else
{
if(cbite<8)
{
tempH&=(1<<(7-cbite));
}
else
{
tempL&=(1<<(15-cbite));
}
}
Lcd_WriteData(tempH);
Lcd_WriteData(tempL);
Lcd_WriteCmd(0x30);
}
void main()
{
unsigned x=0,y=0;
Lcd_Init();
while(1)
{
if(k1==0)
{
y++;
x=0;
drawPoint(x,y,1);
while(k1==0);
}
if(k2==0)
{
y=63;
x++;
drawPoint(x,y,1);
while(k2==0);
}
if(x>127)
{
x=0;
}
}
}
MARK,这个东西有用,记得当初自己也弄过的
学习中,同乐互助,共同进步。
学习中,同乐互助,共同进步。
谢谢!正需要!
我一直ucGUI的时候就需要两个函数:打点和读取某点像素值,这个真心难搞,高了两天才完成
准备升级中·····
