专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
51单片机
液晶驱动程序不易出现错误。。请教大家来看看。。
2019-07-16 06:16
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
14322
4
962
诺基亚
手机
的5110驱动程序
原来的程序不知道是基于什么
单片机
写的
我给改了一下头文件跟位定义。
然后最后编译就剩这几个错误了。错误码都是202具体看图
LCD_write_byte(font6x8[c][line], 1)
for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++
这两个是错误的程序代码
,根据错误码应该是没有定义这两个标识符。。
该如何定义?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
依云个性音响定
2019-07-16 10:26
#include <iom128v.h>
#include <macros.h>
#include <BIT.h>
#include"code_table.c"
#define uchar unsigned char
#define uint unsigned int
//位操作定义
#define SCLK _PA5
#define SDIN _PA4
#define LCD_DC _PA3
#define LCD_CE _PA2
#define LCD_RST _PA1
//函数声明
void delay_us(uint t);
void delay_ms(uint t);
void LCD_init(void);
void LCD_clear(void);
void LCD_write_english_string(uchar X,uchar Y,char *s);
void LCD_write_char(uchar c);
void LCD_write_byte(uchar dat, uchar dc);
void LCD_set_XY(uchar X, uchar Y);
/***********************************************************************
* 函数名称:delay_us()
* 函数功能:16M晶振,延时t微秒
* 入口参数:t 延时t微秒
* 出口参数:无
***********************************************************************/
void delay_us(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=1;j>0;j--);
}
/**********************************************************************
* 函数名称:delay_ms()
* 函数功能:16M晶振,延时t毫秒
* 入口参数:t 延时t毫秒
* 出口参数:无
***********************************************************************/
void delay_ms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=2670;j>0;j--);
}
/**********************************************************************
* 函数名称:LCD_init()
* 函数功能:初始化nokia5110
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_init(void)
{
LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲
delay_us(1);
LCD_RST = 1;
LCD_CE = 0;// 关闭LCD
delay_us(1);
LCD_CE = 1;// 使能LCD
delay_us(1);
LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
LCD_write_byte(0xc8, 0); // 设置偏置电压
LCD_write_byte(0x06, 0); // 温度校正
LCD_write_byte(0x13, 0); // 1:48
LCD_write_byte(0x20, 0); // 使用基本命令
LCD_clear(); // 清屏
LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
LCD_CE = 0; // 关闭LCD
}
/**********************************************************************
* 函数名称:LCD_clear()
* 函数功能:液晶清屏
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_clear(void)
{
uint i;
LCD_write_byte(0x0c, 0);
LCD_write_byte(0x80, 0);
for (i=0; i<504; i++)
LCD_write_byte(0, 1);
}
/**********************************************************************
* 函数名称:LCD_set_XY()
* 函数功能:光标定位x行y列
* 入口参数:X,Y x行y列
* 出口参数:无
**********************************************************************/
void LCD_set_XY(uchar X, uchar Y)
{
LCD_write_byte(0x40 | Y, 0); // column
LCD_write_byte(0x80 | X, 0); // row
}
/***********************************************************************
* 函数名称:LCD_write_char()
* 函数功能:写入1个字符
* 入口参数:c 要写入的数据
* 出口参数:无
**********************************************************************/
void LCD_write_char(uchar c)
{
uchar line;
c -= 32;
for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);//从ACSII码表中读取字节,然后写入液晶
}
/***********************************************************************
* 函数名称LCD_write_english_string()
* 函数功能:写英文字符串
* 入口参数:X,Y,*S------x行y列*s为英文字符串
* 出口参数:无
***********************************************************************/
void LCD_write_english_string(uchar X,uchar Y,char *s)
{
LCD_set_XY(X,Y);//光标定位
while (*s)
{
LCD_write_char(*s);
s++;
}
}
/**********************************************************************
* 函数名称:LCD_write_byte()
* 函数功能:写一个字节
* 入口参数:dat,要写入的字节;command:0为命令,1为数据
* 出口参数:无
***********************************************************************/
void LCD_write_byte(uchar dat, uchar command)
{
uchar i;
LCD_CE = 0;
if (command == 0)
LCD_DC = 0;
else
LCD_DC = 1;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN = 1;
else
SDIN = 0;
SCLK = 0;
dat = dat << 1;
SCLK = 1;
}
LCD_CE = 1;
}
/**********************************************************************
* 函数名称:LCD_write_chinesee()
* 函数功能:写一个汉字
* 入口参数:x,横坐标;y,纵坐标;hz,要显示的汉字
* 出口参数:无
**********************************************************************/
void LCD_write_chinese(unsigned char x, unsigned char y, unsigned char *hz)
{
unsigned char k,i;
for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++)//查找汉字编码表中的汉字
{
if(hz[0] == GB_12[k].Index[0] && hz[1] == GB_12[k].Index[1])
break;
}
LCD_set_XY(x,y); //光标定位
for(i=0;i<12;i++)//先写上半字节
LCD_write_byte(GB_12[k].Msk[i],1);
LCD_set_XY(x,y+1);//光标定位下一行
for(i=12;i<24;i++)//后写下半字节
LCD_write_byte(GB_12[k].Msk[i],1);
}
/***********************************************************************
* 函数名称: LCD_write_chinese_sring()
* 函数功能:写汉字串
* 入口参数:x,横坐标;y,纵坐标;string,要显示的汉字串
* 出口参数:无
***********************************************************************/
void LCD_write_chinese_sring(unsigned char x, unsigned char y,unsigned char *string)
{
unsigned char i=0,j=0,k=0;
while(string[i])
{
LCD_write_chinese(x,y,&string[i]);
x=x+12;
i=i+2;
}
}
void main()
{
DDRA = 0XFF;//液晶引脚,设置为输出
LCD_init(); //初始化液晶
LCD_clear();
LCD_write_chinese_sring(0,0,"距离");
LCD_write_english_string(72,0,"CM");
while(1);
}
加载中...
查看其它4个回答
一周热门
更多
>
相关问题
【东软载波ESF0654 PDS开发板活动】开箱
1 个回答
东软载波ESF0654 PDS开发板外部中断
1 个回答
东软载波ESF0654 PDS开发板高级控制定时器AD16C4T
1 个回答
用串口调试助手为什么只能在hex模式接收发送而在文本模式不行
9 个回答
触摸芯片SC02B/SC04B在地砖灯的设计方案
1 个回答
相关文章
51单片机与蓝牙模块连接
0个评论
51单片机的硬件结构
0个评论
基于51单片机的无线遥控器制作
0个评论
51单片机 AD转换
0个评论
51单片机数码管递增显示
0个评论
如何实现对单片机寄存器的访问
0个评论
基于51单片机的指纹密码锁
0个评论
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
51单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
#include <macros.h>
#include <BIT.h>
#include"code_table.c"
#define uchar unsigned char
#define uint unsigned int
//位操作定义
#define SCLK _PA5
#define SDIN _PA4
#define LCD_DC _PA3
#define LCD_CE _PA2
#define LCD_RST _PA1
//函数声明
void delay_us(uint t);
void delay_ms(uint t);
void LCD_init(void);
void LCD_clear(void);
void LCD_write_english_string(uchar X,uchar Y,char *s);
void LCD_write_char(uchar c);
void LCD_write_byte(uchar dat, uchar dc);
void LCD_set_XY(uchar X, uchar Y);
/***********************************************************************
* 函数名称:delay_us()
* 函数功能:16M晶振,延时t微秒
* 入口参数:t 延时t微秒
* 出口参数:无
***********************************************************************/
void delay_us(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=1;j>0;j--);
}
/**********************************************************************
* 函数名称:delay_ms()
* 函数功能:16M晶振,延时t毫秒
* 入口参数:t 延时t毫秒
* 出口参数:无
***********************************************************************/
void delay_ms(uint t)
{
uint i,j;
for(i=t;i>0;i--)
for(j=2670;j>0;j--);
}
/**********************************************************************
* 函数名称:LCD_init()
* 函数功能:初始化nokia5110
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_init(void)
{
LCD_RST = 0; // 产生一个让LCD复位的低电平脉冲
delay_us(1);
LCD_RST = 1;
LCD_CE = 0;// 关闭LCD
delay_us(1);
LCD_CE = 1;// 使能LCD
delay_us(1);
LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
LCD_write_byte(0xc8, 0); // 设置偏置电压
LCD_write_byte(0x06, 0); // 温度校正
LCD_write_byte(0x13, 0); // 1:48
LCD_write_byte(0x20, 0); // 使用基本命令
LCD_clear(); // 清屏
LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示
LCD_CE = 0; // 关闭LCD
}
/**********************************************************************
* 函数名称:LCD_clear()
* 函数功能:液晶清屏
* 入口参数:无
* 出口参数:无
**********************************************************************/
void LCD_clear(void)
{
uint i;
LCD_write_byte(0x0c, 0);
LCD_write_byte(0x80, 0);
for (i=0; i<504; i++)
LCD_write_byte(0, 1);
}
/**********************************************************************
* 函数名称:LCD_set_XY()
* 函数功能:光标定位x行y列
* 入口参数:X,Y x行y列
* 出口参数:无
**********************************************************************/
void LCD_set_XY(uchar X, uchar Y)
{
LCD_write_byte(0x40 | Y, 0); // column
LCD_write_byte(0x80 | X, 0); // row
}
/***********************************************************************
* 函数名称:LCD_write_char()
* 函数功能:写入1个字符
* 入口参数:c 要写入的数据
* 出口参数:无
**********************************************************************/
void LCD_write_char(uchar c)
{
uchar line;
c -= 32;
for (line=0; line<6; line++)
LCD_write_byte(font6x8[c][line], 1);//从ACSII码表中读取字节,然后写入液晶
}
/***********************************************************************
* 函数名称LCD_write_english_string()
* 函数功能:写英文字符串
* 入口参数:X,Y,*S------x行y列*s为英文字符串
* 出口参数:无
***********************************************************************/
void LCD_write_english_string(uchar X,uchar Y,char *s)
{
LCD_set_XY(X,Y);//光标定位
while (*s)
{
LCD_write_char(*s);
s++;
}
}
/**********************************************************************
* 函数名称:LCD_write_byte()
* 函数功能:写一个字节
* 入口参数:dat,要写入的字节;command:0为命令,1为数据
* 出口参数:无
***********************************************************************/
void LCD_write_byte(uchar dat, uchar command)
{
uchar i;
LCD_CE = 0;
if (command == 0)
LCD_DC = 0;
else
LCD_DC = 1;
for(i=0;i<8;i++)
{
if(dat&0x80)
SDIN = 1;
else
SDIN = 0;
SCLK = 0;
dat = dat << 1;
SCLK = 1;
}
LCD_CE = 1;
}
/**********************************************************************
* 函数名称:LCD_write_chinesee()
* 函数功能:写一个汉字
* 入口参数:x,横坐标;y,纵坐标;hz,要显示的汉字
* 出口参数:无
**********************************************************************/
void LCD_write_chinese(unsigned char x, unsigned char y, unsigned char *hz)
{
unsigned char k,i;
for(k=0;k<sizeof(GB_12)/sizeof(GB_12[0]);k++)//查找汉字编码表中的汉字
{
if(hz[0] == GB_12[k].Index[0] && hz[1] == GB_12[k].Index[1])
break;
}
LCD_set_XY(x,y); //光标定位
for(i=0;i<12;i++)//先写上半字节
LCD_write_byte(GB_12[k].Msk[i],1);
LCD_set_XY(x,y+1);//光标定位下一行
for(i=12;i<24;i++)//后写下半字节
LCD_write_byte(GB_12[k].Msk[i],1);
}
/***********************************************************************
* 函数名称: LCD_write_chinese_sring()
* 函数功能:写汉字串
* 入口参数:x,横坐标;y,纵坐标;string,要显示的汉字串
* 出口参数:无
***********************************************************************/
void LCD_write_chinese_sring(unsigned char x, unsigned char y,unsigned char *string)
{
unsigned char i=0,j=0,k=0;
while(string[i])
{
LCD_write_chinese(x,y,&string[i]);
x=x+12;
i=i+2;
}
}
void main()
{
DDRA = 0XFF;//液晶引脚,设置为输出
LCD_init(); //初始化液晶
LCD_clear();
LCD_write_chinese_sring(0,0,"距离");
LCD_write_english_string(72,0,"CM");
while(1);
}
一周热门 更多>