lcd液晶12232F的串口C51程序(ST7920)

发布者:DazzlingSmile最新更新时间:2017-12-17 来源: eefocus关键字:lcd液晶  12232F  串口  C51程序  ST7920 手机看文章 扫描二维码
随时随地手机看文章

由于12232F这个显示器用得比较平常,但平常见到的是一些并口的汇编程序,并且也没有对应于12232F的并口程序,串口的C51程序极少见,为了方便大家使用,所以本站把它调试了一个出来,大家多多指教! 

/******************************************************/  
/* */  
/* 12232F串口驱动程序C51,11.0592M晶振 */  

/*使用这款LCD应该要注意的问题: */  
/*一定要在VO与VDD及VSS这三个脚间接一个20K的电位器, */  
/*电位器的中间脚接VO,其它二脚接VDD和VSS。 */  
/*然后调节电位器的大小,直到有显示为止。若是不接的话,*/  
/*显示器可能是一片黑暗,什么也没有显示,发命令也没有反*/  
/*应的。本程序我已经测试通过了。欢迎大家提出意见。 */  
/******************************************************/  
#include   
#include  



#define uint unsigned int  
#define uchar unsigned char 



/*12232f PINs define*/  
sbit CS=P1^5;  
sbit SID=P1^6;  
sbit SCLK=P1^7;  



