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

📄 sed1520_zongxian.c

📁 单片机接口技术实用子程序配套源代码
💻 C
字号:
//-----------------------函数声明--------------------------------------------------------
#include"stdio.h"
#include"absacc.h"
#include"reg51.h"
//-----------------------定义地址--------------------------------------------------------
#define CWADD1 XBYTE[0x8000]  // 写指令代码地址(E1)
#define CRADD1 XBYTE[0x8200]  //读状态字地址(E1)
#define DWADD1 XBYTE[0x8100]  //写显示数据地址(E1)
#define DRADD1 XBYTE[0x8300]  // 读显示数据地址(E1)
#define CWADD2 XBYTE[0x4000]  //写指令代码地址(E2)
#define CRADD2 XBYTE[0x4200]  //读状态字地址(E2)
#define DWADD2 XBYTE[0x4100]  // 写显示数据地址(E2)
#define DRADD2 XBYTE[0x4300]  //读显示数据地址(E2)
//-----------------------定义各命令字--------------------------------------------------------
#define LCD_DISPLAYON 0xaf
#define LCD_DISPLAYOFF 0xae
#define LCD_DRIVERON 0xa5
#define LCD_DRIVEROFF 0xa4
#define LCD_DUTY16 0xa8
#define LCD_DUTY32 0xa9
#define LCD_END 0xee
#define LCD_RESET 0xe2
#define LCD_RWMODE 0xe0
#define LCD_STARTLINE0 0xc0
#define LCD_PAGE0 0xb8
#define LCD_COLUMNADDR0 0x00
//-----------------------定义各命令操作--------------------------------------------------------
#define LCD_ON() LCD_Command(LCD_DISPLAYON)
#define LCD_OFF() LCD_Command(LCD_DISPLAYOFF)
#define LCD_StaticON() LCD_Command(LCD_DRIVERON)
#define LCD_StaticOFF() LCD_Command(LCD_DRIVEROFF)
#define LCD_Select16() LCD_Command(LCD_DUTY16)
#define LCD_Select32() LCD_Command(LCD_DUTY32)
#define LCD_StartRW() LCD_Command(LCD_RWMODE)
#define LCD_EndRW() LCD_Command(LCD_END)
#define LCD_Reset() LCD_Command(LCD_RESET)
#define LCD_SetStartLine(i) LCD_Command(LCD_STARTLINE0+i)
#define LCD_SetPage(i) LCD_Command(LCD_PAGE0+i)
#define LCD_SetColumn(i) LCD_Command(LCD_COLUMNADDR0+i)
/*ASCII字体,大小6X8,上到下D0~D7,左到右*/
unsigned char code ASCII[][6]={
                               
{0x00,0x7e,0x21,0x21,0x21,0x7e},/*A*/
                               
{0x00,0x7f,0x49,0x49,0x49,0x36},/*B*/
                               
{0x00,0x3e,0x41,0x41,0x41,0x22},/*C*/
                               
{0x00,0x7f,0x41,0x41,0x22,0x1c},/*D*/
                               
{0x00,0x7f,0x49,0x49,0x49,0x49},/*E*/
                               
{0x00,0x7f,0x09,0x09,0x09,0x01},/*F*/
                               
{0x00,0x3e,0x41,0x49,0x49,0x7a},/*G*/
                               
{0x00,0x7f,0x08,0x08,0x08,0x7f},/*H*/
                               
{0x00,0x41,0x7f,0x41,0x00,0x00},/*I*/
                               
{0x00,0x20,0x40,0x41,0x3f,0x01},/*J*/
                               
{0x00,0x7f,0x08,0x14,0x22,0x41},/*K*/
                               
{0x00,0x7f,0x40,0x40,0x40,0x40},/*L*/
                               
{0x00,0x7f,0x02,0x0c,0x02,0x7f},/*M*/
                               
{0x00,0x7f,0x04,0x08,0x10,0x7f},/*N*/
                               
{0x00,0x3e,0x41,0x41,0x41,0x3e},/*O*/
                               
{0x00,0x7f,0x09,0x09,0x09,0x06},/*P*/
                               
{0x00,0x3e,0x41,0x41,0x41,0x3e},/*Q*/
                               
{0x00,0x7f,0x09,0x19,0x29,0x46},/*R*/
                               
{0x00,0x46,0x49,0x49,0x49,0x31},/*S*/
                               
{0x00,0x01,0x01,0x7f,0x01,0x01},/*T*/
                               
{0x00,0x3f,0x40,0x40,0x40,0x3f},/*U*/
                               
{0x00,0x1f,0x20,0x40,0x20,0x1f},/*V*/
                               
{0x00,0x3f,0x40,0x38,0x40,0x3f},/*W*/
                               
{0x00,0x63,0x14,0x08,0x14,0x63},/*X*/
                               
{0x00,0x07,0x08,0x70,0x08,0x07},/*Y*/
                               
{0x00,0x61,0x51,0x49,0x45,0x43},/*Z*/
                              };
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_Command1
// 入口参数:  nCommand 命令字
// 函数功能: 写指令代码子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
void LCD_Command1(unsigned char nCommand)
{
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD1;       //设置读状态字地址
    CRADD1=nCommand;         //写指令代码
    }
