新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機總線與非總線的程序對比

        51單片機總線與非總線的程序對比

        作者: 時間:2016-11-19 來源:網絡 收藏
        #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);//0x53for(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.但是看程序還是可以看出點什么吧~

        本文引用地址:http://www.104case.com/article/201611/318154.htm

          這是以前的程序了,當時是用來紅外測距,測的數據經AD轉換顯示出來,我把AD部分都刪去了。

          很明顯,非總線型的1602程序就是完全按照1602數據手冊上的高低電平來控制的,寫了很多代碼。

        接下來,看總線型的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);}

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

        LCD_Data=a;

        先上板子的原理圖:


        簡單分析一下:

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

          使用ALE作為地址鎖存的通選信號,以實現低8位地址的鎖存。

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

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

          這兩句話了。

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

          雖然只是簡單闡述了一下,但是按照總線型來設計電路圖,來寫程序,真心好。當然除此之外還有CAN總線,IIC,SPI,以及dala公司的一根線搞定,。再說一下總線吧,三總線簡稱ADC,這總是讓我想起ADC的芯片,A是地址總線,D是數據總線,C是控制總線,是控制片外ROM、RAM和I/O的。這學期學單片機這門課程,之前沒有上過微機原理那些,老師幾個課時直接講完,實在是精彩。當時也說過了解了總線型的話后面開發ARM芯片都很容易了,唉,我要走的路還很長呀。



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 华亭县| 红河县| 彩票| 北碚区| 封开县| 包头市| 县级市| 鹤山市| 襄汾县| 苏尼特左旗| 夏河县| 西乡县| 伊宁市| 深州市| 博乐市| 阿合奇县| 安康市| 织金县| 樟树市| 吉安市| 沁水县| 九龙县| 固始县| 海淀区| 德昌县| 清流县| 陆良县| 南康市| 色达县| 舒兰市| 巫溪县| 太保市| 兴文县| 和政县| 安庆市| 益阳市| 师宗县| 平安县| 惠水县| 西安市| 巴塘县|