51单片机总线与非总线的程序对比

来源:本站
导读:目前正在解读《51单片机总线与非总线的程序对比》的相关信息,《51单片机总线与非总线的程序对比》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《51单片机总线与非总线的程序对比》的详细说明。
简介:三总线简称ADC,这总是让我想起ADC的芯片,A是地址总线,D是数据总线,C是控制总线,是控制片外ROM、RAM和I/O的。

#include

#include

#define uchar unsigned char

#define uint unsigned int

uchar 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';

先上板子的原理图:

51单片机总线与非总线的程序对比51单片机总线与非总线的程序对比

简单分析一下:

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芯片都很容易了,唉,我要走的路还很长呀。

提醒:《51单片机总线与非总线的程序对比》最后刷新时间 2024-03-14 00:51:37,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《51单片机总线与非总线的程序对比》该内容的真实性请自行鉴别。