//--------------------------------------------------------------------------------------------------
// 函数名称:  WRITE_showDATA1
// 入口参数:  show_DATA 写入SED1520-1内部显示RAM的数据
// 函数功能: 写显示数据子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
void WRITE_showDATA1(unsigned char show_DATA)
{
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD1;       //设置读状态字地址
    DRADD1=show_DATA;         //写指令代码
    }
//--------------------------------------------------------------------------------------------------
// 函数名称:  READ_showDATA1
// 入口参数:  show_DATA 读出SED1520-1内部显示RAM的数据
// 函数功能: 读显示数据子程序(SED1520-1)
//--------------------------------------------------------------------------------------------------
unsigned char READ_showDATA1()
  {   
    unsigned char show_DATA;
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD1;        //设置读状态字地址
    show_DATA=DRADD1;         // 读数据
	return(show_DATA);        //返回显示区数据 
    }
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_Command2
// 入口参数:  nCommand 命令字
// 函数功能: 写指令代码子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
void LCD_Command2(unsigned char nCommand)
{
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD2;       //设置读状态字地址
    CRADD2=nCommand;         //写指令代码
    }
//--------------------------------------------------------------------------------------------------
// 函数名称:  WRITE_showDATA2
// 入口参数:  show_DATA 写入SED1520-2内部显示RAM的数据
// 函数功能: 写显示数据子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
void WRITE_showDATA2(unsigned char show_DATA)
{
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD2;       //设置读状态字地址
    DRADD2=show_DATA;         //写指令代码
    }
//--------------------------------------------------------------------------------------------------
// 函数名称:  READ_showDATA2
// 入口参数:  show_DATA 读出SED1520-2内部显示RAM的数据
// 函数功能: 读显示数据子程序(SED1520-2)
//--------------------------------------------------------------------------------------------------
unsigned char READ_showDATA2()
  {   
    unsigned char show_DATA;
    unsigned char state_temp;
	while(state_temp&0x80==1) //判"忙"标志为"0"否, 否再读
	state_temp=CRADD2;        //设置读状态字地址
    show_DATA=DRADD2;         // 读数据
	return(show_DATA);        //返回显示区数据 
    }//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_Command
