问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求STC12C5A60S2单片机的12864液晶串行程序?

发布网友 发布时间:2022-05-15 15:25

我来回答

3个回答

热心网友 时间:2023-09-07 00:46

不知你的液晶是什么控制器的,这个是st7920的

/********************************************************************
* 文件名 : 串行12864显示.c
* 描述 : 该程序实现了12864以串行的方式进行通信。
* 创建人 : 东流,2009年4月10日
* 版本号 : 2.0
***********************************************************************/
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

sbit CS=P2^5; //片选信号
sbit SID=P2^6;//数据信号
sbit SCLK=P2^7;//时钟信号
sbit RST=P2^2;//复位信号
sbit CH = P2^4;//并行、串行选择信号

/********************************************************************
* 名称 : delay()
* 功能 : 延时,延时时间为 100us * t。这是通过软件延时,有一定误差。
* 输入 : t
* 输出 : 无
***********************************************************************/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0; i<t; i++)
for(j=0; j<10; j++);
}

/********************************************************************
* 名称 : sendbyte()
* 功能 : 按照液晶的串口通信协议,发送数据
* 输入 : zdata
* 输出 : 无
***********************************************************************/
void sendbyte(unsigned char zdata)
{
unsigned int i;
for(i=0; i<8; i++)
{
if((zdata << i) & 0x80)
{
SID = 1;
}
else
{
SID = 0;
}
SCLK = 0;
SCLK = 1;
}
}

/********************************************************************
* 名称 : write_com()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_com(unsigned char cmdcode)
{
CS = 1;
sendbyte(0xf8);
sendbyte(cmdcode & 0xf0);
sendbyte((cmdcode << 4) & 0xf0);
delay(2);
}

/********************************************************************
* 名称 : write_data()
* 功能 : 写串口指令
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void write_data(unsigned char Dispdata)
{
CS = 1;
sendbyte(0xfa);
sendbyte(Dispdata & 0xf0);
sendbyte((Dispdata << 4) & 0xf0);
delay(2);
}

/********************************************************************
* 名称 : lcdinit()
* 功能 : 初始化函数
* 输入 : cmdcode
* 输出 : 无
***********************************************************************/
void lcdinit()
{
RST = 0;
delay(100);
RST = 1;
delay(20000);
write_com(0x30);
delay(50);
write_com(0x0c);
delay(50);
}

/********************************************************************
* 名称 : hzkdis()
* 功能 : 显示字符串
* 输入 : *s
* 输出 : 无
***********************************************************************/
void hzkdis(unsigned char code *s)
{
while(*s > 0)
{
write_data(*s);
s++;
delay(50);
}
}

