原创 我的1602程序,有很多不完善之处,请大家多指教~~~

2008-6-8 14:37 1899 6 7 分类: MCU/ 嵌入式

#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define Port P1
sbit RS="P2"^0;
sbit RW="P2"^1;
sbit E="P2"^2;
uchar Read();
uchar code str0[]={"Come on China!"};   /*定义数组*/
uchar code str1[]={"I Love You!"};
/*延时子函数*/
void delay(uint k)
{
  uint i,j;
  for(i=0;i  {
    for(j=0;j<60;j++)
       {;}
  }
}


/*写状态函数*/
void WriteCommand(uchar WLCD,uchar Busy)
{
  if(Busy) Read();     //若Busy为1,则调用Read子函数进行忙检测
  Port="WLCD";           //将变量WLCD中的指令传送至P1口
  RS="0";                //选中指令寄存器
  RW="0";                //写模式
  E="1";                 //置E端为高电平,写使能
  _nop_();             //延时一段时间
  _nop_();
  _nop_();
  E="0";                 //置E端为低电平
  delay(200);
}


/*写数据子函数*/
void WriteData(uchar WDLCD)
{
  Read();
  Port="WDLCD";
  RS="1";
  RW="0";
  E="1";                  //置E端为高电平,读使能
  _nop_();
  _nop_();
  _nop_();
  E="0";
  delay(200);
}


/*读状态子函数*/
uchar Read(void)
{
  Port="0xff";
  RS="0";
  RW="1";
  E="0";_nop_();
  E="1";
  while(Port&0x80);      /*检测忙信号,当P1口内容与80H相与后不为0时,程序原地踏步*/
  return(Port);
}


void RESET()
{
  WriteCommand(0x30,0);
  WriteCommand(0x38,1);   //设置工作方式,8位数据传送,2行显示,检测忙信号
  WriteCommand(0x0c,1);   //设置状态模式,显示屏打开,光标不显示、不闪烁、检测忙信号
  WriteCommand(0x01,1);   //清屏,检测忙信号
  WriteCommand(0x06,1);   //输入方式设置,显示光标右移设置,检测忙信号
}
/*显示指定坐标的一个字符子函数*/
void DisplayOnechar(uchar x,uchar y,uchar Data)
{
  y&=0x01;                //y的变化范围0~1
  x&=0x0f;                //x的变化范围0~15
  if(y) x|=0x40;          //若y为1,地址码+0x40
  x|=0x80;                //指令码为地址码+0x80
  WriteCommand(x,0);      //将指令x写入LCD,忽略忙信号检测
  WriteData(Data);        //再将数据Data写入LCD
}
//显示指定坐标的一串字符子函数
void DisplayChar(uchar x,uchar y,uchar code *Data)
{
  uchar Length="0";
  y&=0x1;
  x&=0xf;
  while((x<0xf)&(Data[Length]!='\0'))     //x<15时进入while语句循环
  {
    DisplayOnechar(x,y,Data[Length]);     //显示单个字符
 Length++;                             //数据指针递增
 x++;                                  //x轴坐标递增
 //delay(500);
  }
}
void main()
{
 
 
    delay(10);
 RESET();
 DisplayChar(0,0,str0);
 DisplayChar(0,1,str1);
    while(1);
}

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tengjingshu_112148725 2009-3-18 22:56

收藏了
相关推荐阅读
用户1003175 2009-06-21 22:34
感想
        这次的学校电子设计大赛已经告落了一段时间了,本想早点上来写点东西的,但一拖就拖到了现在。        这次的比赛让我感觉到我学的基础知识真的很不扎实。        其实,一开始方案...
用户1003175 2009-05-09 15:10
想请大家帮忙~谢谢
#include <pic.h>unsigned int s="0",k;       void delay(){  unsigned int i;  for(i=0;i<50000...
用户1003175 2009-03-18 20:39
好久
    好久没有写东西了,感觉都有点对不住大家了,好好管一下自己才行!...
用户1003175 2008-06-25 20:24
老工程师对年轻工程师的十大忠告
当电子工程师也是十余年了,不算有出息,环顾四周,也没有看见几个有出息的!回顾工程师生涯,感慨万千,愿意讲几句掏心窝子的话,也算给咱们师弟师妹们提个醒,希望他们比咱们强! [1]好好规划自己的路,不要跟...
用户1003175 2008-06-21 21:34
C语言编程方法
1、选择合适的算法和数据结构应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法...
用户1003175 2008-06-20 22:51
液晶显示+AD
#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int#define Po...
EE直播间
更多
我要评论
1
6
关闭 站长推荐上一条 /3 下一条