void delay_1ms(uint x)  
{  
uint j;  
uchar i;  
for(j=0;j{  
for(i=0;i<120;i++);  
}  




void send_command(uchar command_data)  
{  
uchar i;  
uchar i_data,data1,data2;  
i_data=0xf8;  
delay_1ms(10);  
CS=1;  
SCLK=0;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
i_data=command_data;  
i_data&=0xf0;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
i_data=command_data;  
data1=i_data&0xf0;  
data2=i_data&0x0f;  
data1>>=4;  
data2<<=4;  
i_data=data1|data2;  
i_data&=0xf0;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
CS=0;  
}  

void send_data(uchar command_data)  
{  
uchar i;  
uchar i_data,data1,data2;  
i_data=0xfa;  
delay_1ms(10);  
CS=1;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
i_data=command_data;  
i_data&=0xf0;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
i_data=command_data;  
data1=i_data&0xf0;  
data2=i_data&0x0f;  
data1>>=4;  
data2<<=4;  
i_data=data1|data2;  
i_data&=0xf0;  
for(i=0;i<8;i++)  
{  
SID=(bit)(i_data&0x80);  
SCLK=0;  
SCLK=1;  
i_data=i_data<<1;  
}  
CS=0;  




void lcd_init()  
{  
uchar command_data;  
delay_1ms(100);  
command_data=0x30;  
send_command(command_data); /*功能设置:一次送8位数据,基本指令集*/  
command_data=0x04;  
send_command(command_data); /*点设定:显示字符/光标从左到右移位,DDRAM地址加1*/  
command_data=0x0f;  
send_command(command_data); /*显示设定:开显示,显示光标,当前显示位反白闪动*/  
command_data=0x01;  
send_command(command_data); /*清DDRAM*/  
command_data=0x02;  
send_command(command_data); /*DDRAM地址归位*/  
command_data=0x80;  
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/  




void display_cpubbs()  
{  
uchar command_data;  
while(1)  
{  
command_data=0x01;  
send_command(command_data); /*清DDRAM*/  
command_data=0x80;  
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/  
command_data=0x68; /*“h”字的编码*/  
send_data(command_data);  
command_data=0x74;  
send_data(command_data); /*“t”字的编码*/  
command_data=0x74;  
send_data(command_data); /*“t”字的编码*/  
command_data=0x70;  
send_data(command_data); /*“p”字的编码*/  
command_data=0x3a;  
send_data(command_data); /*“:”字的编码*/  
command_data=0x2f;  
send_data(command_data); /*“/”字的编码*/  
command_data=0x2f;  
send_data(command_data); /*“/”字的编码*/  
command_data=0x57;  
send_data(command_data); /*“w”字的编码*/  
command_data=0x57;  
send_data(command_data); /*“w”字的编码*/  
command_data=0x57;  
send_data(command_data); /*“w”字的编码*/  
command_data=0x2e;  
send_data(command_data); /*“.”字的编码*/  
command_data=0x63;  
send_data(command_data); /*“c”字的编码*/  
command_data=0x70;  
send_data(command_data); /*“p”字的编码*/  
command_data=0x75;  
send_data(command_data); /*“u”字的编码*/  
command_data=0x62;  
send_data(command_data); /*“b”字的编码*/  

command_data=0x90;  
send_command(command_data); /*把显示地址设为0X90,即为第二行的首位,因为第一行已经满了*/  
command_data=0x62;  
send_data(command_data); /*“b”字的编码*/  
command_data=0x73;  
send_data(command_data); /*“s”字的编码*/  
command_data=0x2e;  
send_data(command_data); /*“.”字的编码*/  
command_data=0x63;  
send_data(command_data); /*“c”字的编码*/  
command_data=0x6f;  
send_data(command_data); /*“o”字的编码*/  
command_data=0x6d;  
send_data(command_data); /*“m”字的编码*/  

delay_1ms(3000);  

command_data=0x01;  
send_command(command_data); /*清DDRAM*/  
command_data=0x80;  
send_command(command_data); /*把显示地址设为0X80,即为第一行的首位*/  

command_data=0xbb;  
send_data(command_data);  
command_data=0xb6;  
send_data(command_data); /*“欢”字的编码*/  
command_data=0xd3;  
send_data(command_data);  
command_data=0xad;  
send_data(command_data); /*“迎”字的编码*/  
command_data=0xb7;  
send_data(command_data);  
command_data=0xc3;  
send_data(command_data); /*“访”字的编码*/  
command_data=0xce;  
send_data(command_data);  
command_data=0xca;  
send_data(command_data); /*“问”字的编码*/  
command_data=0x90;  
send_command(command_data); /*把显示地址设为0X90,即为第二行的首位,因为第一行已经满了*/  
command_data=0x63;  
send_data(command_data); /*“c”字的编码*/  
command_data=0x70;  
send_data(command_data); /*“p”字的编码*/  
command_data=0x75;  
send_data(command_data); /*“u”字的编码*/  
command_data=0x62;  
send_data(command_data); /*“b”字的编码*/  
command_data=0x62;  
send_data(command_data); /*“b”字的编码*/  
command_data=0x73;  
send_data(command_data); /*“s”字的编码*/  
command_data=0xc2;  
send_data(command_data);  
command_data=0xdb;  
send_data(command_data); /*“论”字的编码*/  
command_data=0xCC;  
send_data(command_data);  
command_data=0xb3;  
send_data(command_data); /*“坛”字的编码*/  
delay_1ms(3000);  
}  




main()  
{  
uchar command_data;  
lcd_init();  
display_cpubbs();  
while(1);  


关键字:lcd液晶  12232F  串口  C51程序  ST7920 引用地址:lcd液晶12232F的串口C51程序(ST7920)

上一篇:ATMEGA48与DS1302时钟程序
下一篇:DS1302的AVR程序(2000年~2099年的星期自动计算功能)

推荐阅读最新更新时间:2024-03-16 15:49

STM32 USART串口的使用方法和程序
通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。 USART利用分数波特率发生器提供宽范围的波特率选择,支持同步单向通信和半双工单线通信。 1、STM32固件库使用外围设备的主要思路 在STM32中,外围设备的配置思路比较固定。首先是使能相关的时钟,一方面是设备本身的时钟,另一方面如果设备通过IO口输出还需要使能IO口的时钟;最后如果对应的IO口是复用功能的IO口,则还必须使能AFIO的时钟。 其次是配置GPIO,GPIO的各种属性由硬件手册的AFIO一章详细规定,较为简单。 接着相关设备需要如果需要使用中断功能,必须先配置中断优先级,后文详述。 然后是配
[单片机]
STM32串口接收不定长数据原理与源程序
今天说一下STM32单片机的接收不定长度字节数据的方法。由于STM32单片机带IDLE中断,所以利用这个中断,可以接收不定长字节的数据,由于STM32属于ARM单片机,所以这篇文章的方法也适合其他的ARM单片机。 IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者一次发来8个字节,这些一次发来的数据,就称为一帧数据,也可以叫做一包数据。 如何判断一帧数据结束,就是我们今天讨论的问题。因为很多项目中都要用到这个,因为只有接收到一帧数据以后,你才可以判断这次收了几个字节和每个字节的内容是否符合协议要求。 看了前面IDLE中断的定义,你就会明白了,一帧数据
[单片机]
STM32<font color='red'>串口</font>接收不定长数据原理与源<font color='red'>程序</font>
串口通信-数据发送到PC加1后接收到单片机在数码管上显示
本程序的完整原理图下载: http://www.51hei.com/f/ks51.pdf /** *功能:串口通信-数据发送到PC加一后接收到单片机在数码管上显示 *时间:2014年3月2日10:04:07 *作者:寒竹子 *备注:波特率:19200bps *总结:串口通信时需要发送和接收数据时可以用到串口中断,在中断中进行数据的发送和接收, * 数码管显示时必须要放在while (1)中,只有这样才可以正常显示数字! **/ #include reg52.h typedef unsigned int uint; typedef unsigned char uchar; //数码管段选和位选声明 sbit WELA =
[单片机]
C51单片机通过串口调节PWM波
PWM 是一种常用的电子控制技术 PWM 本意为 脉冲宽度调制,可以简单理解为对占空比的控制。下图就是占空比图例,一个周期内高电平时间与周期时间的比值。 现在的一些MCU自带PWM控制功能,但是51/52单片机还是没有这个功能。可以用程序自己实现。 用到的51单片机资源如下: 1.双定时器及定时器中断 2.串口和串口中断 下面看下程序: PWM.H #ifndef _PWM_H #define _PWM_H #include #include #include #define uint unsigned int #define uchar unsigned char #define Pwm_pe
[单片机]
<font color='red'>C51</font>单片机通过<font color='red'>串口</font>调节PWM波
AVR单片机USART串口通信基本应用
/********************************************* File name : usart.c Chip type : ATmega16 Program type : Application Clock frequency : 11.0592MHz Memory model : Small 注意:发送采用查询方式,接收采用中断方式,在初始化程序中,需要将TXD设置成输出方式,RXD设置成输入方式,并使RXD的内部上拉有效 *********************************************/ #include mega16.
[单片机]
串口与普通IO口的区别
General Purpose Input Output (通用输入/输出)简称为GPIO,或总线扩展器,人们利用工业标准I2C、SMBus或SPI接口简化了I/O口的扩展。当微控制器或芯片组没有足够的I/O端口,或当系统需要采用远端串行通信或控制时,GPIO产品能够提供额外的控制和监视功能。 每个GPIO端口可通过软件分别配置成输入或输出。Maxim的GPIO产品线包括8端口至28端口的GPIO,提供推挽式输出或漏极开路输出。提供微型3mm x 3mm QFN封装。 串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。串行接口 (Serial Interface) 是指数据一
[单片机]
<font color='red'>串口</font>与普通IO口的区别
基于Linux环境下串口通信的应用设计
数据采集系统中由于单片机侧重于控制,数据处理能力较弱,对采集的数据进行运算处理比较繁琐,如果通过串口与上位机通信,利用上位机强大的数据处理能力和友好的控制界面对数据进行处理和显示则可以提高设计效率。串口通信以其简单的硬件连接,成熟的通信协议,成为上下位机之间通信的首选。移植了Linux 操作系统的s3c2440 可以在Linux 环境下操作串口,降低了串口操作的难度,可以使开发者集中精力开发大规模的应用程序,而不必在操作底层设计上耗费时间。 1 硬件连接 s3c2440 是三星公司生产的基于ARM9 核的处理器,采用3.3 V 电压供电; C8051Fxxx 系列单片机是美国CYGNAL 公司推出的与8051 兼容的高性能高速单片
[电源管理]
基于Linux环境下<font color='red'>串口</font>通信的应用设计
μC/OS—II的嵌入式串口通信模块设计
在嵌入式应用中,使用RTOS的主要原因是为了提高系统的可靠性,其次是提高开发效率、缩短开发周期。μC/OS-II是一个占先式实时多任务内核,使用对象是嵌入式系统,对源代码适当裁减,很容易移植到8~32位不同框架的微处理器上。但μC/OS-II仅是一个实时内核,它不像其他实时操作系统(如嵌入式Linux)那样提供给用户一些API函数接口。在μC/OS-II实时内核下,对外设的访问接口没有统一完善,有很多工作需要用户自己去完成。串口通信是单片机测控系统的重要组成部分,异步串行口是一个比较简单又很具代表性的中断驱动外设。本文以单片机中的串口为例,介绍μC/OS—II下编写中断服务程序以及外设驅动程序的一般思路。   1 μC/OS-I
[工业控制]
热门资源推荐
热门放大器推荐
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

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

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