完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
这是我写的12864DDRAM的程序,打同PAGE同列的点的时候新的点会把旧的点覆盖,我用读数据函数读出来之前的数据再并上现在要打的点的数据不知道为什么也没有用。求大神帮忙T T
#include #define uchar unsigned char #define uint unsigned int #define LCDLCDDisp_Off 0x3e #define LCDLCDDisp_On 0x3f #define Page_Add 0xb8//页地址 #define LCDCol_Add 0x40//列地址 #define Start_Line 0xC0//行地址 #define clear_DDRAM 0x01 #define LCD_DAT P0 /*液晶数据总线*/ ***it LCDLcs=P2^4 ; /*片选1*/ ***it LCDRcs=P2^3 ; /*片选2*/ ***it LCD_RS=P2^2 ; /*数据/指令 选择*/ ***it LCD_RW=P2^1 ; /*读/写 选择*/ ***it LCD_E=P2^0 ; /*读/写 使能*/ void LCDdelay(unsigned int t) { unsigned int i,j; for(i=0;i } uchar read_state() { uchar sta; LCD_RS=0; //状态 LCD_RW=1; //写 LCD_E=0; LCDdelay(2); LCD_E=1; sta=LCD_DAT; LCD_E=0; return sta; } void check_state() { while(read_state() & 0x80); } uchar read_dat() { uchar dat; check_state(); LCD_RS=1; //数据 LCD_RW=1; //读 LCD_E=0; LCDdelay(2); dat=LCD_DAT; LCD_E=1; LCDdelay(2); LCD_E=0; return dat; } void write_com(unsigned char cmdcode) { check_state();//检测LCD是否忙 LCD_RS=0; LCD_RW=0; P1=cmdcode; LCDdelay(2); LCD_E=1; LCDdelay(2); LCD_E=0; } void write_data(unsigned char LCDDispdata) { check_state();//检测LCD是否忙 LCD_RS=1; LCD_RW=0; P1=LCDDispdata; LCDdelay(2); LCD_E=1; LCDdelay(2); LCD_E=0; } void init_lcd() { // LCDdelay(100); //LCDLcs=1;//刚开始关闭两屏 //LCDRcs=1; // LCDdelay(100); write_com(LCDLCDDisp_Off); write_com(0x01); //写初始化命令 write_com(Page_Add+0); // write_com(Start_Line+0); write_com(LCDCol_Add+0); write_com(LCDLCDDisp_On); } void Clr_Scr() { uchar i,j; LCDLcs=0; LCDRcs=0; for(i=0;i<8;i++) { write_com(Page_Add+i); for(j=0;j<64;j++) { write_com(LCDCol_Add+j); write_data(0x00); } } } void dadian(uchar x,uchar y) { uchar page,col,yu,dat_,_dat; if(x>=64) { LCDLcs=1; LCDRcs=0; col=x-64; } else { LCDLcs=0; LCDRcs=1; col=x; } page=y/8; yu=y%8; switch(yu) { case 0: dat_=0x01; break; case 1: dat_=0x02; break; case 2: dat_=0x04; break; case 3: dat_=0x08; break; case 4: dat_=0x10; break; case 5: dat_=0x20; break; case 6: dat_=0x40; break; case 7: dat_=0x80; break; } write_com(Page_Add+page); write_com(LCDCol_Add+col); _dat=read_dat(); write_com(Page_Add+page); write_com(LCDCol_Add+col); write_data(_dat|dat_); } void main() { uchar lie=0; uchar k=0xc0; init_lcd(); Clr_Scr(); dadian(1,7); //不知道为什么如果是同一page同一列里面的两个点会覆盖 我用了读操作 dadian(1,1); //这一排和上面那一排的点会覆盖 dadian(50,7); dadian(60,1); while(1); } |
|
相关推荐
1个回答
|
|
读操作多写一次试试
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
690 浏览 0 评论
735 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
624 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1099 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1092 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11793 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 04:47 , Processed in 0.489392 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号