/********************************************************************
* 名称 : Test()
* 功能 : 显示子函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Test()
{
write_com(0x03);
delay(50);
write_com(0x81);
hzkdis(" HOT-51");
write_com(0x91);
hzkdis("单片机开发板");
write_com(0x89);
hzkdis(" ");
write_com(0x98);
hzkdis(" 东流电子");
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Main()
{
CH = 0;
delay(1);
lcdinit();
delay(10);
while(1)
{
Test();
delay(5000);
}
}

热心网友 时间:2023-09-07 00:46

#include"main.h"

uchar code add[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行汉字位置

};

uchar code str[]="好好学习天天向上实现人生梦想!";

void send_12864byte(uchar byte)
{
uchar i;
for(i=0;i<8;i++)
{
SCLK=0;
byte=byte<<1; //左移一位 先发送高位数据
SID=CY; //移出的位送给SID
SCLK=1; //上升沿触发发送
SCLK=0;
}

}

void write_12864com(uchar com)
{
delay_1ms(1);//检测忙程序不写,串行不支持读操作
send_12864byte(0xf8);//11111,rw(0),0
send_12864byte(0xf0&com);//高四位 数据分两次发送,而且把数据放在高四位上发送
send_12864byte(0xf0&com<<4);//低四位(先执行<<)

}

void write_12864data(uchar date)
{
delay_1ms(1);
send_12864byte(0xfa);//11111,rw(0),0
send_12864byte(0xf0&date);//高四位 数据分两次发送,而且把数据放在高四位上发送
send_12864byte(0xf0&date<<4);//低四位(先执行<<)

}

void lcd_init()
{
delay_50us(1);
write_12864com(0x30);//选择基本指令集 0x34选择扩充指令集
delay_50us(1);
write_12864com(0x30);//选择8比特数据流 DL=0/1:4/8位数据 RE=1:扩充指令操作RE=0 :基本指令操作
delay_50us(1);
write_12864com(0x0c); //开显示(无游标、不反白)
write_12864com(0x01);//清楚显示,并且设定地址之真为00H
delay_50us(1);
}

void display(uchar x,uchar y,uchar code*s)
{
write_12864com(add[8*x+y]);//写地址 x,y是用来确定起始地址的 从零开始算起

while(*s!=0)//空格的地址是0
{
if(y==8) //判断换行
{ //若不判断,则自动从第一行到第三行
y=0;
x++;
}
if(x==4)
{
x=0;//一屏显示完,回到屏左上角
}
write_12864com(add[8*x+y]);//更新地址 一个地址要写完一个字,则要与两次数据写完
write_12864data(*s);//写数据
s++;
write_12864data(*s);//写数据
s++;
y++;//写完一个字地址要往前走一位
}
}

void main()
{
BSP=0;
lcd_init();
display(0,0,str);//就是在第二行第一列显示“AAAAA”
while(1);
}

热心网友 时间:2023-09-07 00:47

武汉 谷鑫科技专业从事单片机驱动液晶显示。
http://tieba.baidu.com/club/10621043/p/10224215

参考资料:http://tieba.baidu.com/club/10621043/p/10224215

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
橙子冷藏能保存多久 橙子会过期吗 新鲜橙子如何保存更久 橙子保鲜剂对人体有害吗 粒上皇开口熟栗120g*5袋(共600g)-详细介绍 三皇王板栗介绍 品牌榜:2024年板栗十大品牌排行榜 投票结果公布【新】 为什么来大姨妈胸会胀 少儿学什么舞蹈 青年学什么舞蹈好 c51单片机控制12864程序(c语言),显示几个字,或一些简单的图片就行!先谢谢了! 865主板支持什么CPU? 51单片机c语言编程的温湿度检测控制程序 865主板支持什么cpu和显卡? 推荐一个51单片机开发板 51单片机学习板 865相当于什么电脑cpu 单片机,求大神 51单片机推荐-高手进 如果我用东流51单片机板上的PL2303给STM32烧写程序行吗??这芯片能自动将5V转换成3V吗?? 求东流单片机开发板的资料 买了一个东流电子的单片机开发板,请问它上面的单片机与80c52可以直接换吗? 东流电子 单片机 怎么样 可以网上注销公司吗? 红帽linux应该下载那几个个文件? 冬天就要到了,冬天吃什么最好呢? wps手工输入链接语句怎么输入? 冬天吃什么主食容易不长肉又能吃饱?减肥中 冬天吃什么主食减肥 冬天吃什么主食好 推荐六种主食 51单片机四路抢答器毕业论文 只要四路 求曹成茂主编的电工电子技术课后习题答案,合肥工业大学出版社的。邮箱1076655042@qq.com 基于51单片机C语言的噪音监控,求高人给发个程序,感恩不尽 现在的年轻人根本不把邮票当回事了,有的人从来没用过邮票,请问邮票上有没有什么吸引人的地方或者故事? 《世界读书日》特种邮票一枚(如右图)中的三大元素的寓意各是什么? oppo手机如何强制恢复出厂设置op poA8强制恢复出厂设置还得输入手机密码什么情况_百度问一问 如何鉴赏邮票? 以窗花 喜鹊登枝作为邮票的寓意 贴邮票的讲究是什么?邮票的存在有什么意义吗?直接寄出不就好了!! op手机恢复出厂设置 op手机如何恢复出厂设置 什么是VG PG 电子烟pgvg是什么意思 食用甘油和vg甘油有什么不同 自动启停(起停)系统故障,怎么破 高vg版烟油什么意思 绿罗电子烟里有多少克焦油 电脑键盘的灯在玩游戏的时候时亮时不亮是为什么 电脑键盘打字或玩游戏的时候总是时好时坏。 键盘上的指示灯一会亮一会不亮。 像失灵断电一样但马上就好 怎么辨别电子烟油原料vg的好坏