lcd12864与单片机连接仿真软件里面怎么找不到LCD12864管脚RS和PSB管脚?

LCD12864_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
带​中​文​字​库​的2X4​是​一​种​具​有位​/位​并​行​、线​或线​串​行​多​种​接​口​方​式​,​内​部​含​有​国​标​一​级​、​二​级​简​体​中​文​字​库​的​点​阵​图​形​液​晶​显​示​模​块​;​其​显​示​分​辨​率​为2×4​,​ ​内​置12​个6​*6​点​汉​字​,​和2个6​*点​A​S​C​I​I​字​符​集​.​利​用​该​模​块​灵​活​的​接​口​方​式​和​简​单​、​方​便​的​操​作​指​令​,​可​构​成​全​中​文​人​机​交​互​图​形​界​面​。​可​以​显​示×行6​×6​点​阵​的​汉​字​.​ ​也​可​完​成​图​形​显​示​.​低​电​压​低​功​耗​是​其​又​一​显​著​特​点​。​由​该​模​块​构​成​的​液​晶​显​示​方​案​与​同​类​型​的​图​形​点​阵​液
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢FFT算法在单片机中的使用&&LCD12864驱动
&&好久没更新博客了,觉得对不起自己建立博客的初衷。我这个人太懒了,又没有坚持下去的决心,唉~
&言归正传,本次创新基金我是要做一个简易的频谱仪,核心就是要进行一个FFT运算。大家知道,如果采用DSP芯片效果那是相当好的。但由于项目资金以及时间不够等情况,我采用的是ATMEL公司的AVR单片机,这款单片机的FLASH存储和内存比51单片机犀利得多。
&由于采用的是12864液晶,也就是一个横128点竖64点的一个点阵,因而采用128点FFT运算已然够了,因为即使得到再多的数据也无法在液晶上可视化显示出来。本文是基于128点FFT运算。
&程序如下:
#include &iom16v.h&
#include &macros.h&
#include&math.h&
#define N 128
#define PI 3.
#define uchar unsigned char&
#define uint unsigned int&
typedef struct
void initw(); & &
&//初始化旋转因子
void bitReverse(); & &
//比特反转
void FFT();
complex x[N];
uchar vis[N];
void delayms(uint ms)
&for(i=0;i&i++)
&for(j=0;j&3;j++);
void FFT()
int i,j,k,t,P,B,m;
complex up,down,
for (i=0;i&7;i++)
for (j=0;j&B;j++)
t=1&&(6-i);
for (k=j;k&N;k=k+2*B)
product.real=x[k+B].real*cos(2*PI*P/N)+x[k+B].img*sin(2*PI*P/N);
product.img=x[k+B].real*(-1)*
sin(2*PI*P/N)+x[k+B].img*cos(2*PI*P/N);
&x[k+B].real=x[k].real-product.
&x[k+B].img=x[k].img-product.
&x[k].real=x[k].real+product.
&x[k].img=x[k].img+product.
void initw() &//初始化旋转因子
for (i=0;i&N;i++)
void bitReverse() &//比特反转
int i,j=0;
complex tmp3;
for (i=0;i&N;i++)
& &int tmp=i,tmp2=0,j;
&for(j=0;j&7;j++)
&tmp2+=((tmp&&j)&1)*(1&&(6-j));
if(vis[i]==0)
& & tmp3=x[i];
x[i]=x[tmp2];
& & x[tmp2]=tmp3;
vis[tmp2]=1;
void main()
uchar ii,y;
for (ii=0;ii&20;ii++)
x[ii].real=3;
x[ii].img=0;
for (ii=20;ii&128;ii++)
x[ii].real=0;
x[ii].img=0;
bitReverse();
&上图是8点FFT运算,按照上图的流程所示,FFT运算主要有两步,一步是比特反转,就是右边不是按照0、1、2、3……这样顺序进行计算的,而左边是的,两边的关系就是进行一个比特反转。可以看到右边0对应二进制为000,左边对应二进制为000,右边1二进制001,左边4对应二进制100,依次下去,可以清楚看到,对于8位FFT运算,对应二进制有三位,而左右两边的关系恰巧是按照中间位进行了个反转。
&FFT运算第二步就是乘以旋转因子,注意的是这里是复数运算,虚部和实部都要加入运算。乘以旋转因子后对进行加减运算得到新的值,依次下去得到最终解。
&由于单片机内存的限制,因而对于传统的FFT算法,我进行了些改进,原则就是尽量地少使用变量,一个变量可以重复的使用是最理想的了,大家可以在程序中看出。个人意见这是能节省变量最少的了,如果有好的方法,希望可以告诉我下,我的邮箱是,谢谢!
&& 下面是12864液晶驱动程序的写法:
&&&LCD12864128*6412864“”16*168*16
LCDRSRWERS01RW10E
下面的函数是12864与FFT算法的一个结合,里面设置了一个门函数,12864上显示的结果则是一个sinc函数,证明结果是正确的。
#include &iom16v.h&
#include &macros.h&
#include&math.h&
#define N 128
#define PI 3.
#define uchar unsigned char&
#define uint unsigned int&
#define RS (1&&4)
#define RW (1&&5)
#define EN (1&&6)
typedef struct
void initw(); & &
&//初始化旋转因子
void bitReverse(); & &
& & & //比特反转
void FFT();
complex x[N];
uchar vis[N];
void delayms(uint ms)
&for(i=0;i&i++)
&for(j=0;j&3;j++);
//此处定义字符串
void WriteDataLCM(unsigned char WDLCM)
&//写数据函数
// ReadStatusLCM(); //检测忙
delayms(1);
PORTA|=RS; & & &
//RS=1 & &
delayms(1);
PORTA&=~RW; & &
delayms(1);
PORTA|=EN; & & &
delayms(1);
PORTB=WDLCM; & & //输出数据
delayms(1);
PORTA&=~EN; & &
delayms(1);
void WriteCommandLCM(unsigned char WCLCM) //写命令函数
// ReadStatusLCM(); //根据需要检测忙
delayms(1);
PORTA&=~RS; & &
delayms(1);
PORTA&=~RW; & &
delayms(1);
PORTA|=EN; & & &
delayms(1);
PORTB=WCLCM; & & //输出指令
delayms(1);
PORTA&=~EN; & &
delayms(1);
//读状态:检测忙
void ReadStatusLCM() &//读状态函数
&& &uchar flag =
&while(flag==1)
delayms(1);
& &DDRB=0x00; &
& &//端口B改为输入
delayms(1);
PORTA&=~RS; & &
delayms(1);
PORTA|=RW; & &
delayms(1);
PORTA|=EN; & &
delayms(10);
temp = PINB; & &//读端口B
delayms(10);
DDRB=0 & &
&//端口B改为
delayms(10);
PORTA&=~EN; & &
delayms(1);
if(temp&&7==0)
uchar read_data() //读数据函数
&&uchar lcd_
&&DDRB=0x00;
&&PORTA|=RW;
&&PORTA|=RS;&
&&delayms(10);
&&PORTA|=EN;
&&delayms(10);
&&lcd_data=PINB;
&&delayms(10);
&&PORTA&=~EN;
&&return(lcd_data) ;
void point(uchar x,uchar y) //打点函数,最重要的函数,GUI的基础
&&uchar x_Dyte,x_
&&uchar y_Dyte,y_
GDRAM_hbit,GDRAM_
&&WriteCommandLCM(0x36);
&&x_Dyte=x/16;
&&x_byte=x&0x0f;
&&y_Dyte=y/32;
&&y_byte=y&0x1f;
&&WriteCommandLCM(0x80+y_byte);
&&WriteCommandLCM(0x80+x_Dyte+8*y_Dyte);
&&read_data();
&&GDRAM_hbit=read_data();
&&GDRAM_lbit=read_data();
&& delayms(10);
&&WriteCommandLCM(0x80+y_byte);
&&WriteCommandLCM(0x80+x_Dyte+8*y_Dyte);
&& delayms(10);
&&if(x_byte&8)
&WriteDataLCM(GDRAM_hbit|(0x01&&(7-x_byte)));
&WriteDataLCM(GDRAM_lbit);
&WriteDataLCM(GDRAM_hbit);
&WriteDataLCM(GDRAM_lbit|(0x01&&(15-x_byte)));
&WriteCommandLCM(0x30);
//LCM初始化
void LCMInit(void)&
WriteCommandLCM(0x30); &
&//三次显示模式设置,不检测忙信号
delayms(10);
WriteCommandLCM(0x30);
delayms(10);&
WriteCommandLCM(0x30);
delayms(10);&
WriteCommandLCM(0x30); &
&//显示模式设置,开始要求每次检测忙信号
WriteCommandLCM(0x08); &
&//关闭显示
WriteCommandLCM(0x01); &
&//显示清屏
WriteCommandLCM(0x06); &
&//显示光标移动设置
WriteCommandLCM(0x0C); &
&//显示开及光标设置
void clear(uchar dat) &//清屏函数
&&uchar i,j,k;
&&uchar addr=0x80;
&&for(i=0;i&2;i++)
&for(j=0;j&32;j++)
&for(k=0;k&8;k++)
&WriteCommandLCM(0x36);
&WriteCommandLCM(0x80+j);
&WriteCommandLCM(addr+k);
&WriteDataLCM(dat);
&WriteDataLCM(dat);
& addr=0x88;
&& WriteCommandLCM(0x36);
&& WriteCommandLCM(0x30);
void heng(uchar a)
&&for(i=0;i&127;i++)
&point(i,a);
void su(uchar a)
&&for(i=0;i&63;i++)
&point(a,i);
void FFT()
int i,j,k,t,P,B,m;
complex up,down,
for (i=0;i&7;i++)
for (j=0;j&B;j++)
t=1&&(6-i);
for (k=j;k&N;k=k+2*B)
product.real=x[k+B].real*cos(2*PI*P/N)+x[k+B].img*sin(2*PI*P/N);
product.img=x[k+B].real*(-1)*
sin(2*PI*P/N)+x[k+B].img*cos(2*PI*P/N);
&x[k+B].real=x[k].real-product.
&x[k+B].img=x[k].img-product.
&x[k].real=x[k].real+product.
&x[k].img=x[k].img+product.
void initw() &//初始化旋转因子
for (i=0;i&N;i++)
void bitReverse() &//比特反转
int i,j=0;
complex tmp3;
for (i=0;i&N;i++)
& &int tmp=i,tmp2=0,j;
&for(j=0;j&7;j++)
&tmp2+=((tmp&&j)&1)*(1&&(6-j));
if(vis[i]==0)
& & tmp3=x[i];
x[i]=x[tmp2];
& & x[tmp2]=tmp3;
vis[tmp2]=1;
void xian(uchar x,uchar y)
&&for(i=63;i&=y;i--)
&point(x,i);
void main(void)
uchar ii,y;
&& &//端口初始化
PORTD=0x00;
delayms(20);&
delayms(20); &
LCMInit(); //LCM初始化 & //液晶初始化
delayms(100);
&clear(0x00);
for (ii=0;ii&20;ii++)
x[ii].real=3;
x[ii].img=0;
for (ii=20;ii&128;ii++)
x[ii].real=0;
x[ii].img=0;
bitReverse();
for(ii=64;ii&128;ii++)
&tmp=sqrt((x[ii].real*x[ii].real)+(x[ii].img*x[ii].img));
& &y= 63-(int)
point(ii-64,y);
xian(ii-64,y);
for(ii=0;ii&64;ii++)
&tmp=sqrt((x[ii].real*x[ii].real)+(x[ii].img*x[ii].img));
& &y= 63-(int)
point(ii+64,y);
xian(ii+64,y);
得到的图片:
MATLAB仿真图形:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。单片机LCD12864介绍及设计实例_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
文档贡献者
评价文档:
单片机LCD12864介绍及设计实例
单​片​机​L​C​D26介​绍​及​设​计​实​例
大小:920.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢学单片机时,找不到LCD12864(V1.1)的说明文档_百度知道
你可以看下有没有CS1,CS2,引脚有的话你可以去搜无字库的LCD12864资料,如果没有的话看有没有PSB有的话你就可以搜带字库的LCD12864资料,其他都大同小异的
只有一个CS呢?
这是开发板带的芯片吧,其实这块芯片是有19引脚的,只是卖家之引出了15个引脚还有一个空脚(共16引脚)。你自带的那份新版12864文件夹里有份它的PDF文档。其实我们明白每个引脚的功能,用单片机控制各个引脚就可以了,希望对你有帮助。
亲,你解决了么?同求资料,,多谢啦
都是这个类型的.
根据型号,找厂商 资料 
上面就写着这个LCD12864(v1.1),找什么厂商呢?
其他类似问题
为您推荐:
lcd12864的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 lcd12864显示程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信