lcd12232课程设计
A. 51单片机串口通信和12232LCD显示,实现将接收到的数据实时显示在12232上的功能。
用得定时中断吧?,是否在进入中断的时候,你存储的数区出错了!
如果没必要的话,程序就直接收到就显示,不用再搞定时了!
B. 在protues中LCD12232F可以用哪个替代
这个得看你这LCD的控制器是什么?找个与之相同控制器的LCD才能替代它!
不幸的是,你这LCD的控制器是ST7920,在PROTEUS中没有此控制器的LCD,所以你没办法在PROTEUS中仿真它了!
C. 单片机控制12232液晶显示的几种C语言源程序
试试下面的代码:
在atmega128中写通讯协议的头四位数字时好像不能分开一位一位的送,而是要把它当作一个16进制的整体移位写入!程序中的comm为写0表示写12232c的指令,dat为1表示写数据。cs,sclk,std分别为片选、时钟、及数据io口,可用sbit指令定义。
/************lcd初始化程序**************/
voidinit_lcd(void)
{
wr_lcd(comm,0x30);/*30---基本指令集动作,8位控制接口*/
wr_lcd(comm,0x01);/*清屏,地址指针指向00H*/
delay(80);
wr_lcd(comm,0x06);/*光标的移动方向,光标右移*/
wr_lcd(comm,0x0c);/*开显示,关光标*/
}
/******************LCD显示任意量程序********************/
voideng_disp(ucharx,uchary,ucharcode*eng)
{
uchari,j;
wr_lcd(comm,0x30);
wr_lcd(comm,0x80);/*第一行的起始地址*/
for(j=0;j<y;j++)
{
for(i=0;i<x;i++)
wr_lcd(dat,eng[j*16+i]);
if((y==2)&&(j==1))
{wr_lcd(comm,0x90);
for(i=0;i<8;i++)
wr_lcd(dat,eng[j*16+i]);
}
}
}
/*********************LCD显示中文(欢迎界面)程序******************/
voidchn_disp(ucharcode*chn)/*lcd显示中文*/
{
uchari,j;
wr_lcd(comm,0x30);
wr_lcd(comm,0x80);/*第一行的起始地址*/
j=0;
for(i=0;i<16;i++)
wr_lcd(dat,chn[j*16+i]);
wr_lcd(comm,0x90);//第二行的起始地址
j=1;
for(i=0;i<16;i++)
wr_lcd(dat,chn[j*16+i]);
}
/***************************LCD清内存程序*******************/
voidclrram(void)//lcd清内存
{
wr_lcd(comm,0x30);
wr_lcd(comm,0x01);
delay(120);
}
/*************LCD写数据或写命令子程序****************/
voidwr_lcd(uchardat_comm,ucharcontent)/*lcd写数据*/
{
uchara,i,j;
delay(40);
a=content;//a为指令代码或者数据
cs=1;//置位cs开始传输数据
sclk=0;//拉低sclk准备给上升沿,发送数据
std=1;//置1
for(i=0;i<5;i++)/*先传输起始字节,首先5个1,sclk的上升沿传输启动*/
{
sclk=1;
sclk=0;
}
std=0;//RW=0;
sclk=1;
sclk=0;
if(dat_comm)
std=1;//如果是数据则RS为1
else
std=0;//如果是控制字则RS为0
sclk=1;//给上升沿,启动传输
sclk=0;//拉低sclk
std=0;//第8位为0,起始字节传输完毕
sclk=1;//给上升沿,启动传输
sclk=0;
for(j=0;j<2;j++)//一个字节分两次发送,第一次发送高四位,后面补4个0,第二次发送低4位,后面同样补4个0
{
for(i=0;i<4;i++)//先传输高4位
{
a=a<<1;//数据循环左移一位,低位补0
std=CY;//把进位进行传输
sclk=1;
sclk=0;
}
std=0;
for(i=0;i<4;i++)//后4位数据为4个0
{
sclk=1;
sclk=0;
}
}
}
/**********************LCD延时程序************************************/
voiddelay(uintus)//lcd延时时间
{
while(us--);
}
voiddelay1(uintms)
{
uinti,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
/*********************显示数据位子程序*******************/
voidmath_disp(uintmath)
{uintk;
uchari;
ucharj;
k=math;
dispbuf[0]=k/10000;//得到万位数
k=k%10000;
dispbuf[1]=k/1000;//得到千位数
k=k%1000;
dispbuf[2]=k/100;//得到百位数
k=k%100;
dispbuf[3]=k/10;//得到十位数
dispbuf[4]=k%10;//得到个位数
wr_lcd(comm,0x90);//给第二行的起始地址以让数据在第二行显示,
for(i=0;i<5;i++)
{
for(j=0;j<2;j++)//连续显示两个tab2中的字节,LCD自动把这两个字节联系起来显示一个数据
{
wr_lcd(dat,tab2[xs2*dispbuf[i]+j]);//调用显示子函数
}
}
}
D. 求一个AT89C51和DS18B20+lcd12232液晶显示的温度报警器啊,求电路图或汇编程序。。。单片机课程设计急用
没有国,哪有家;没有家,哪有你我。让我们共同祝愿国兴家和!
E. lcd12232有什么作用
是一个显示器。
F. proteus仿真8255加12232的lcd又该怎么做呢
加8255仿真和直接连P口有些不同,加8255后其数据总线要连接到P0口,而不加的话,可以任意连接到4个P口的任意一个,加了8255就不一样了,其A、B可以一个设置为输入、一个设置为输出,分别接到LCD的数据总线上,这样就可以了。控制总线可以一样。
未加8255时,读写都可以直接用一个口实现,所以比较方便,预处理如下
#define LCD12232_FLAG
#define LCD1612232ORT P1
#include<reg52.h>
#include<stddef.h>
#include"dtype.h"
sbit lcd12232_rs=P3^7;
sbit lcd1612232=P3^5;
sbit lcd12232_rw=P3^6;
加了8255后,读写口地址不一样了,要分别写,稍微麻烦一点。预处理如下
#define LCD12232_FLAG
#define LC12232ead XBYTE[0x8001]
#define LCD12232_Write XBYTE[0x8002]
#define LCD12232_Cmd XBYTE[0x8000]
#include<reg52.h>
#include<stddef.h>
#include"dtype.h"
sbit lcd12232_rs=P3^7;
sbit lcd1612232=P3^5;
sbit lcd12232_rw=P3^6;
G. 液晶12232有多少个引脚
共18个
引脚 引脚定义 引脚说明
1 VDD 逻辑电源正
2 VSS 逻辑电源地
3 Vo LCD驱动电源
4 /RST 复位端
5 E1 读写使能
6 E2 读写使能
7 R/W 读写选择
8 Ao 数据/指令选择
9 D0 数据输入输出引脚
10 D1 数据输入输出引脚
11 D2 数据输入输出引脚
12 D3 数据输入输出引脚
13 D4 数据输入输出引脚
14 D5 数据输入输出引脚
15 D6 数据输入输出引脚
16 D7 数据输入输出引脚
17 LED+ 背光电源正(DC +5V)
18 LED- 背光电源负(0V)
H. proteus中的LCD12232为什么有两个使能端,写程序时这两个使能端怎么用
这个屏是用两个IC驱动的,所以有两个E端。你要两个都控制的不然只有屏的1/4 正常显示。E是沿触发的。你可以下DATASHEET看下。
I. LCD12232显示自定义图像字符需要怎么操作
属于字符型LCD 每个厂商对型号的定义大都不同,不过里面的确有一定含义,比如你的显示器,24064,很有可能是你的显示器为24寸,其他字符就难说了. 哦 是
J. LCD 12232使用问题,右半屏清屏不干净
因为它本来就是这样的