完善资料让更多小伙伴认识你,还能领取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 for(j=0;j<10;j++); } 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); } |
|
相关推荐
5个回答
|
|
你先预读一便数据试试,在_dat=read_dat();之前加read_dat();
|
|
|
|
|
|
|
|
uchar 换uint 试试或unlong
|
|
|
|
肯定会覆盖,对同一个位置写7又写1,要保住刚才打的点,要将两个数进行位运算才行!
|
|
|
|
没有形参 仔细检查检查
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
787 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
1476 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1216 浏览 0 评论
900 浏览 0 评论
963 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11866 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-4 08:24 , Processed in 0.959902 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号