原程序:
#include <reg51.h> #include <intrins.h> #define DATA P0 sbit RS=P2^6; sbit RW=P2^5; sbit EN=P2^7; unsigned charzifu[]={"Hello,World!0"}; unsigned charwangzhi[]={"shp108408772.xxxbao*com"}; void delayms(unsigned char m) //适当延时 {unsigned char i; while(m--) { for(i=0;i<=250;i++) {_nop_(); } } } void WRITE_BYTE(unsigned char canshu) //写1个字节 { RW=0; _nop_(); _nop_(); EN=1; _nop_(); DATA=canshu; EN=0; _nop_(); _nop_(); } unsigned char READ_BYTE() //读一个字节 { unsigned char temp; RW=1; _nop_(); EN=1; _nop_(); EN=0; temp=DATA; _nop_(); return temp; } void main() { unsigned char *point; RS=0; WRITE_BYTE(1); //清屏 delayms(10); //约延时23ms WRITE_BYTE(2); //光标归位 delayms(10); WRITE_BYTE(6); // AC自动增1,屏幕不动 delayms(10); WRITE_BYTE(0x0F); //光标显示闪烁 delayms(10); WRITE_BYTE(0x14); //光标右移 delayms(10); WRITE_BYTE(0x38); //两行显示,5X7字符 delayms(10); WRITE_BYTE(0x80); //设定DDRAM地址 delayms(10); _nop_(); point=wangzhi; while(*point!='\0') //Hello,world! {RS=1; _nop_(); WRITE_BYTE(*point); point=point+1; delayms(10); if(point==wangzhi+16) {RS=0; WRITE_BYTE(0xC0); //设定DDRAM地址为下行第一个字符处 delayms(10); } } while(1); } 这是一个1602屏分两行显示Hello,world!和shp108408772.xxxbao*com字符程序,我用在了40266液晶屏上,现在第一行显示shp108408,第二行显示772.xxxbao*com,Hello,world!这些字符没有显示这正常吗?
在这个程序生如何改动可以每行显示40个字符。
请高手给予指点,谢谢!
|