博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51单片机总线与非总线的程序对比
阅读量:6658 次
发布时间:2019-06-25

本文共 2503 字,大约阅读时间需要 8 分钟。

不多说,先来非总线型的51的1602液晶显示器的显示程序:

#include
#include
#define uchar unsigned char#define uint unsigned intuchar code table[]="The distance is ";uchar code table1[]=" 00.0cm ";sbit shuru=P1^0;sbit yidianling=P1^0;sbit yidianyi=P1^3;//延时void delay(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}//1602写地址void write_com(uchar com){ yidianling=0; yidianyi=0; P0=com; delay(5); shuru=1; delay(5); shuru=0;} //1602写数据 void write_data(uchar date){ yidianling=1; yidianyi=0; P0=date; delay(5); shuru=1; delay(5); shuru=0;}//初始化void init(){ uchar num; shuru=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01); write_com(0x10); write_com(0x80); for(num=0;num<16;num++) { write_data(table[num]); delay(2); } write_com(0x80+0x40);//0x53 for(num=0;num<16;num++) { write_data(table1[num]); delay(2); }}//1602选 写的位置和数据void write_sfm(uchar add,uchar date){ write_com(0x80+0x40+add); write_data(0x30+date); }//主函数void main(){ P1=0xff; P0=0xff; init(); while(1);}

  板子原理图是当时自己画的,目测找不到了。T T.但是看程序还是可以看出点什么吧~

  这是以前的程序了,当时是用来红外测距,测的数据经AD转换显示出来,我把AD部分都删去了。

  很明显,非总线型的1602程序就是完全按照1602数据手册上的高低电平来控制的,写了很多代码。

接下来,看总线型的1602显示程序吧:

#include 
#include
#define LCD_COM XBYTE[0XD000]#define LCD_Data XBYTE[0xD001]delay(){ unsigned short i,j; for(i=0;i<=200;i++) { for(j=0;j<=200;j++); }}void main(){ LED=0X55; LCD_COM=0X01; delay(); LED=0XAA; delay(); LED=0X55; LCD_COM=0X01; delay(); LED=0XAA; LCD_COM=0X38; delay(); LCD_COM=0X38; delay(); LCD_COM=0X38; delay(); LCD_COM=0X38; delay(); LCD_COM=0X08; delay(); LED=0XAA; LCD_COM=0X01; delay(); LCD_COM=0X06; delay(); LCD_COM=0X0F; delay(); while(1);}

 

眨眼一看,程序确实少了很多,如果要写数据,在while(1);前面加数据便可。

LCD_Data='a';

 

先上板子的原理图:

简单分析一下:

  P0口线既用作地址线,又用作数据线(分时复用),因此需要加一个8位的锁存器。

  使用ALE作为地址锁存的通选信号,以实现低8位地址的锁存。

  地址I/O是从P2.7到P2.0,接着P0.7到P0.0,这里可以很明显的理解

#define LCD_COM XBYTE[0XD000]#define LCD_Data XBYTE[0xD001]

  这两句话了。

  剩下直接看main()函数里面的了,里面也是按照1602的资料写的,但是是直接给出的,不是看高低电平判断延时时间写的,省事不少呀。

 

  虽然只是简单阐述了一下,但是按照总线型来设计电路图,来写程序,真心好。当然除此之外还有CAN总线,IIC,SPI,以及dala公司的一根线搞定,哈哈。再说一下总线吧,三总线简称ADC,这总是让我想起ADC的芯片,A是地址总线,D是数据总线,C是控制总线,是控制片外ROM、RAM和I/O的。这学期学单片机这门课程,之前没有上过微机原理那些,老师几个课时直接讲完,实在是精彩。当时也说过了解了总线型的话后面开发ARM芯片都很容易了,唉,我要走的路还很长呀。

 

 

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3480811.html

你可能感兴趣的文章
DiskFileUpload类别
查看>>
获取缓存大小和清除缓存功能
查看>>
java创建文件和目录
查看>>
【mysql】关于乐观锁
查看>>
Fiddler工具的基本功能
查看>>
C#中使用7Z进行压缩解压
查看>>
防止注入网上查了下用SqlParameter可以,那SqlParameter处理单引号时候是自动转义了吗...
查看>>
网页字体设置你了解吗?
查看>>
外部中断实验
查看>>
从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值
查看>>
HDU 1428 漫步校园 (BFS+优先队列+记忆化搜索)
查看>>
IntelliJ IDEA安装、配置、测试
查看>>
代码保存好
查看>>
JAVA 方法或者类的注释快捷键
查看>>
Pro Mac 如何将英文文件夹汉化为中文
查看>>
Python之多进程
查看>>
CSS选定第k个元素
查看>>
[转]MFC下关于“建立空文档失败”问题的分析
查看>>
内存与cpu的关系
查看>>
关于在JSP页面中为什么一定要用${pageContext.request.contextPath}来获取项目路径,而不能用${request.contextPath}?...
查看>>