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

📄 ta6963.c

📁 TA6963程序,有些子程序没有时间来写全
💻 C
字号:


#define   MASTER      0                         //定义驱动程序
#include  "ZHIMO.H"                             //加入控制头文件
#include  "TA6963.H"                            //加入字模字义头文件

#if UCOSII
 #include "include.h"
 OS_EVENT *QLcd;
#endif

#define Lcd_command     (*((INT8U *) LCD_COMMAND))
#define Lcd_data        (*((INT8U *) LCD_DATA))

INT8U ReadSta()                                 //读状态字子程序
 { INT8U sta=Lcd_command;
   return sta;
 }

void LcdSta1(void)                              //判状态位STA1,STA0子程序
 { while((ReadSta()&0x3)<3);
 }
#if LCD_XOR16_EN|LCD_XOR88_EN|LCD_XOR86_EN
void LcdSta3(void)                              //判状态位STA3子程序
 { while((ReadSta()&0x8)==0);
 }
#endif

void LcdWrd(INT8U da)                           //写数据子程序
 { LcdSta1();
   Lcd_data=da;
 }
                                                //写命令子程序
void LcdWrc(INT8U com)
 { LcdSta1();
   Lcd_command=com;
 }

void LcdPr2( INT8U data1,                       //双字节参数指令写入子程序
             INT8U data2,
             INT8U com)
 { LcdWrd(data1);
   LcdWrd(data2);
   LcdWrc(com);
 }


void LcdPr1( INT8U data1,                       //单字节参数指令写入子程序
             INT8U com)
 { LcdWrd(data1);
   LcdWrc(com);
 }

#if LCD_XOR16_EN|LCD_XOR88_EN|LCD_XOR86_EN
INT8U LcdRd(void)
 { LcdSta1();
   LcdWrc(0xc1);
   LcdSta1();
   return (Lcd_data);
 }
#endif

