历史上的今天
今天是:2025年01月20日(星期一)
2021年01月20日 | 51单片机总线与非总线的程序对比
2021-01-20 来源:eefocus
简介:三总线简称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';
先上板子的原理图:


简单分析一下:
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芯片都很容易了,唉,我要走的路还很长呀。
下一篇:单片机系统软件抗干扰方法
史海拾趣
|
承接嵌入式系统项目开发 相信大家都知道,要想产品具有竞争力,一般都要使用操作系统来提高附加值。然而使用别人的操作系统就要支付高额的授权费。这直接导致了开发成本的增加,降低了产品的竞争力。 我们团队独立研发了具有自主知识产权的操作系 ...… 查看全部问答> |
|
Crosstar嵌入式学院“利用/proc实现内核与用户空间通信” Linux内核空间与用户空间的通信可通过\"/proc\"目录的文件读写来实现,如果只是控制内核中的参数而不是传输较多数据的话,用“/proc”是很合适的。另外几种内核与用户空间通信方式方式是:1)对内核设备的读写或IOCTL;2)通过/sys内存文件系统来 ...… 查看全部问答> |
|
发现个很郁闷的问题。用TCP发送数据。数据中如果有 0x0D 0x0A的话,模块会给你做些处理,收到以后就变成了 0x0D,0x0D,0x0A.或者0x0D,0x0A,0x0A. 发短信,用文本方式时也有这样的问题 大家有没有出现同样问题的?… 查看全部问答> |
|
大家好.... 我在弄LM3S9997 可是下载不了程序。。 (原文件名:222.jpg) 引用图片下面的资料。可能发现看不问题。。觉得哪里可能有问题就说说吧。。我改的 希望过来人教教我。。还有就是读到了芯片的ID以及ROM的ID ,是不是就说 ...… 查看全部问答> |
|
1、关于TI教室中课程,除了第一个有进度其他的看了,没进度,不知道什么原因,希望能给个解释。 [ 本帖最后由 Sur 于 2013-12-3 21:20 编辑 ]… 查看全部问答> |




