LCM128645液晶范例(ST7920)

发布者:MysticGlow最新更新时间:2018-01-22 来源: eefocus关键字:LCM128645液晶  ST7920 手机看文章 扫描二维码
随时随地手机看文章

液晶使用ST7920控制器,串并行模式(本范例使用串行)

/* M16驱动LCM128645,液晶芯片ST7920

*/
#include "j.h"
#include

#define light_on cbi(PORTB, 2);
#define light_off sbi(PORTB, 2);

void clear_all(void);
// 显示用指针变量
char *line1;
char *line2;
char *line3;
char *line4;


void cpu_init(void)
{
//----------- IO端口初始化 START -----------------
 PORTA = 0x0;
 DDRA = 0x0;
 
 PORTB = 0xff;
 DDRB = 0xff;

 PORTC = 0x0;
 DDRC = 0x0;

 DDRD = 0x0;  // D口配置为输入
 PORTD = 0xff; // 使能上拉电阻
//----------- IO端口初始化 END -----------------

 wdt_enable(1);        // 看门狗使能  30MS
 ACSR = 0x80;
}


/*****************************************
液晶发送子程序(串行)
输入数据:要发送的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void lcm_out(char a)
{
 char i,d;
 for(i=0;i<8;i++)
 {
  cbi(PORTB,1);
  d=a&0x80;
  if(d)
   sbi(PORTB,0);
  else
   cbi(PORTB,0);
  a<<=1;
  sbi(PORTB,1);
 }
}


/*****************************************
液晶写控制字程序
输入数据:要写入的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void wr_com(uchar a)
{
 uchar s,i;
 s=a&0xf0;
 lcm_out(0xf8);
 lcm_out(s);
 s=a&0x0f;
 s<<=4;
 lcm_out(s);
 
 for( i=0;i<254;i++ )  // 延时
 {
  asm("nop");
 }
}
/*****************************************
液晶写数据字程序
输入数据:要写入的8位数据
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void wr_date(uchar a)
{
 uchar s,i;
 s=a&0xf0;
 lcm_out(0xfa);
 lcm_out(s);
 s=a&0x0f;
 s<<=4;
 lcm_out(s);
 
 for( i=0;i<254;i++ ) // 延时
 {
  asm("nop");
 }
}
/*****************************************
液晶初始化程序
输入数据:无
输出:无
作者:
修改时间:2004-08-11
*****************************************/
void lcm_init(void)
{
 wr_com(0x30);
 delay(1,8000);
 wr_com(0x30);
 delay(1,8000);
 wr_com(0x0c);
 delay(1,8000);
 wr_com(0x01);   // 清屏
 delay(10,8000);   // 清屏
 wr_com(0x60);
 delay(1,8000);
}

void clear_all(void)
{
 wr_com(0x01);   // 清屏
 delay(1,8000);   // 清屏
}

//----------- 整行显示函数 START -----------------
void display(void)
{
 wr_com(0x80);
 while( *line1!=0x00 )
 {
  wr_date(*line1);
  line1++;
 }

 wr_com(0x90);
 while( *line2!=0x00 )
 {
  wr_date(*line2);
  line2++;
 }

 wr_com(0x88);
 while( *line3!=0x00 )
 {
  wr_date(*line3);
  line3++;
 }

 wr_com(0x98);
 while( *line4!=0x00 )
 {
  wr_date(*line4);
  line4++;
 }
 line1 = "";
    line2 = "";
    line3 = "";
    line4 = "";
}
//----------- 整行显示函数 END -----------------


//----------- 系统初始化函数 START -----------------
void system_init(void)
{
 line1 = "";
    line2 = "";
    line3 = "";
    line4 = "";
    light_on
 lcm_init();
}
//----------- 系统初始化函数 END -----------------


int main(void)
{
 delay(200,8000);
 cpu_init();
 system_init();
 while(1)
 {
  line1 = "    欢迎光临    ";
  line2 = "";
  line3 = "    东创科技   ";
  line4 = " www.dycxin.com.cn ";
  display();

  delay(800,8000);
 }
}


关键字:LCM128645液晶  ST7920 引用地址:LCM128645液晶范例(ST7920)

上一篇:1602LCM液晶显示屏的驱动函数和实例(C)
下一篇:8X8 LED点阵显示原理与编程技术

小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved