⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_fuza_yemiam_kongzhi.c

📁 对LCD的键盘控制和复杂显示系统的人机界面 代码在12864上已经成功调通,按照程序的管脚配置把相应管脚连好,即可实现液晶显示,有什么问题可给我发E-MAIL:wangxiongke-119@163
💻 C
📖 第 1 页 / 共 4 页
字号:

//MSP430与12864连接驱动程序 


#include "msp430x16x.h"        // Standard Equations
#define uchar unsigned char
#include "hztable-2222.h"
#include "math.h" 
#define uint unsigned int

//**********************************************
uchar p=1,q=2,l=80,x,m[4]; //p标志页面,q标志哪个参数
unsigned char keypoint;
uint  data_convert[10];
float  fasong[4];
uchar shuru[4][4];          //注意在各个库文件中不能有相同的"自定义变量名称"
uchar  jieguo_BCD[10][10];    //如果多设置变量不用是可以的!!!!
uchar *shd[4][4];       //多定义函数不哟内用是不行的!!!!
uchar *jiguo_BCD_Ma[10][10];        //只有指针或者指针数组才能接收数组传递初始地址!!!
uchar data_number[4];
uchar  keypst=0;
uchar  cradd1,cradd2;

//**********************************************
#define    RS              BIT3
#define    RW              BIT2
#define    E               BIT1
#define    CS1             BIT4
#define    CS2             BIT5
#define    MAX_CP          BIT6
#define    DA_CP           BIT7
#define    LPA                      BIT7 
#define    BPA                      BIT6
#define    HPA                      BIT5
#define    MAX_313                  BIT4
#define    BPB                      BIT3
#define    HPB                      BIT2
#define    Sensor_Signal_Importing  BIT1
#define    LPB                      BIT0


//数据线:p5口   ,控制线:  p3口

//**********************************************

 //=======================================================
void short_delay(uint i)
     { uint j;
       for(j=0;j<=i;j++);
     }
     
void delayms(uchar tickms)
     { uchar count,i;
       _NOP(); 
       _NOP(); 
       _NOP();
       for(i=tickms;i>0;i--)
         { for(count=0;count<=58;count++) {;}
           _NOP();
         }
      }
//*****************************************      
 unsigned char keyscan(void)   //键盘扫描程序
  {
    unsigned char x;
    P1DIR=0X0F;
    P1OUT=0X0e;                 //扫描第一行
    if((P1IN&0Xf0)==0Xe0)       
        x=15;
       else
          if((P1IN&0Xf0)==0Xd0)
            x=14;
                else
                  if((P1IN&0Xf0)==0xb0)
                    x=13;
                    else
                     if((P1IN&0Xf0)==0x70)
                       x=12;
       else 
        {
          P1OUT=0X0d;            //扫描第二行
          if((P1IN&0Xf0)==0Xe0)
             x=11;
             else
               if((P1IN&0Xf0)==0Xd0)
                  x=10;
                    else
                      if((P1IN&0Xf0)==0xb0)
                        x=0;
                        else
                         if((P1IN&0Xf0)==0x70)
                           x=9;
           else
           {
            P1OUT=0X0b;           //扫描第三行
            if((P1IN&0Xf0)==0Xe0)
            x=8;
              else
                if((P1IN&0Xf0)==0Xd0)
                x=7;
                  else
                  if((P1IN&0Xf0)==0xb0)
                    x=6;
                    else
                      if((P1IN&0Xf0)==0x70)
                        x=5;
             else 
             {P1OUT=0x07;           //扫描第四行
                 if((P1IN&0Xf0)==0Xe0)
                  x=4;
                     else
                       if((P1IN&0Xf0)==0Xd0)
                          x=3;
                           else
                            if((P1IN&0Xf0)==0xb0)
                               x=2;
                               else
                                if((P1IN&0Xf0)==0x70) 
                                    x=1;
                    }
               }      
         }    
  return(x);
  }  
//***********************************************  
unsigned char keyj(void)   //判断是否有键按下
    {unsigned char k;
    P1DIR=0x0f;
    P1OUT=0x00;        //键盘硬件:P10--P13为行线,最下面一根为P10
    if((P1IN&0Xf0)!=0xf0)
     k=1;              // P14--P16为列线,最右边一根为P14,
     else k=0;
    return(k);          // 无按键,返回 0?;  有按键返回 非0
    }  
//**************************************************
void prl0(uchar com1)// 写指令代码子程序(左)
{ 
        P3DIR|=0X7F;      //P3为输出口
        P3OUT|=CS1;       //csa=1  
        P3OUT&=~CS2;      //csb=0
        P3OUT&=~RS;         
        P3OUT|=RW;        //RS=0,R/W=1,以便读液晶状态
        P5DIR=0x00;       //P5口为输入口
        do
        {
                 P3OUT|=E;      //E=1
                 cradd1=P5IN;
                P3OUT&=~E;     //E=0  
        }
        while((cradd1&0x80)!=0);
         P3OUT&=~RW;        //rw=0
         P5DIR=0xff;       //P5口为输出口
        P5OUT=com1;
        P3OUT|=E;      //E=1
        P3OUT&=~E;     //E=0  
}
//**************************************************
void prl1(uchar dat1)// 写显示数据子程序(左)
{       
         P3DIR|=0XFF;      //P5为输出口
         P3OUT|=CS1;       //csa=1  
         P3OUT&=~CS2;      //csb=0
         P3OUT&=~RS;         
         P3OUT|=RW;        //RS=0,R/W=1,以便读液晶状态
         P5DIR=0x00;       //P5口为输入口
        do
        {
                 P3OUT|=E;      //E=1
                 cradd1=P5IN;
                P3OUT&=~E;     //E=0  
        }
        while((cradd1&0x80)!=0);
        P3OUT|=RS;         //rs=1  
        P3OUT&=~RW;        //rw=0
         P5DIR=0xff;       //P5口为输出口
         P5OUT=dat1;
        P3OUT|=E;      //E=1
        P3OUT&=~E;     //E=0  
     }
//**************************************************
void prr0(uchar com2)// 写指令代码子程序(右)
{ 
         P3DIR|=0X7F;      //P3为输出口
         P3OUT&=~CS1;      //csa=0  
        P3OUT|=CS2;       //csb=1
        P3OUT&=~RS;         
        P3OUT|=RW;        //RS=0,R/W=1,以便读液晶状态
        P5DIR=0x00;       //P5口为输入口
        do
        {
                P3OUT|=E;      //E=1
                cradd1=P5IN;
                P3OUT&=~E;     //E=0  
        }
        while((cradd1&0x80)!=0);
         P3OUT&=~RW;        //rw=0
         P5DIR=0xff;       //P5口为输出口
         P5OUT=com2;
         P3OUT|=E;      //E=1
         P3OUT&=~E;     //E=0  
}
//*************************************************
void prr1(uchar dat2)// 写显示数据子程序(右)
{ 
         P3DIR|=0X7F;      //P3为输出口
         P3OUT&=~CS1;      //csa=0  
         P3OUT|=CS2;       //csb=1
        P3OUT&=~RS;         
        P3OUT|=RW;        //RS=0,R/W=1,以便读液晶状态
        P5DIR=0x00;       //P5口为输入口
        do
        {
                 P3OUT|=E;      //E=1
                 cradd1=P5IN;
                P3OUT&=~E;     //E=0  
        }
        while((cradd1&0x80)!=0);
        P3OUT|=RS;         //rs=1  
        P3OUT&=~RW;        //rw=0
        P5DIR=0xff;       //P5口为输出口
        P5OUT=dat2;
        P3OUT|=E;      //E=1
        P3OUT&=~E;     //E=0  
}

//**********************************************
void hzw_pr(uchar  page2,uchar colum2,uchar *code2)// 写一个汉字 
//page2:页  colum2:列    code2:代码   表示哪个汉字
{   uchar i,j,colum;
    uchar  *hzp;         
    uchar flag;
    hzp=code2; 
    for(j=0;j<2;j++)
    {    prl0(page2|0xb8);         //页
         prr0(page2|0xb8);
         colum=colum2;
         if(colum2>63)           //右屏
       { colum=colum-64;
         prr0(colum|0x40);  
          flag=1;
       }
         else                    //左屏
       {prl0(colum|0x40);
                  flag=0; }

  //*********************
  for(i=0;i<16;i++)
  {   //a 
    if(flag==0)
       { prl1(*hzp);
        }
      else
    {prr1(*hzp);}
       hzp++;
    if(colum==64)   //列=64
    {  //b
     colum=0;
    if(flag==0)
     {
      flag=1;
    prr0(colum|0x40);
     }
    else {break;}
       }  //b
     colum++;  
           }  //a
     page2++;
   }
}
//**********************************************
void shzw_pr(uchar  page1,uchar colum1,uchar *code1)// 写一个数字 
//page式:页  colum1:列    code1:代码   表示哪个数字
{   uchar i,j,colum;
    uchar  *hzp;         
    uchar flag;
    hzp=code1; 
    for(j=0;j<2;j++)
    {    prl0(page1|0xb8);         //页
         prr0(page1|0xb8);
         colum=colum1;
         if(colum1>63)           //右屏
       { colum=colum-64;
         prr0(colum|0x40);  
          flag=1;
       }
         else                    //左屏
       {prl0(colum|0x40);
                  flag=0; }

  //*********************
  for(i=0;i<8;i++)
  {   //a 
    if(flag==0)
       { prl1(*hzp);
        }
      else
    {prr1(*hzp);}
       hzp++;
    if(colum==64)   //列=64
    {  //b
     colum=0;
    if(flag==0)
     {
      flag=1;
    prr0(colum|0x40);
     }
    else {break;}
       }  //b
     colum++;  
           }  //a
     page1++;
   }
}
//******************************************              
void shzw_str(uchar x,uchar **str)   //写数字字符串函数,"二维指针","指针"无法直接接受"指针数组"传递来的地址
{    uchar y;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -