实验报告内容1:液晶模块的驱动电路设计(16*2)【一】实验目的1.熟练运用protel99SE软件。
1.初步了解各种型号的液晶驱动电路的设计思路,运用protel99SE设计驱动原理图原理图,并画出合理的封装PCB电路板。
【二】实验原理用2片164扩展行,2片595扩展列,用16个三极管进行led点阵的功率驱动。
1、164:8位串入,并出移位寄存器;时钟(CP)每次由低变高时,数据右移一位,输入到Q0,Q0是两个数据输入端(DSA和DSB)的逻辑与,它将上升时钟沿之前保持一个建立时间的长度;主复位(MR)输入端上的一个低电平将使其它所有输入端都无效,同时非同步地清除寄存器,强制所有的输出为低电平。
2、595:74595和74164功能相仿,都是8位串行输入转并行输出移位寄存器。
74164的驱动电流(25mA)比74595(35mA)的要小,14脚封装,体积也小一些;74595的主要优点是具有数据存储寄存器,在移位的过程中,输出端的数据可以保持不变。
这在串行速度慢的场合很有用处,数码管没有闪烁感;与164只有数据清零端相比,595还多有输出端时能/禁止控制端,可以使输出为高阻态。
3、三极管:三极管放大电流,加大扫描强度,提高点阵屏亮度。
【三】实验步骤简述1、运用protel99SE设计驱动原理图。
2、对原理图进行检查错误。
3、画PCB库元件4、封装PCB电路板。
5、生成PCB并且布线。
【四】设计中遇到的问题及解决方法(1)我们在画原理图时,因为之前有使用过protel99SE软件,还算比较顺利。
(2)在生成PCB的时候,总是报告我们有很多错,在读懂这些错后,我们发现我们所有的错都是没有对各原器件进行封装,我们在库里也找不到那些元器件,我们就自己画库并进行添加,终于没有错了。
(3)我们生成PCB后又出现了无法布线的错误,在经过老师的指导及自己的琢磨之后,调整了芯片的摆放位置之后,我们才布线成功,才顺利的完成此次实习。
【五】实验结果此程序最终在我们自己的开发板上成功的实现了老师所要求的全部功能,除此之外,我们还添加了特殊功能,可以输入带有小数点的数字,能够回删,能够计算sin,cos,tan, sinh,cosh,log等功能,并能够快速准确的计算出将结果。
【六】设计中遇到的问题及解决方法(1)首先,在刚开始进行此次实习内容的时候,由于刚开始对矩阵键盘复用的不熟悉导致我们走了很多弯路,也改了很多次,所以在同学的建议下我们采用了开发板最下面一行的键盘,才避免了复用的问题。
(2)在完成了各个小程序块的编写之后,我们把它进行了整合,可是但我们第一次下载时却们又出现我们想要的结果,液晶上不显示任何东西,我们检查了很多遍,最后才发现是液晶初始化出现了问题,导致液晶没有正确的初始化,就显示不了我们想要的结果,在改正之后我们的程序终于有的能够计算能够显示,但还是有很多的不足,再后来老师的建议下,我们又加了一个回删的功能,才使得程序变得完整。
【七】总结由于这是我第一次把按键控制在液晶上显示字符及数字,所以在编程过程中出现了一些问题,但最终还是在自己的努力,老师的指导和同学的帮助之下完成了此次试验。
通过这次实验,我对按键控制单元和液晶显示单元有了进一步的认识,知道如何显示一个字符串,如何在指定位置进行显示,也更加清楚得了解到了单片机的各个控制单元,以及液晶的内部原理。
与此同时,我也领悟到了,要想做好一件事,更加完美的,出色的完成课程设计,不仅要对各自的原理知道的非常清楚外,还要学会虚心学习,虚心求教。
而且,团队合作也是一个很关键的因素。
附录:主要源程序以及电路原理图或PCB版图/********算法部分********/void xianshi(float s,uchar a1,uchar b1){uchar k,pd=1,su,aa,bb;long int j,s1,s2;char i;aa=a1;bb=b1;k=0;if(s<0.0){s=s*(-1);print(aa,bb,"-");}s1=s*1000;s1=s1/1000;if(s<1.0){print(aa,bb,"0");aa++;}else{while(pd==1){j=cifang(k);su=s1/j%10;if(su==0){if(s<j){pd=0;}}k++;}k=k-2;for(i=k;i>-1;i--){j=cifang(i);su=s1/j%10;su++;shux1(su,aa,bb);aa++;}}print(aa,bb,".");aa++;s1=s*1000;s1=s1/100;s1=s1%10+1;shux1(s1,aa,bb);aa++;s1=s*1000;s1=s1/10;s1=s1%10+1;shux1(s1,aa,bb);}void xianshi2(float s,uchar a1,uchar b1,uchar d) {uchar k,pd=1,su,aa,bb;long int j,s1,s2,s3;char i;aa=a1;bb=b1;k=0;if(s<0.0){s=s*(-1);print(aa,bb,"-");}s1=s*1000;s1=s1/1000;if(s<1.0){print(aa,bb,"0");aa++;}else{while(pd==1){j=cifang(k);su=s1/j%10;if(su==0){if(s<j){pd=0;}}k++;}k=k-2;for(i=k;i>-1;i--){j=cifang(i);su=s1/j%10;su++;shux1(su,aa,bb);aa++;}}if(d==1){print(aa,bb,".");aa++;s1=s*10000;s1=s1/1000;s1=s1%10+1;s2=s*10000;s2=s2/100;s2=s2%10+1;s3=s*10000;s3=s3/10;s3=s3%10+1;if((s1!=1)||(s2!=1)){shux1(s1,aa,bb);aa++;}if(s2!=1){shux1(s2,aa,bb);aa++;}if(s3!=1){//shux1(s3,aa,bb);}}}/******************特殊功能部分*******************/ void mas(float s){uchar tmp1;float a;clr();a=s;xianshi(a,0,1);print(0,2,"sin cos log");print(0,3,"sinh exp tan");tmp1=0;while(tmp1==0){tmp1=Keyscan();while(Keyscan()>0);if(tmp1>8){tmp1=0;}}shux1(tmp1,0,4);switch(tmp1){case1:{a=cos(s);}break;//对应显示"cos"case2:{a=sin(s);}break;//对应显示"sin"case3:{a=log(s);}break;//对应显示"log"case4:{a=sinh(s);}break;//对应显示"sinh"case5:{a=cosh(s);}break;//对应显示"cosh"case6:{a=tan(s);}break;//对应显示"tan"} while(tmp1!=12){tmp1=Keyscan();while(Keyscan()>0);}clr();print(0,1,"结果");xianshi(a,0,2);tmp1=0;while(tmp1==0){tmp1=Keyscan();while(Keyscan()>0);}ql=1;}float shuzi(uchar a,uchar b){uchar d=0,tmp=0,biao=1,b2=0,aa,bb;float l1=0,l=0,b21=0;biao=1;aa=a;while(biao==1){tmp=Keyscan();while(Keyscan()>0);if(tmp<11&&tmp>0){t=1;if(d==0){l=tmp-1;l1=l1*10+l;//shux1(tmp,aa,b);aa++;xianshi2(l1,0,b,d);}if(d==1){if(b2<3){l=tmp-1;b21=cifang2(b2);l1=l1+l*b21;xianshi2(l1,0,b,d);//shux1(tmp,aa,b);aa++;b2++;}}}if(tmp==11){//if(l1==0){print(a,b,"0");}if(d==0){b2=1;print(aa,b,".");aa++;d=1;}}if(tmp==12){biao=0;}if(tmp>14&&tmp<19){biao=0;switch(tmp){case15:{fu=1;}break;//对应显示"+"case16:{fu=2;}break;//对应显示"-"case17:{fu=3;}break;//对应显示"*"case18:{fu=4;}break;//对应显示"/"}}if(tmp==13){ql=1;m2=1;biao=0;}if(tmp==14){if((t==1)&&(l1-l>=0)){if(d==0){l1=l1-l;l1=l1*0.1;print(0,b,"");xianshi2(l1,0,b,d);aa--;}if(d==1){l1=l1-l*b21;print(0,b,"");xianshi2(l1,0,b,d);b2--;aa--;}t=0;}}}return l1;}/**************主函数***********************/void main(){uchar biao=1,f,tmp;float l=0,l2,l3;lcd_init();//设定液晶工作方式m=2;while(1){clr();m2=0;ql=0;t=1;l2=shuzi(0,1);if(m2==1){mas(l2);ql=1;}if(ql==0){switch(fu){case1:{print(0,2,"+");}break;//对应显示"+"case2:{print(0,2,"-");}break;//对应显示"-"case3:{print(0,2,"*");}break;//对应显示"*"case4:{print(0,2,"/");}break;//对应显示"/"}t=1;l=shuzi(0,3);}if(ql==0){switch(fu){case1:l3=l+l2;break;//对应显示"+"case2:{if(l2<l){f=1;l3=l-l2;}else{l3=l2-l;}};break;//对应显示"-"case3:l3=l2*l;break;//对应显示"*"case4:l3=l2/l;break;//对应显示"/"}if(f==1){print(0,4,"=-");f=0;}else{print(0,4,"=");}xianshi(l3,2,4);tmp=0;while(tmp==0){tmp=Keyscan();while(Keyscan()>0);} }}}LCD1602外部接口接法L0列液晶接法L1行液晶接法HD44780接法11HD44100接法总电路图12图2PCB版图13。