|
/////////////////////////////////////////////////////////////////////
/*This program was produced by the CodeWizardAVR V1.25.1 Standard */
/*LCD型号:QC12864B(带汉字库)或兼容型号 */
/*控制器 : ST7920 */
/*author:cocoguojia */
/*Chip type : ATmega16L */
/*Program type : Application */
/*Clock frequency : 7.372800 MHz */
/*Memory model : Small */
/*External SRAM size : 0 */
/*Data Stack size : 256 */
/* */
/*1~~~20 GND VCC VO RS RW E DB0~DB7 PSB NC RST VOUT A K */
/*A为背光阳极 VO为对比度调节 VOUT悬空 */
/*注意 CQ12864B 的RST是低电平复位,所以显示时要置高 */
/*不同型号复位电平可能不一样 */
/////////////////////////////////////////////////////////////////////
//修改自网友资料,但我不知道原作者是谁,在此向他/她致谢
//网上CVAVR写的12864代码比较少,我也是用CVAVR的老菜鸟
//原作者是用ICC写的C代码,我改成CVAVR的,方便广大CVAVR的朋友们参考
//【尊重版权和电子工程师的劳动】
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//头文件文件
#include <mega16.h>
#include <delay.h>
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//定义变量区
#define u8 unsigned char
#define u16 unsigned int
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//定义IO操作区
#define RS_CLR PORTB.0=0
#define RS_SET PORTB.0=1
#define RS_DIRECTION_OUT DDRB.0=1
#define EN_CLR PORTB.4=0
#define EN_SET PORTB.4=1
#define EN_DIRECTION_OUT DDRB.4=1
#define RW_CLR PORTB.1=0
#define RW_SET PORTB.1=1
#define RW_DIRECTION_OUT DDRB.1=1
#define RST_CLR PORTB.7=0
#define RST_SET PORTB.7=1
#define RST_DIRECTION_OUT DDRB.7=1
#define RSB_CLR PORTB.5=0
#define RSB_SET PORTB.5=1
#define RSB_DIRECTION_OUT DDRB.5=1
#define DB_PORT PORTA
#define DB_DIRECTION_OUT DDRA=0XFF;
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//IO口初始化子程序
void system_init(void)
{
RS_DIRECTION_OUT;
EN_DIRECTION_OUT;
RW_DIRECTION_OUT;
RST_DIRECTION_OUT;
DB_DIRECTION_OUT;
RSB_DIRECTION_OUT;
RW_CLR;//一直是低电平,用硬件置低也可
RST_SET;//一直是高电平,用硬件置高也可
RSB_SET;//一直是高电平,用硬件置高也可
DB_PORT = 0xFF;
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
// 显示屏命令写入函数
void LCD_write_com(u8 com)
{
RS_CLR;
EN_SET;
DB_PORT = com;
delay_ms(1);
EN_CLR;
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
// 显示屏数据写入函数
void LCD_write_data(u8 data)
{
RS_SET;
EN_SET;
DB_PORT = data;
delay_ms(1);
EN_CLR;
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//显示屏初始化函数
void LCD_init(void)
{
LCD_write_com(0x34); //扩充指令操作/8位数据
delay_ms(3);
LCD_write_com(0x30); //基本指令操作/8位数据
delay_ms(3);
//LCD_write_com(0x0f); //显示开,光标开,允许闪烁
LCD_write_com(0x0c); //显示开,光标关
delay_ms(3);
LCD_write_com(0x01); //清除LCD的显示内容
delay_ms(5);
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//显示屏清空显示
void LCD_clear(void)
{
LCD_write_com(0x30);
LCD_write_com(0x01);
delay_ms(5);
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
//函数名称:DisplayCgrom
//功能:在屏上地址是addr的地方 显示CGROM里的汉字(*str)
void Display_str(u8 addr,u8 flash *str)
{
LCD_write_com(addr);
delay_ms(5);
while(*str != '\0')
{
LCD_write_data(*str);
str++;
delay_ms(5);
}
}
///////////////////////////////////////////////////
///////////////////////////////////////////////////
// 主程序
void main(void)
{
system_init(); //系统初始化,设置IO口属性
LCD_clear(); //清屏
delay_ms(2000); //延时待稳定
LCD_clear(); //再清一次屏,做到干干净净 ^_^
LCD_init(); //液晶参数初始化设置
//开始显示信息
Display_str(0x80,"济南策略电子");
Display_str(0x88,"旺:cocoguojia");
Display_str(0x90,"80后 天道酬勤");
Display_str(0x98,"电话:15064016791");
while(1)
{
;//原地踏步
}
}
![](http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_597822HDFLGW.jpg)
实物照片 (原文件名:截图05.jpg) |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|