搜索
bottom↓
回复: 9

CVAVR 写的 LCD12864(QC12864B 带字库 控制器ST7920)程序

[复制链接]

出0入0汤圆

发表于 2010-11-14 12:56:43 | 显示全部楼层 |阅读模式
/////////////////////////////////////////////////////////////////////
/*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)
    {
        ;//原地踏步
    }
}


实物照片 (原文件名:截图05.jpg)

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-11-14 21:38:08 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-14 21:54:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-4 15:58:50 | 显示全部楼层
楼主 你好 我把你的程序放在ICC里面运行,改了相应的宏定义,编译没错,但就是液晶显示不正常,乱码了,是怎么一回事呀?

出0入0汤圆

发表于 2011-1-14 00:42:37 | 显示全部楼层
谢谢楼主共享

出0入0汤圆

 楼主| 发表于 2011-4-27 16:59:08 | 显示全部楼层
回复【3楼】All-Star
-----------------------------------------------------------------------

我用的是CVAVR 编译软件

出0入0汤圆

发表于 2011-4-27 19:11:24 | 显示全部楼层
回复【3楼】All-Star
-----------------------------------------------------------------------

你好!我也是用ICC编译,宏定义我也改了,但就是编译出错,就是提示Display_str(0x80,"济南策略电子");  这几个显示的句子出错,我找了很久都找不出那么出问题,请楼主指教!!谢谢

出0入0汤圆

发表于 2011-8-26 09:17:56 | 显示全部楼层
不懂啊。。。。控制器怎么用的啊

出0入0汤圆

发表于 2012-8-13 16:55:01 | 显示全部楼层
mark    学习了

出0入0汤圆

发表于 2012-12-22 21:20:50 | 显示全部楼层
试了,有用,谢谢啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表