新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)總線與非總線的程序?qū)Ρ?/p>

51單片機(jī)總線與非總線的程序?qū)Ρ?/h1>
作者: 時(shí)間:2016-11-19 來(lái)源:網(wǎng)絡(luò) 收藏
#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;//延時(shí)void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}//1602寫(xiě)地址void write_com(uchar com){yidianling=0;yidianyi=0;P0=com;delay(5);shuru=1;delay(5);shuru=0;} //1602寫(xiě)數(shù)據(jù)                                                                        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);//0x53for(num=0;num<16;num++){write_data(table1[num]);delay(2);}}//1602選 寫(xiě)的位置和數(shù)據(jù)void write_sfm(uchar add,uchar date){write_com(0x80+0x40+add);write_data(0x30+date);    }//主函數(shù)void main(){P1=0xff;P0=0xff;init();while(1);}

  板子原理圖是當(dāng)時(shí)自己畫(huà)的,目測(cè)找不到了。T T.但是看程序還是可以看出點(diǎn)什么吧~

本文引用地址:http://butianyuan.cn/article/201611/318154.htm

  這是以前的程序了,當(dāng)時(shí)是用來(lái)紅外測(cè)距,測(cè)的數(shù)據(jù)經(jīng)AD轉(zhuǎn)換顯示出來(lái),我把AD部分都刪去了。

  很明顯,非總線型的1602程序就是完全按照1602數(shù)據(jù)手冊(cè)上的高低電平來(lái)控制的,寫(xiě)了很多代碼。

接下來(lái),看總線型的1602顯示程序吧:

#include #include #define LCD_COM XBYTE[0XD]#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);}

眨眼一看,程序確實(shí)少了很多,如果要寫(xiě)數(shù)據(jù),在while(1);前面加數(shù)據(jù)便可。

LCD_Data=a;

先上板子的原理圖:


簡(jiǎn)單分析一下:

  P0口線既用作地址線,又用作數(shù)據(jù)線(分時(shí)復(fù)用),因此需要加一個(gè)8位的鎖存器。

  使用ALE作為地址鎖存的通選信號(hào),以實(shí)現(xiàn)低8位地址的鎖存。

  地址I/O是從P2.7到P2.0,接著P0.7到P0.0,這里可以很明顯的理解

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

  這兩句話了。

  剩下直接看main()函數(shù)里面的了,里面也是按照1602的資料寫(xiě)的,但是是直接給出的,不是看高低電平判斷延時(shí)時(shí)間寫(xiě)的,省事不少呀。

  雖然只是簡(jiǎn)單闡述了一下,但是按照總線型來(lái)設(shè)計(jì)電路圖,來(lái)寫(xiě)程序,真心好。當(dāng)然除此之外還有CAN總線,IIC,SPI,以及dala公司的一根線搞定,。再說(shuō)一下總線吧,三總線簡(jiǎn)稱ADC,這總是讓我想起ADC的芯片,A是地址總線,D是數(shù)據(jù)總線,C是控制總線,是控制片外ROM、RAM和I/O的。這學(xué)期學(xué)單片機(jī)這門課程,之前沒(méi)有上過(guò)微機(jī)原理那些,老師幾個(gè)課時(shí)直接講完,實(shí)在是精彩。當(dāng)時(shí)也說(shuō)過(guò)了解了總線型的話后面開(kāi)發(fā)ARM芯片都很容易了,唉,我要走的路還很長(zhǎng)呀。



關(guān)鍵詞: 51單片機(jī)總線非總

評(píng)論


技術(shù)專區(qū)

關(guān)閉