#if LCD_DISP16_EN
OS_EXT void LcdDisp16( INT8U x,                 //16*16点阵显示
                       INT8U y,
                       INT16U zhi)
 { INT16U xy;
   INT16U p;
   INT8U i;
  #if UCOSII
   INT8U err;
  #endif
   p=zhi*32;                                    //计算字模位置
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<16;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(zhimo16[p++],0xc0);                //写数据
      LcdPr1(zhimo16[p++],0xc0);                //写数据
      xy+=LCD_X/8;                              //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_DISP86_EN
OS_EXT void LcdDisp86( INT8U x,                 //8*16点阵显示
                       INT8U y,
                       INT16U zhi)
 { INT8U i;
   INT16U xy;
   INT16U p;
  #if UCOSII
   INT8U err;
  #endif
   p=zhi*16;                                    //计算字模位置
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<16;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(zhimo86[p++],0xc4);                //写数据
      xy+=LCD_X/8;                              //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_DISP88_EN
OS_EXT void LcdDisp88( INT8U x,                 //8*8点阵显示
                       INT8U y,
                       INT16U zhi)
 { INT8U i;
   INT16U xy;
   INT16U p;
  #if UCOSII
   INT8U err;
  #endif
   p=zhi*16;                                    //计算字模位置
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<8;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(zhimo86[p++],0xc4);                //写数据
      xy=xy+(LCD_X/8);                          //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_CLS16_EN
OS_EXT void LcdCls6(   INT8U x,                 //16*16点阵删除
                       INT8U y)
 { INT16U xy;
   INT8U i;
  #if UCOSII
   INT8U err;
  #endif
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<16;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(0,0xc0);                           //写数据
      LcdPr1(0,0xc0);                           //写数据
      xy+=LCD_X/8;                              //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_CLS86_EN
OS_EXT void LcdCls86(  INT8U x,                 //8*16点阵删除
                       INT8U y)
 { INT8U i;
   INT16U xy;
  #if UCOSII
   INT8U err;
  #endif
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<16;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(0,0xc4);                           //写数据
      xy+=LCD_X/8;                              //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_CLS88_EN
OS_EXT void LcdCls88(  INT8U x,                 //8*8点阵删除
                       INT8U y)
 { INT8U i;
   INT16U xy;
  #if UCOSII
   INT8U err;
  #endif
   xy=y*(LCD_X/8*16)+x;                         //计算显示地址
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   for ( i=0;i<8;i++)
    { LcdPr2( (INT8U)(xy%256),
              (INT8U)(xy/256),0x24);            //设置显示地址;
      LcdPr1(0,0xc4);                           //写数据
      xy+=LCD_X/8;                              //地址增加一行
    }
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_CLS_LINE_EN
OS_EXT void LcdCls(  INT8U y1,                  //行删除
                     INT8U y2)
 { INT16U xdata xy,xy1;
  #if UCOSII
   INT8U err;
  #endif
   xy=y1*LCD_X;
   xy1=y2*LCD_X+LCD_X;
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   LcdPr2( (INT8U)(xy%256),
           (INT8U)(xy/256),0x24);               //设置清空地址;
   LcdWrc(0xb0);
   for(xy;xy<xy1;xy++)
    { LcdSta3();
      Lcd_data=0;
    }
   LcdWrc(0xb2);
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif


#if LCD_XOR16_EN
OS_EXT void LcdXor16(  INT8U x,                 //16*16点阵反色
                       INT8U y)
 {
  #if UCOSII
   INT8U err;
  #endif
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
  //此处加入代码
  x=y;
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }

#endif

#if LCD_XOR86_EN
OS_EXT void LcdXor86(  INT8U x,                 //8*16点阵反色
                       INT8U y)
 {
  #if UCOSII
   INT8U err;
  #endif
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
  //此处加入代码
  x=y;
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_XOR88_EN
OS_EXT void LcdXor88(  INT8U x,                 //8*8点阵反色
                       INT8U y)
 {
  #if UCOSII
   INT8U err;
  #endif
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
  //此处加入代码
  x=y;
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_POINT_EN
OS_EXT void LcdPoint(  INT8U x,                 //画点
                       INT8U y,
                       bit color)
 { INT16U xy;
   INT8U ch;
  #if UCOSII
   INT8U err;
  #endif
   ch=x%8;                                      //取位数
   xy = (y*(LCD_X/8))+x/8;
  #if UCOSII
   OSSemPend(QLcd,0,err);
  #endif
   LcdPr2( (INT8U)(xy%256),                     //设置地址
           (INT8U)(xy/256),0x24);
   if (color)
    LcdWrc(0xf8+ch);
   else
    LcdWrc(0xf0+ch);
  #if UCOSII
   err = OSSemPost(QLcd);
  #endif
 }
#endif

#if LCD_LINE_EN
OS_EXT void LcdLine(   INT8U x1,                //画线
                       INT8U y1,
                       INT8U x2,
                       INT8U y2,
                       bit color)
 { //画线程序实际由一系列画点程序构成
   x1=x2;
   y1=y2;
   color=color;
 }
#endif

void LcdInit(void)
 { Lcd_command = LCD_COMMAND;                   //设置液晶屏操作端口
   Lcd_data = LCD_DATA;
   LcdWrc(0x98);                                //设置图形显示
   LcdWrc(0x80);                                //设置与文本"逻辑或"显示
   LcdWrc(0xb2);                                //禁用自动读写
   LcdPr2(0,0,0x42);                            //设置首址
   LcdPr2(LCD_X/8,0,0x43);                      //设置宽度
   LcdPr2(0,0,0x24);                            //设置显示地址
  #if LCD_CLS_LINE_EN
   LcdCls(0,LCD_Y/8);                           //清屏
  #endif
  #if UCOSII
   QLcd = OSSemCreate (1);                      //如用在操作系统下,则建立信号量
  #endif
 }

⌨️ 快捷键说明

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