// 入口参数:  nCommand 命令字
// 函数功能: 把命令字写入两个SED1520
//--------------------------------------------------------------------------------------------------
void LCD_Command(unsigned char nCommand)
      {
      LCD_Command1(nCommand);
      LCD_Command1(nCommand);
       }
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_SetRam
// 入口参数:  bChip2,ndata 
//             bChip2用于选择控制器 bChip2=0选择SED1520-1
//                                   bChip2=1选择SED1520-2
//             ;ndata是要写入的数据
// 函数功能: 把显示数据写入其中一个SED1520
//--------------------------------------------------------------------------------------------------
void LCD_SetRam(bit bChip2,unsigned char ndata)
{
       if(!bChip2)
    {
    WRITE_showDATA1(ndata);
    }
    else
    {
    WRITE_showDATA2(ndata);
    }
}
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_Write
// 入口参数: npage, ncolumn,ndata 
//            npage取值0~7;当取0~3时在SED1520-1;
//                          当取4~1时在SED1520-2;
//            ncolumn取 0~60
//             ;ndata是要写入的数据
// 函数功能: 把显示数据写入指定的位置
//--------------------------------------------------------------------------------------------------
void LCD_Write(unsigned char npage,unsigned char ncolumn,unsigned char ndata)
{
    LCD_SetPage(npage%4);
    LCD_SetColumn(ncolumn);
    LCD_SetRam(npage>3,ndata);   
}
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_PageWrite
// 入口参数: npage,*ndata
//            npage取值0~7;当取0~3时在SED1520-1;
//                          当取4~1时在SED1520-2;
//             *ndata是要写入的数据的地址指针
// 函数功能: 把显示数据写入指定的位置
//--------------------------------------------------------------------------------------------------
void LCD_PageWrite(unsigned char npage,unsigned char idata *ndata)
{
    unsigned char i;
    bit bChip2=npage>3;
    LCD_SetPage(npage%4);
    LCD_SetColumn(0);
    for(i=0;i<61;i++)
        LCD_SetRam(bChip2,ndata[i]);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_Init
// 函数功能: 初始化SED1520
//--------------------------------------------------------------------------------------------------
void LCD_Init()
{
    LCD_Command(LCD_RESET);
    LCD_Command(0xa0);
    LCD_Command(LCD_DUTY32);
    LCD_Command(0xa4);
}
//--------------------------------------------------------------------------------------------------
// 函数名称: GetIndex
// 入口参数: szText
//            szText表示要显示的字符
// 返回值:   GetIndex
//            要显示的字符在字摩存储区的位置(第几个子模)
// 函数功能: 查询字符在字模存储区的位置
//--------------------------------------------------------------------------------------------------
unsigned char GetIndex(unsigned char szText)
{
   unsigned char code TAB[100]={ 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q'
,'R','S','T','U','V','W','X','Y','Z'};
    unsigned char i;
    for(i=0;i<=26;i++)        
	if(szText==TAB[i]) return i;
    return 0x00;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: GetTextFont
// 入口参数: index
//            index表示要查询第几个字模(所有的子模预先存在程序存储区)
// 返回值:   Font 
//            6个字节的font用于存储字模,返回字模存储区的首地址
// 函数功能: 查询字符的字模
//--------------------------------------------------------------------------------------------------
unsigned char *GetTextFont(unsigned char index)
{
    static unsigned char Font[6];
    unsigned char i;
    for(i=0;i<6;i++)
        Font[i]=ASCII[index][i];
    return Font;
}
//--------------------------------------------------------------------------------------------------
// 函数名称: LCD_TextOut
// 入口参数: x,y,*szText
//            x,y用于指定显示区的位置
//            *szText是要显示字符字模存储区的首地址
// 函数功能: 在指定的位置显示一个字符
//--------------------------------------------------------------------------------------------------
void LCD_TextOut(unsigned char x,unsigned char y,unsigned char *szText)
{
    unsigned char i;
    bit bChip2;
    x%=20;
    y%=4;
    if(x>=10)
    {
    x-=10;
    y+=4;
    }
    bChip2=y>3;
    LCD_SetPage(y%4);
    LCD_SetColumn(x*6);
    for(i=0;i<6;i++) LCD_SetRam(bChip2,szText[i]);
}
//--------------------------------------------------------------------------------------------------
// 函数名称:Printf
// 入口参数: x,y,*szText
//            x,y用于指定显示区的初始位置
//            *SHOW_WORD指向要显示字符数组
// 函数功能: 从指定的位置开始连续显示字符,最多显示20个字符
//--------------------------------------------------------------------------------------------------
void Printf(unsigned char x,unsigned char y,unsigned char *SHOW_WORD)
{
    unsigned char *Text;
    while(*SHOW_WORD)
    {
        Text=GetTextFont(GetIndex(*SHOW_WORD));
        LCD_TextOut(x++,y,Text);
        if(x==20) break;
        SHOW_WORD++;
    }
}


⌨️ 快捷键说明

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