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

📄 lcddrive12864.c

📁 Keil单片机软件开发平台下的一个51系列单片机工程
💻 C
📖 第 1 页 / 共 3 页
字号:
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display16X4(uint8 lcdrow,uint8 lcdline,uint8 datanumber) // display 16x4 data 
{
    uint8  i;
    uint16   j;
    if(lcdline<64)
    {
           //  outmi(0xc0);
        outmi(0xb8|lcdrow);                       //设置页地址
        outmi(0x40|lcdline);                      //设置列地址
        j=datanumber*8;
        for(i=0;i<8;i++)
        {
            if(DotNot==1)
            {
                outmd(~lcd_lattice16_4[i+j]);
            }
            else
            {
                outmd(lcd_lattice16_4[i+j]);
            }
            if(i==3)
            {
                outmi(0xb8|(lcdrow+1));           //设置页地址
                outmi(0x40|lcdline);              //设置列地址
            }
         }
    }
    else if(lcdline<121)
    {
         //  outsi(0xc0);                         //设置显示起始行
        outsi(0xb8|lcdrow);                       //设置页地址
        if(lcdline<121)
        {
            outsi(0x40|(lcdline-64));             //设置列地址
        }
        j=datanumber*8;
        for(i=0;i<8;i++)
        {
            if(DotNot==1)
            {
                outsd(~lcd_lattice16_4[i+j]);
            }
            else
            {
                outsd(lcd_lattice16_4[i+j]);
            }
            if(i==3)
            {
                outsi(0xb8|(lcdrow+1));           //设置页地址
                outsi(0x40|(lcdline-64));         //设置列地址
            }
        }
    }
}
/*********************************************************************************************************
** 函数名称: Display6X8
** 功能描述: 在指定的行列绘16X8点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display6X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber) //display 6x8 data
{
    uint8   i;
    uint16   j;
    outmi(0xc0);
    outsi(0xc0);                                  //设置显示起始行
    if(lcdline<64)
    {
        outmi(0xb8|lcdrow);                       //设置页地址
        outmi(0x40|lcdline);                      //设置列地址
        j=datanumber*8;
        for(i=0;i<6;i++)
        {
            outmd(lcd_lattice8_8[i+j]);
        }
    }
    else
    {
        outsi(0xb8|lcdrow);                       //设置页地址
        outsi(0x40|(lcdline-64));                 //设置列地址
        j=datanumber*8;
        for(i=0;i<6;i++)
        {
            outsd(lcd_lattice8_8[i+j]);
        }
    }
}
/*********************************************************************************************************
** 函数名称: Display2X8
** 功能描述: 在指定的行列绘2X8点阵
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
/*void Display2X8(uint8 lcdrow,uint8 lcdline,uint8 datanumber) //display 6x8 data
{
    uint8  i;
    uint16   j;
    outmi(0xc0);
    outsi(0xc0);                                  //设置显示起始行
    if(lcdline<64)
    {
        outmi(0xb8|lcdrow);                       //设置页地址
        outmi(0x40|(lcdline-1));                      //设置列地址
        j=datanumber*8;
        for(i=0;i<2;i++)
        {
            outmd(lcd_lattice8_8[i+j]);
        }
        outmd(0);
    }
    else
    {
        outsi(0xb8|lcdrow);                       //设置页地址
        outsi(0x40|(lcdline-64-1));                 //设置列地址
        j=datanumber*8;
        for(i=0;i<2;i++)
        {
            outsd(lcd_lattice8_8[i+j]);
        }
        outsd(0);
    }
}
/*********************************************************************************************************
** 函数名称: DisplayCls
** 功能描述: 清屏
** 输 入:   
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void DisplayCls(void)
{
    uint8  i;
    uint8  j;
    lcdinit();
    outmi(0xc0);
    outsi(0xc0);                                  //设置显示起始行
    for(i=0;i<8;i++)
    {
        outmi(0xb8|i);                            //设置页地址
        outmi(0x40|0);                            //设置列地址
        for(j=0;j<64;j++)
        {
            outmd(0);
        }
    }
    for(i=0;i<8;i++)
    {
        outsi(0xb8|i);                            //设置页地址
        outsi(0x40|0);                            //设置列地址
        for(j=0;j<64;j++)
        {
            outsd(0);
        }
    }
}
/*********************************************************************************************************
** 函数名称: Display16X8Item
** 功能描述: 在指定的行列绘一16X8点阵数组
** 输 入:   DotNot的bit0~3:在液晶上的反显起始列0~15,bit4~7:反显个数
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年12月16日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display16X8ItemWord(uint8 dlcdrow,uint8 item,uint8 DotNot)
{
    uint8 i,j;
    lcdinit();//                                  //left and right show open//
    j = (DotNot>>4) & 0x0F;
    DotNot = DotNot & 0x0F;
    for(i=0;i<16;i++)
    {
        if(mb[item][i]=='`')
        {
            continue;
        }
        if(i>DotNot && j>0)
        {
            Display16X8(dlcdrow,i*8, mb[item][i],1);
            j--;
        }
        else
        {
            Display16X8(dlcdrow,i*8, mb[item][i],0);
        }
    }
}
/*********************************************************************************************************
** 函数名称: void Display16X8ItemData(uint8 lcdrow,uint8 lcdline,uint8 item,uint8 DotNot,uint8 style);
** 功能描述: DotNot bit0~7为1则对应位反显
** 输 入:   style:bit7为0显示前导0;bit0~3:显示数据的个数,bit4~6:小数点后起位位置。
** 输 出:   
** 全局变量:
** 调用模块:
**
** 作 者: 刘宝贵
** 日 期: 2005年1月26日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**-------------------------------------------------------------------------------------------------------
*********************************************************************************************************/
void Display16X8ItemData(uint8 lcdrow,uint8 lcdline,uint16 temp16,uint8 DotNot,uint8 style)
{
    uint8 number;
    bit dispzero;
    number = style &0x0F;                           //取出显示数据的个数
    dispzero = (bit)(style & 0x80);                 //取出是否显示前导0位。
    style = (style >>4)&0x07;                       //取出小数点后起位位置
    lcdinit();                                      //left and right show open
    switch(style)
    {
        case 0://无小数点
        {
            Display16X8(lcdrow,lcdline,temp16%10+0x30,(bit)(DotNot&1));
            lcdline-=8;
            DotNot = DotNot>>1;
            if(number>1)
            {
                if(dispzero)//显示前导0
                {
                    Display16X8(lcdrow, lcdline,(temp16/10)%10+0x30,(bit)(DotNot&1));
                }
                else//不显示前导0
                {
                    Display16X8(lcdrow, lcdline,(temp16>=10) ? (temp16/10)%10+0x30 : ' ',(bit)(DotNot&1) );
                }
                DotNot = DotNot>>1;
                lcdline-=8;
                if(number>2)
                {
                    if(dispzero)//显示前导0
                    {
                        Display16X8(lcdrow, lcdline,(temp16/100)%10+0x30,(bit)(DotNot&1));
                    }
                    else//不显示前导0
                    {
                        Display16X8(lcdrow, lcdline,(temp16>=100) ? (temp16/100)%10+0x30 : ' ',(bit)(DotNot&1) );
                    }
                    DotNot = DotNot>>1;
                    lcdline-=8;
                    if(number>3)
                    {
                        if(dispzero)//显示前导0
                        {
                            Display16X8(lcdrow, lcdline,(temp16/1000)%10+0x30,(bit)(DotNot&1));
                        }
                        else//不显示前导0
                        {
                            Display16X8(lcdrow, lcdline,(temp16>=1000) ? (temp16/1000)%10+0x30 : ' ',(bit)(DotNot&1) );
                        }
                        DotNot = DotNot>>1;
                        lcdline-=8;
                        if(number>4)
                        {
                            if(dispzero)//显示前导0
                            {
                                Display16X8(lcdrow, lcdline,(temp16/10000)%10+0x30,(bit)(DotNot&1));
                            }
                            else//不显示前导0
                            {
                                Display16X8(lcdrow, lcdline,(temp16>=10000) ? (temp16/10000)%10+0x30 : ' ',(bit)(DotNot&1) );
                            }
                        }
                    }
                }
            }
        }break;
        case 1://小数点后1位
        {
            Display16X8(lcdrow,lcdline,temp16%10+0x30,(bit)(DotNot&1));
            lcdline-=8;
            DotNot = DotNot>>1;
            Display16X8(lcdrow, lcdline,'.',(bit)(DotNot&1));
            DotNot = DotNot>>1;
            lcdline-=8;
            Display16X8(lcdrow, lcdline,(temp16/10)%10+0x30,(bit)(DotNot&1));
            DotNot = DotNot>>1;
            lcdline-=8;
            if(number>2)
            {
                if(dispzero)//显示前导0
                {
                    Display16X8(lcdrow, lcdline,(temp16/100)%10+0x30,(bit)(DotNot&1));
                }
                else//不显示前导0
                {
                    Display16X8(lcdrow, lcdline,(temp16>=100) ? (temp16/100)%10+0x30 : ' ',(bit)(DotNot&1) );
                }
                DotNot = DotNot>>1;
                lcdline-=8;
                if(number>3)
                {
                    if(dispzero)//显示前导0
                    {
                        Display16X8(lcdrow, lcdline,(temp16/1000)%10+0x30,(bit)(DotNot&1));
                    }
                    else//不显示前导0
                    {
                        Display16X8(lcdrow, lcdline,(temp16>=1000) ? (temp16/1000)%10+0x30 : ' ',(bit)(DotNot&1) );
                    }
                    DotNot = DotNot>>1;
                    lcdline-=8;
                    if(number>4)
                    {
                        if(dispzero)//显示前导0
                        {
                            Display16X8(lcdrow, lcdline,(temp16/10000)%10+0x30,(bit)(DotNot&1));
                        }
                        else//不显示前导0
                        {
                            Display16X8(lcdrow, lcdline,(temp16>=10000) ? (temp16/10000)%10+0x30 : ' ',(bit)(DotNot&1) );
                        }

⌨️ 快捷键说明

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