📄 dds9954.c
字号:
RS = 0; //指令
RW = 0; //写模式
}
P2=uc_Content;//数据放到P1口上
E = 1;
_nop_();//很重要
_nop_();
_nop_();
E = 0;
}
//********************************************
//*函数名称:uc_Parallel_Read_LCD_Data *
//*函数功能:并行读LCD数据 *
//*形式参数:无 *
//*形参说明:无 *
//*返回参数:读回的数据 *
//*使用说明:无 *
//********************************************
uchar uc_Parallel_Read_LCD_Data(void)
{
uchar uc_Content;
Parallel_Check_Busy();
P2 = 0xff; //输入前置1
RS = 1; //数据
RW = 1; //读模式
E = 1; //使能
uc_Content = P2; //P1口的内容放到变量中
E = 0;
return uc_Content;
}
//*************************************************************
//*函数名称:void Parallel_DDRAM_Address_Set(uchar ucDDramAdd) *
//*函数功能:设定DDRAM(文本区)地址到地址计数器AC *
//*形式参数:uchar ucDDramAdd *
//*行参说明:具体地址 *
//*格式说明: *
//* RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 *
//* 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 *
//*返回参数:无 *
//*使用说明: *
//* 第一行地址:80H~8FH *
//* 第二行地址:90H~9FH *
//* 第三行地址:A0H~AFH *
//* 第四行地址:B0H~BFH *
//*************************************************************
void Parallel_DDRAM_Address_Set(uchar ucDDramAdd)
{
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Parallel_Write_LCD(COMMAND,ucDDramAdd); //设定DDRAM地址到地址计数器AC
}
//*************************************************************
//*函数名称:void Parallel_CGRAM_Address_Set(uchar ucCGramAdd) *
//*函数功能:设定CGRAM(自定义字库区)地址到地址计数器AC *
//*形式参数:uchar ucCGramAdd *
//*形参说明:具体地址 *
//*格式说明: *
//* RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 *
//* 0 0 0 1 AC5 AC4 AC3 AC2 AC1 AC0 *
//*返回参数:无 *
//*使用说明:地址范围为40H~3FH *
//*************************************************************
void Parallel_CGRAM_Address_Set(uchar ucCGramAdd)
{
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Parallel_Write_LCD(COMMAND,ucCGramAdd); //设定CGRAM地址到地址计数器AC
}
//*******************************************************************************
//*函数名称:void Parallel_GDRAM_Address_Set(uchar ucGDramAdd) *
//*函数功能:设定GDRAM(图形区)地址到地址计数器AC *
//*形式参数:uchar ucGDramAdd *
//*形参说明:具体地址值 *
//* RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 *
//* 0 0 1 AC6 AC5 AC4 AC3 AC2 AC1 AC0 *
//* 先设定垂直位置再设定水平位置(连续写入两个字节完成垂直和水平位置的设置) *
//* 垂直地址范围:AC6~AC0 *
//* 水平地址范围:AC3~AC0 *
//*返回参数:无 *
//*使用说明:必须在扩展指令集的情况下使用 *
//*******************************************************************************
void Parallel_GDRAM_Address_Set(uchar ucGDramAdd)
{
Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
Parallel_Write_LCD(COMMAND,ucGDramAdd);
}
//*******************************************
//*函数名称:void Parallel_Init_LCD(void) *
//*函数功能:并行初始化LCD *
//*形式参数:无 *
//*形参说明:无 *
//*返回参数:无 *
//*使用说明:无 *
//*******************************************
void Parallel_Init_LCD(void)
{
RST = 1; //复位后拉高,停止复位
PSB = 1; //选择并行传输模式
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Parallel_Write_LCD(COMMAND,CLEAR_SCREEN); //清屏,地址指针指向00H
Parallel_Write_LCD(COMMAND,0x06); //光标的移动方向
Parallel_Write_LCD(COMMAND,0x0c); //开显示,关游标
}
//********************************************************
//*函数名称:void Parallel_Clear_Ram(void) *
//*函数功能:并行清屏函数 *
//*形式参数:无 *
//*形参说明:无 *
//*返回参数:无 *
//*使用说明:DDRAM填满20H,并设定DDRAM AC到00H *
//*格式说明: *
//* RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 *
//* 0 0 0 0 0 0 0 0 0 1 *
//********************************************************
void Parallel_Clear_Ram(void)
{
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令集
Parallel_Write_LCD(COMMAND,CLEAR_SCREEN); //清屏
}
//*****************************************************
//*函数名称:void Parallel_Graph_Mode_Set(bit bSelect) *
//*函数功能:打开或关闭绘图显示 *
//*形式参数:bit bSelect *
//*形参说明:打开或关闭绘图显示的标志位,1打开,0关闭 *
//*格式说明: *
//* RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 *
//* 0 0 0 0 1 DL X RE G X *
//* DL:0,4bitMPU控制界面 *
//* DL:1,8bitMPU控制界面 *
//* RE:0,基本指令集 *
//* RE:1,扩充指令集 *
//* G :0,绘图显示OFF *
//* G :1,绘图显示ON *
//*返回参数:无 *
//*使用说明:无 *
//*****************************************************
void Parallel_Graph_Mode_Set(bit bSelect)
{
Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION); //扩展指令集
if(bSelect)
{
Parallel_Write_LCD(COMMAND,GRAPH_ON); //打开绘图模式
}
else
{
Parallel_Write_LCD(COMMAND,GRAPH_OFF); //关闭绘图模式
}
}
//*********************************************************************************
//*函数名称:void Parallel_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p) *
//*函数功能:在(文本区)ucAdd指定的位置显示一串字符(或是汉字或是ASCII或是两者混合) *
//*形式参数:uchar ucAdd,uchar code *p *
//*形参说明:指定的位置,要显示的字符串 *
//*地址必须是:80H~8FH,90H~9FH,88H~AFH,98H~BFH *
//*返回参数:无 *
//*使用说明:使用之前要初始化液晶 *
//*********************************************************************************
void Parallel_DisplayStrings_WithAddress(uchar ucAdd,uchar code *p)
{
uchar length;
length = strlen(p);
Parallel_Write_LCD(COMMAND,BASIC_FUNCTION); //基本指令动作
Parallel_DDRAM_Address_Set(ucAdd);
for( ; length ; length -- )
Parallel_Write_LCD(DATA, *(p++));
}
//****************************************************************
//*函数名称:void Parallel_ImgDisplay(unsigned char code *img) *
//*函数功能:全屏显示128*64个象素的图形 *
//*形式参数:unsigned char code *img *
//*形参说明:要显示的图形 *
//*液晶屏坐标说明: *
//* _______________________________________________ *
//* |(0,0) (7,0) | *
//* | | *
//* | | *
//* |(0,31) (7,31)| *
//* |(8,0) (15,0)| *
//* | | *
//* | | *
//* |(8,31) (15,31)| *
//* |______________________________________________| *
// *
//返回参数:无 *
//使用说明:此函数适用于RT12864-4M型液晶 *
//****************************************************************
void Parallel_ImgDisplay(unsigned char code *img)
{
uchar i,j;
Parallel_Graph_Mode_Set(0x01); //先关闭图形显示功能
for(j=0;j<32;j++)
{
for(i=0;i<8;i++)
{
Parallel_Write_LCD(COMMAND,0x80+j); //设定垂直坐标
Parallel_Write_LCD(COMMAND,0x80+i); //设定水平坐标
Parallel_Write_LCD(DATA,img[j*16+i*2]); //放入数据高字节
Parallel_Write_LCD(DATA,img[j*16+i*2+1]); //放入数据低字节
}
}
for(j=32;j<64;j++)
{
for(i=0;i<8;i++)
{
Parallel_Write_LCD(COMMAND,0x80+j-32);
Parallel_Write_LCD(COMMAND,0x88+i);
Parallel_Write_LCD(DATA,img[j*16+i*2]);
Parallel_Write_LCD(DATA,img[j*16+i*2+1]);
}
}
Parallel_Graph_Mode_Set(0x00);//最后打开图形显示功能
}
//******************************************************************************
//*函数名称:void Parallel_ImgDisplayCharacter(uchar x,uchar y,uchar code *img) *
//*函数功能:使用绘图的方法,在(x,y)处画一个16*16点阵的图案,也可以是字符 *
//*形式参数:uchar x,uchar y,uchar code *img *
//* x取值范围:0~15 *
//* y取值范围:0~32 (针对RT12864-4M型液晶) *
//*形参说明:坐标水平位置,坐标垂直位置,要显示的图形 *
//*液晶屏坐标说明: *
//* _______________128个象素______________________ *
//* |(0,0) (7,0)| *
//* | | *
//* 6 | | *
//* 4 |(0,31) (7,31)| *
//* 个 |(8,0) (15,0)| *
//* 象 | | *
//* 素 | | *
//* |(8,31)________________________________(15,31)| *
//* *
//*返回参数:无 *
//*使用说明:此函数适用于RT12864-4M型液晶 *
//******************************************************************************
void Parallel_ImgDisplayCharacter(uchar x,uchar y,uchar code *img)
{
uchar i;
Parallel_Graph_Mode_Set(0x01); //先关闭图形显示功能
Parallel_Write_LCD(COMMAND,EXTEND_FUNCTION);
for(i=0;i<16;i++)
{
// Parallel_Write_LCD(COMMAND,0x80+y+i);
//Parallel_Write_LCD(COMMAND,0x80+x);
Parallel_GDRAM_Address_Set(0x80+y+i);
Parallel_GDRAM_Address_Set(0x80+x);
Parallel_Write_LCD(DATA,img[i*2]);
Parallel_Write_LCD(DATA,img[i*2+1]);
}
Parallel_Graph_Mode_Set(0x00); //最后打开图形显示功能
}
void main()
{
PSB=0;
Parallel_Init_LCD();
Parallel_DisplayStrings_WithAddress(0x80,Tab1);
Parallel_DisplayStrings_WithAddress(0x90,Tab2);
Parallel_DisplayStrings_WithAddress(0x88,Tab3);
Parallel_DisplayStrings_WithAddress(0x98,Tab4);
IO9954_Init();
PS1=0;
PS0=0;
AD9954_LinearSweep_Init();
while(1)
{
PS0=0;
nNop(2);
PS0=1;
AD9954_LinearSweep_Freq();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -