#include "lcd12864.h"
#include "key.h"
#include "math.h"
code uchar dis_one[] = {"示波器"};
code uchar dis_two[] = {"1 波形显示"};
code uchar dis_three[] = {"2 频率显示"};
code uchar dis_four[] = {" "};
code uchar dis_five[] = {">"};
code uchar dis_six[] = {"频率:"};
code uchar number[12] = {'0','1','2','3','4','5','6','7','8','9','.','v'};
code uchar uint[3][3] = {"Hz", "Khz"};
/****************************************************************
*函数名称:LCD_BUSY_Bit
*函数功能:检测忙标志
*入口参数:无
*返回参数:返回AC的地址
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void LCD_BUSY_Bit(void)
{
// bit byteData; //数据位
// do
// { //循环开始
// EN = 0; //使能关
RS = 0; // 命令
RW = 1; // 读
EN = 1; //使能开
LCD_DATA = 0xff; //拉高数据口电位
// byteData = LCD_BUSY; //取状态字DB07的结果
// }
while((LCD_DATA & 0x80) == 0x80); //循环终点 读到 忙位为0退出,否则继续读忙。
// return((LCD_DATA & 0x7F) + 0x80); //返回AC的值
EN = 0; //使能关
}
/****************************************************************
*函数名称:LCD_Read_Data
*函数功能:读取数据
*入口参数:无
*返回参数:返回AC的地址数据
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
uchar LCD_Read_Data(void)
{
uchar temp;
//LCD_BUSY_Bit(); //忙标志检测
LCD_DATA = 0xFF; //数据写入数据口
RS = 1; //数据方式
RW = 1; //读LCD
EN = 1; //使能开
delay_ms(1);
temp = LCD_DATA;
EN = 0; //使能关
return(temp); //返回AC地址数据
}
/****************************************************************
*函数名称:LCD_Read_dat_I
*函数功能:读取指定位置的数据
*入口参数:无
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
//void LCD_Read_dat_I(uchar *xp,uchar *yp)
//{
// wirte_com(*yp); //写竖坐标(0x80-0x9f)
// wirte_com(*xp); //写横坐标(AC地址) 上半屏(0x80-0x87) 下半屏(0x88-0x90)
// LCD_Read_Data(); //试读
// *xp = LCD_Read_Data(); //读高字节并返回给xp
// *yp = LCD_Read_Data(); //读低字节并返回给yp
//}
/****************************************************************
*函数名称:wirte_com
*函数功能:写入命令
*入口参数:输入指令
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void wirte_com(uchar com)
{
LCD_BUSY_Bit();
RS = 0;
RW = 0;
EN = 0;
LCD_DATA = com;
delay_ms(1);
EN = 1;
delay_ms(1);
EN = 0;
}
/****************************************************************
*函数名称:write_data
*函数功能:写入数据
*入口参数:输入数据
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void wirte_data(uchar dat)
{
LCD_BUSY_Bit();
RS = 1;
RW = 0;
EN = 0;
LCD_DATA = dat;
delay_ms(1);
EN = 1;
delay_ms(1);
EN = 0;
}
/****************************************************************
*函数名称:lcd_clear
*函数功能:绘画清屏
*入口参数:输入数据
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void lcd_clear(void)
{
uchar x,y;
for(y = 0; y < 64; y++)
{
for(x = 0; x < 16; x++)
{
wirte_com(0x34);
wirte_com(0x80 + y);
wirte_com(0x80 + x);
wirte_com(0x30);
wirte_data(0x00);
wirte_data(0x00);
}
}
}
void lcd_clear_piont(void)
{
uchar x,y;
for(y = 16; y < 32; y++)
{
for(x = 0; x < 16; x++)
{
wirte_com(0x34);
wirte_com(0x80 + y);
wirte_com(0x80 + x);
wirte_com(0x30);
wirte_data(0x00);
wirte_data(0x00);
}
}
}
/****************************************************************
*函数名称:lcd_point
*函数功能:画点
*入口参数:坐标和命令 1 画点 0 点亮
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void lcd_point(uchar x, uchar y, uchar color)
{
uchar h=0,w=0,step,row,slip;
wirte_com(0x34); //关闭绘图
wirte_com(0x36); //打开绘图
slip = x >> 4; //计算横坐标AC步进
step = x&0x0f;
if(y < 32) //选择下半屏
{
row = y;
}
else
{
row = y - 32; //计算在下半屏的数据
slip += 8;
}
wirte_com(row + 0x80);
wirte_com(slip + 0x80);
LCD_Read_Data();
h = LCD_Read_Data();
w = LCD_Read_Data();
wirte_com(row + 0x80);
wirte_com(slip + 0x80);
if(step < 8)
{
switch(color)
{
case 0:h &=(~(0x01<<(7-step))); break; //变暗 ,看不见
case 1:h |=(0x01<<(7-step)); break; //变亮 ,看得见
case 2:h ^=(0x01<<(7-step)); break; //反转
default:break;
}
wirte_data(h);
wirte_data(w);
}
else
{
switch(color)
{
case 0:w &=(~(0x01<<(15-step))); break; //变暗 ,看不见
case 1:w |=(0x01<<(15-step)); break; //变亮 ,看得见
case 2:w ^=(0x01<<(15-step)); break; //反转
default:break;
}
wirte_data(h);
wirte_data(w);
}
wirte_com(0x30);
}
/****************************************************************
*函数名称:lcd_point
*函数功能:显示位置
*入口参数:x,y 坐标
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==1)
{
X=0x80;
}
else if (X==2)
{
X=0x90;
}
else if (X==3)
{
X=0x88;
}
else if (X==4)
{
X=0x98;
}
pos = X+Y ;
wirte_com(pos); //显示地址
}
//void local_image(float i,char o,char p,const unsigned char *dat) //i,j,分别为上屏和下屏
//{
// int x,y;
// wirte_com(0x3e); //扩展指令集动作,绘图显示ON
// for(y=0;y<16*i;y++) //送上半屏显示数据
// {
// wirte_com(0x80|y+o); //送显示Y坐标0x80-0x9f
// wirte_com(p); //送显示X坐标0x80,送显示X坐标0x88
// for(x=0;x<16;x++)
// {
// wirte_data(*dat);
// dat++;
// }
// }
// wirte_com(0x30); //扩展指令集动作,绘图显示ON
//}
/****************************************************************
*函数名称:LCD_Init
*函数功能:屏幕初始化
*入口参数:无
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4-27
***************************************************************/
void LCD_Init(void)
{
wirte_com(0x30); //基本指令操作
delay_ms(1);
wirte_com(0x0C); //显示开,关光标
delay_ms(1);
wirte_com(0x01); //清除LCD的显示内容
delay_ms(1);
}
/****************************************************************
*函数名称:interfacial_init
*函数功能:界面初始化
*入口参数:无
*返回参数:无
*制作作者:湖北理工电子技术协会
* 制作日期:2017-4
基于51单片机的SPI发送接收并显示到LCD上
需积分: 5 139 浏览量
2023-08-30
14:55:38
上传
评论 1
收藏 47KB 7Z 举报
Dev_XH
- 粉丝: 209
- 资源: 11
最新资源
- Picasso_v3.1 2.ipa
- chromedriver-mac-arm64.zip
- 蓝zapro.apk
- chromedriver-linux64.zip
- UCAS研一深度学习实验-MNIST手写数字识别python源码+详细注释(高分项目)
- 基于Python和PyTorch框架完成的一个手写数字识别实验源码(带MINIST手写数字数据集)+详细注释(高分项目)
- 基于Matlab在MNIST数据集上利用CNN完成手写体数字识别任务,并实现单层CNN反向传播算法+源代码+文档说明(高分项目)
- NVIDIA驱动、CUDA和Pytorch及其依赖
- 基于SVM多特征融合的微表情识别python源码+项目说明+详细注释(高分课程设计)
- html动态爱心代码一(附源码)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