12864c语言程序,LCM12864 C语言驱动程序

12864c语言程序,LCM12864 C语言驱动程序程序说明 LCD 驱动采用 4 位元 这个 4 位元方式 在网上搜索来看 还没有人采用 可以节省 4 位 I O 口 并口方式 晶体 4M 注意此 LCD 有点不同尽量很普通 没有 CS1 CS2 页选择脚 带串口方式 型号是 TS 12864 3 IC16F877A 在屏幕上

/*

程序说明:

LCD驱动采用4位元(这个4位元方式,在网上搜索来看,还没有人采用,可以节省4位I/O口),并口方式,晶体4M,注意此LCD有点不同尽量很普通,没有CS1,CS2页选择脚,带串口方式,型号是TS-12864-3。IC 16F877A。

在屏幕上显示“Atilla tester”

“~_~”

RD7———-LCD D7

RD6———–LCD D6

RD5———–LCD D5

RD4———–LCD D4

RD3———–LCD E

RD2——–  LCD RS

RD1———R/W

/*程序如下/

#include “pic.h”

#define lcd_cursor(x) lcd_write(((x)&0x7F)|0x80)//Set the cursor position

#define  LCD_RS RD2#define  LCD_EN RD3#define  LCD_RW RD1

#define LCD_STROBE ((LCD_EN = 1),(LCD_EN=0))

void delay_10us(unsigned char x){while(x–);}

void delay_ms(unsigned char cnt){unsigned char i;do {i = 4;do {delay_10us(39);} while(–i);} while(–cnt);

}

/* write a byte to the LCD in 4 bit mode */

void lcd_write(unsigned char c){PORTD = (PORTD & 0x0F) | (c & 0xF0); //先送高位D7 D6 D5 D4LCD_STROBE;PORTD = (PORTD & 0x0F) | (c << 4); //再送低位LCD_STROBE;delay_10us(4);}

/* Clear and home the LCD */

void lcd_clear(void){LCD_RS = 0;lcd_write(0x1);delay_ms(2);}

/* write a string of chars to the LCD */

void lcd_puts(const char * s){LCD_RS = 1; // write characterswhile(*s)lcd_write(*s++);}

/* write one character to the LCD */

void lcd_putch(char c){LCD_RS = 1; // write charactersPORTD = (PORTD & 0x0F) | (c & 0xF0); //先送高位LCD_STROBE;PORTD = (PORTD & 0x0F) | (c << 4);   //再送低位LCD_STROBE;delay_10us(4);}

/*Go to the specified position*/void lcd_goto(unsigned char pos){LCD_RS = 0;lcd_write(0x80+pos);}/* initialise the LCD – put into 4 bit mode *///严格按照LCD的复位要求。

void lcd_init(void){LCD_RS = 0;         // write control bytesdelay_ms(40);     // power on delay,wait time>40msPORTD = 0x20;     // Function set,set 4 bit modeLCD_STROBE;delay_10us(10);     //wait time >100uslcd_write(0x20); // Function set:4 bit mode.delay_10us(10);     //wait time >100uslcd_write(0x0C); // display ON/OFF control.delay_10us(10);     //wait time >100uslcd_write(0x01); // display cleardelay_ms(10);       //wait time >10mslcd_write(0x06); // entry mode set}

void main(void)

{TRISD=0X00;PORTD=0X00;lcd_init();lcd_goto(0x00);lcd_puts(“Atilla tester”);lcd_goto(0x11);lcd_puts(“~_~”);while(1);}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178028.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:11
下一篇 2026年3月26日 下午6:12


相关推荐

  • IDEA的基本使用:让你的IDEA有飞一般的感觉[通俗易懂]

    IDEA的基本使用:让你的IDEA有飞一般的感觉[通俗易懂]1.设置maven在File->settings->搜索maven Mavanhomedirectory–设置maven安装包的bin文件夹所在的位置 Usersettingsfile–设置setting文件所在的位置 Localrepository–设置本地仓库的2.IDEA设置代码行宽度在File->settings->E…

    2022年7月21日
    83
  • Linux 内存管理

    Linux 内存管理Linux 内存管理为什么需要内存管理设想一下 CPU 要是直接操作内存的物理地址 那么想要在内存中同时运行两个程序是不可能的 因为第一个程序在一个地址写入一个新值会覆盖第二个程序相同地址上的数据 操作系统为了解决这个问题 避免了两个程序都对绝对物理地址的引用 操作系统为每个进程分配了独立一套虚拟地址 至于虚拟地址是怎么映射到物理地址 对于进程来说是透明的 程序要访问虚拟地址时 由操作系统转换成不同的物理地址 不同进程运行时 写入的是不同的物理地址 这样就不会冲突了 如何管理内存针对虚拟地址空间

    2026年3月17日
    2
  • 剑指Offer面试题:4.从尾到头打印链表建议收藏

    一题目:从尾到头打印链表代码实现采用两种方法实现:(1)不修改原列表,使用stack的方式实现(2)修改原列表,对元列表逆序两种方法都在下面的代码中:

    2021年12月19日
    38
  • linux内核 lock free

    linux内核 lock free//同步问题:对共享数据的访问,需要同步,互斥。在中断,抢占,多CPU,多线程环境下尤其重要。 同步分为: 阻塞同步,非阻塞同步阻塞同步有许多实现方式了:mutex,semaphore.阻塞同步使用不当就可能造成死锁,活锁,优先级反转。非阻塞同步:(现在流行三种) waitfree 很难实现,思想是本线程有限步就完成,完全不用理其余线程。 lock

    2022年7月19日
    18
  • stm32 sd卡读写_sd卡引脚定义图

    stm32 sd卡读写_sd卡引脚定义图SD卡   SD卡(SecureDigitalMemoryCard)即:安全数码卡,它是在MMC的基础上发展而来,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地于便携式装置上使用,例如数码相机、个人数码助理(PDA)和多媒体播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。   SD卡按容量分类,可以分为3类:SD卡、SDHC卡、SDXC…

    2022年10月3日
    6
  • OpenClaw 新手引导向导(CLI)

    OpenClaw 新手引导向导(CLI)

    2026年3月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号