完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
谁能看看程序哪错了,怎么仿真LCD1602没反应?
//******************************// //******************************// #include #define uchar unsigned char #define uint unsigned int uchar table[]={"X:"}; uchar table1[]={"Y:"}; ***it en=P2^2;//使能端 en为低电平时液晶屏开始执行命令。 ***it rs=P2^0;//数据命令选择端 RS寄存器选择,RS=1数据寄存器,RS=0指令寄存器 uchar num,num1,x1,y1; uint d=0,h=0,d1=0,h1=0; /********************************************************************/ void delay(uint n)//延时程序 { while(n>0) n--; } void write_com(uchar com) //液晶写命令程序 { rs=0;//等0输入是命令 en=0;//液晶使能信号初始化 P0=com;//把com参数,液晶的命令值送到P0口 delay(100);//延时,按照液晶时序图要的要求 en=1;//使能信号,0到1表示上升沿打开可以写命令数据到液晶里 delay(100); en=0;//使能信号恢复0 } void write_data(uchar date) //液晶写数据程序 { rs=1; //等1表示输入是数据 en=0; P0=date; //把date参数,液晶的数据送到P0口; delay(100); en=1; delay(100); en=0; } void init() //液晶初始化程序 { en=0; write_com(0x38); //0x38是按照液晶文档说明写 0011 1000 显示模式设置:设置为16*2显示,5*7点阵,8位数据接口 write_com(0x0c); //0000 1100 显示开关及光标设置,开显示,不显示光标,光标不闪烁 write_com(0x06); //0000 0110 输入模式设置,光标右移,文字不移动 write_com(0x01); //0000 0001 液晶全清屏指令 } /*********************************************************/ //------------------------- void Readtemp(void) //读x1,y1程序 { d=x1; //坐标x1的低8位数据函数 h=x1; //坐标x1的高8位数据函数 d1=y1; //坐标y1的低8位数据函数 h1=y1; //坐标y1的高8位数据函数 } /*********************************************************/ void convertx() //坐标处理程序,把坐标x值转换位液晶显示 { uint temp,tmp; float tt; tmp=d; //低8位数据给tmp temp=h; //高8位数据给temp temp<<=8; //高8位左移8位 temp|=d; //高低位数据或起来再赋给temp if((h&0x80)!=0) //高8位h&10000000是否等0,不等0表示是负多少度 { table[7]='-'; //把-赋给液晶数组的第8个元素,表示-号在第8位,1602液晶一行有16个字符 temp=temp-1; temp=~temp; } else table[7]='+'; temp>>=4; table[8]=(temp/100)+'0'; //液晶第9位字符为坐标的百位数,例如120度的1 table[9]=((temp/10)%10)+'0'; //液晶的第10位字符为坐标的十位,例如2 table[10]=(temp%10)+'0'; //液晶的第11位字符为坐标的个位,例如0 tmp=tmp&0x0f; //坐标提取小数数据 tt=tmp*0.0625; //小数部分数据转换 table[11]='.'; //显示小数点 table[12]=((uchar)(tt*10))%10+'0'; //小数点后面的小数数字 } /**************************************************************/ void converty() //坐标处理程序,把坐标y值转换位液晶显示 { uint temp,tmp; float tt; tmp=d1; //低8位数据给tmp temp=h1; //高8位数据给temp temp<<=8; //高8位左移8位 temp|=d1; //高低位数据或起来再赋给temp if((h&0x80)!=0) //高8位h&10000000是否等0,不等0表示是负多少度 { table1[7]='-'; //把-赋给液晶数组的第8个元素,表示-号在第8位,1602液晶一行有16个字符 temp=temp-1; temp=~temp; } else table1[7]='+'; temp>>=4; table1[8]=(temp/100)+'0'; //液晶第9位字符为坐标的百位数,例如120度的1 table1[9]=((temp/10)%10)+'0'; //液晶的第10位字符为坐标的十位,例如2 table1[10]=(temp%10)+'0'; //液晶的第11位字符为坐标的个位,例如0 tmp=tmp&0x0f; //坐标提取小数数据 tt=tmp*0.0625; //小数部分数据转换 table1[11]='.'; //显示小数点 table1[12]=((uchar)(tt*10))%10+'0'; //小数点后面的小数数字 } void main() { x1=0xb5; y1=0xb2; init(); //液晶初始化函数 Readtemp(); converty(); write_com(0x80+0x40); //0x80+0x40表示液晶的第二行的开始地址 for(num1=0;num1<16;num1++) //num<16,16表示显示16位 { write_data(table1[num1]); //液晶需要显示的内容, } convertx(); write_com(0x80); //液晶的第一行开始地址 for(num=0;num<16;num++) //显示16位数据,后面的几位没有用到就不写到16,以免后面的几位会出现一个随机数据显示乱码 { write_data(table1[num]); //液晶需要显示的内容 } }
|
|
相关推荐
2个回答
|
|
RW拉低或者直接接地。(如果你不用读的功能话)
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
4999 浏览 3 评论
6295 浏览 1 评论
6557 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
8307 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1248 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-3 14:55 , Processed in 0.638577 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号