导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[lxlong_006]IC厂商技术交流区[求助]



No.54147
作者:lxlong_006
邮件:lxlong_006@126.com
ID:129021
登陆:2次
文章数:1篇
最后登陆IP:123.139.26.146
最后登陆:2011/4/26 16:19:55
注册:2009/7/3 11:36:40
财富:106
发帖时间:2011/4/26 16:19:55
发贴者IP:123.139.26.146
标题:lxlong_006:IC厂商技术交流区[求助]
摘要:No.54147IC厂商技术交流区[求助] #include   <REG51.H>  
#include  <absacc.h>  
#include   <STDIO.H>  
#include   <STRING.H>  
#include   <MATH.H>  
#include   <intrins.h>  
#include   <key.h>  
#define DB P0
//sbit Spk=P1^3;//speaker
        unsigned char i=0;
        unsigned int Key_Num=0;
        unsigned char key1,key2,key3,key4;
        bit Flag;
        unsigned char Get_Key;
        bit Flag;
  //----液晶函数
void msec(unsigned int x) ;
void  configure(unsigned char com);  //com配置参数,初始化时需要配置若干次
void LcdIni();
void  printchar(unsigned char row,unsigned char col, buf );
void  print(unsigned char row,unsigned char col,char * buf,unsigned char len );

//#define unsigned char unsigned char
//#define uint  unsigned int


sbit RS=P2^0;  
sbit RW=P2^1;  
sbit E=P2^2;
//sbit Spk=P1^3;//speaker
////延时函数//////////
void msec(unsigned int x)    
  {
  unsigned char j;
  while(x--)
  {
      for (j=0;j  <125;j++)
      {;}
  }
  }

//液晶配置函数
void  configure(unsigned char com)  //com配置参数,初始化时需要配置若干次
  {
    unsigned char m; 
    RS=0;
    RW=1;
do
  {
    DB=0x0ff;
    E=1;
    m=DB;
    E=0;
    m=m&0x80;
    }
while (m==0x80);  
    RW=0;
    DB=com;
    E=1;
    E=0;    
}
//写数据函数
void writeData(unsigned char buf)
{
    unsigned char m; 
    RS=0;
    RW=1;
do
  {
    DB=0x0ff;
    E=1;
    m=DB;
    E=0;
    m=m&0x80;
    }
while (m==0x80); 

          RS=1;
              RW=0;
              DB=buf;
              E=1;
              E=0;
}
//---------------------------------


//显示函数  

void  printchar(unsigned char row,unsigned char col, buf )
{

        unsigned char cod;
    unsigned char m;
        cod=0x80;
        if(row==1) cod=cod+0x40;
    if(row==2) cod=cod+0x14;
        if(row==3) cod=cod+0x54;
        cod=cod+col;
        //cod=0x80 + 0x10 * row + col/2; 
    configure(cod);
          RS=0;
          RW=1;

      do
        {
          DB=0x0ff;
          E=1;
          m=DB;
          E=0;
          m=m&0x80;
        }
      while (m==0x80);  
          RS=1;
              RW=0;
              DB=buf;
              E=1;
              E=0;
}

//--------------------------

void  print(unsigned char row,unsigned char col,char * buf,unsigned char len )//行,列
{
        unsigned char i;
        unsigned char cod;
    unsigned char m;
        cod=0x80;
        if(row==1) cod=cod+0x10;
    if(row==2) cod=cod+0x08;
        if(row==3) cod=cod+0x18;
        cod=cod+col;
        //cod=0x80 + 0x10 * row + col/2; 
    configure(cod);  
    for(i=0;i  <len;i++)
    {
          RS=0;
          RW=1;

      do
        {
          DB=0x0ff;
          E=1;
          m=DB;
          E=0;
          m=m&0x80;
        }
      while (m==0x80);  
          RS=1;
              RW=0;
              DB=buf;
              E=1;
              E=0;
      // msec(0x10);
          }
}

void LcdIni()
{

  DB=0x30;
  RS=0;
  RW=0;
  msec(0x15); 
          DB=0x38;
  E=1;
  E=0;
  configure(0x01);
  configure(0x0c);
  configure(0x06);
    print(1,2,"陕西创新", strlen("陕西创新"));
        print(2,0,"科技有限公司", strlen("科技有限公司"));
    msec(1000);
        configure(0x01);//清屏
        msec(2000);
                //        msec(100);
                        //        configure(0x01);      //清除显示,并且设定地址指针为00H
                                  print(0,0,"名称:", strlen("名称:"));
                                print(0,5,"型号", strlen("型号"));
                                print(2,0,"电压:", strlen("电压:"));
                                print(3,0,"状态:", strlen("状态:"));
                                print(1,0,"方向:", strlen("方向:"));
}

//单片机初始化:
void InitialCpu()  
{
  //开串行中断 
    ET0=1;    //开定时中断0
    ET1=0;    //关定时中断1
    ES=1;    //开串行中断
    EX0=0;    //开外部中断0
    EX1=0;    //开外部中断1
    EA=1;    //中断允许
    IP=0x00;  //中断优先级

  //串行中断设置:
  SCON=0x50;  //SM0 SM1 SM2 REN =0101,模式1,允许接收;


    //假设波特率19.2k,晶震为11.059M.
      PCON=PCON | 0x80; //SMOD=1;
      TMOD=0x21 ; //定时器1工作模式2,8位自动重装.当溢出后自动装载TH1到TL1.定时器1工作模式1:16位
      TL1=0xFD;
      TH1=0xFD;  //初值
      TR1=1;      //启动订时器
        TR0=1;        
      TL0=76;    //50毫秒定时
      TH0=247;  //初值
}

void Timer0() interrupt 1
{
        static unsigned int  Timer0i=0;
        Timer0i++;
        if(Timer0i==20)
        {
                        Timer0i=0;
                        TL0=76;    //50毫秒定时
                      TH0=247;  //初值                
        }
                        
}
//键盘键值获取Get_Key值
void kk()
{
        switch(Get_Key)
                        {
                        case 1:        configure(0x85);        
                                        configure(0x0d);
                                        TR0=0;
                                        key1++;
                                if(key1>  4)
                                {
                                        key1=0;
                                
                                }
                                else //利用一个按键实现3种不同内容显示,
                                {
                                        if(key1==1)
                     ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:47毫秒 最大:7276毫秒 查询6次