完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
//#include //#include //#include"code_table.c" #define uchar unsigned char #define uint unsigned int //位操作定义 ***it SCLK=P1^0; ***it SDIN=P1^1; ***it LCD_DC=P1^2; ***it LCD_CE=P1^3; ***it LCD_RST=P1^4; //函数声明 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 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); } |
|
|
|
#include
#include #include #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 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); } |
|
|
|
哦呀丫丫。。这几个解决了
不过有有个新的问题。。 DDRA = 0XFF;//液晶引脚,设置为输出 这句错误 在主函数里第一句。。谁看看啥意思?找不到这个ddra的定义。。不知道这个ddra干啥用类 |
|
|
|
原来的程序好象是基于avr单片机编写的。avr里那个ddra啥意思?
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
644 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1819 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1262 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1136 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1357 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12024 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 05:49 , Processed in 0.520817 second(s), Total 75, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号