- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I如何在上任意画点
关于12864的画图功能。
我们知道在纸上画出一个点,我们要知道这个点在张纸上面的位置,也就是这个点在这张纸上面的坐标。而在12864上面画点也是一样,我们要先知道这个点在液晶屏上面的坐标,然后我们该坐标点黑或是点白可以了。而在这之前,我们要首先理解12864图形显示坐标。
12864的绘图显示坐标如图所示:
需要注意的是它的水平位址并不是一个点有一个位址的,它是16个格才有一个位址。它的垂直位址也分为上下两半部分。当我们给出位址是X是0,Y是0的时候,其实里面包含了16个点,也就是说我们一次要操作16个点。所有当我们要点亮一个点的时候,我们不仅要知道的位址,还要知道它在这个位址中是第几个位,也就是第几个点。
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
sbit RS=P2^6; //这个是LCD的数据命令选择端
sbit RW=P2^5; //这个是LCD的写入或是读出选择端
sbit PSB=P3^2; //这个是LCD串行还是并行选择端
sbit RST=P3^4; //这个是LCD的复位端口
sbit LCDE=P2^7; // 这个是LCD的使能端
/*
延时子函数
*/
void delay(uint x)
{
uint y;
for(;x0;x--)
for(y=110;y0;y--);
}
/*
忙碌检查
*/
void lcd_busy()
{
RS=0;
RW=1;
P0=0XFF;
LCDE=1;
delay(2);
while((P00x80)==0x80);
/*如下图1,当LCD忙碌的时候BF位是为1,而我们只需要想知道这位,所有与上0x80,当它是1的时候得到0X80,当它是0的时候得到0.*/
LCDE=0;
}
/*
写入命令
*/
void write_com(uchar com)
{
lcd_busy();
/*每次操作LCD之前都需要检查一次LCD是否忙碌,不过一般LCD工作比单片机快,所有都不用检查。*/
RS=0;
RW=0;
LCDE=0;
P0=com;
delay(1);
LCDE=1;
delay(3);
LCDE=0;
}
/*
写入数据
*/
void write_num(uchar num)
{
lcd_busy();
RS=1;
RW=0;
LCDE=0;
P0=num;
delay(1);
LCDE=1;
delay(3);
LCDE=0;
}
/*
读取数据
*/
uchar read_data()
{
uchar read;
lcd_busy();
RS=1;
RW=1;
LCDE=0;
delay(1);
LCDE=1;
delay(3);
read=P0;
LCDE=0;
delay(5);;
return read;
}
/*
画图清屏,由于LCD的清屏指令0X01不能作用在绘图中,所有只能自己写清屏子程序
*/
void clear_lcd()
{
uchar i,j;
write_com(0x34);
for(i=0;i32;i++) //因为LCD有纵坐标32格所以写三十二次
{
write_com(0x80+i); //先写入纵坐标Y的值
write_com(0x80); //再写入横坐标X的值
for(j=0;j32;j++) //横坐标有16位,每位写入两个字节的的数据,也就写入32次
{ //因为当写入两个字节之后横坐标会自动加1,所以就不用再次写入地址了。
write_num(0x00);
}
}
write_com(0x36);
write_com(0x30);
}
/*
写入一个点的子程序。具体步骤是:计算出X轴、Y轴的地址、X轴中的第几位,然后读出该地址现在的值,因为一般写入新的点的时候,会覆盖掉16个点中其他点,当你要同时显示16个点中的两个点的时候就会冲突,所以先将显示中的点读出来,然后在或上要点亮的点,这样就可以同时点亮。注意读取数据的时候读取的第一个数据不要,从第二数据开始取,也就是说要读取三次,只取后面两次的值。还有就是读取数据之前要先写入你要读取数据的地址,读取数据之后的写入数据还要从新写入地址。最后就是输入数据地址,先输入Y轴,再输入X轴,输入数据。
*/
void put_point(uchar x,uchar y)
{
uint bt=0,read=0;
uchar x_adr,y_adr,h_bit,l_bit;
y_adr=
文档评论(0)