51單片機總線與非總線的程序?qū)Ρ?/h1>
#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寫數(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選 寫的位置和數(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);}
板子原理圖是當時自己畫的,目測找不到了。T T.但是看程序還是可以看出點什么吧~
本文引用地址:http://m.butianyuan.cn/article/201611/318154.htm 這是以前的程序了,當時是用來紅外測距,測的數(shù)據(jù)經(jīng)AD轉(zhuǎn)換顯示出來,我把AD部分都刪去了。
很明顯,非總線型的1602程序就是完全按照1602數(shù)據(jù)手冊上的高低電平來控制的,寫了很多代碼。
接下來,看總線型的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ù)據(jù),在while(1);前面加數(shù)據(jù)便可。
LCD_Data=a;
先上板子的原理圖:
簡單分析一下:
P0口線既用作地址線,又用作數(shù)據(jù)線(分時復用),因此需要加一個8位的鎖存器。
使用ALE作為地址鎖存的通選信號,以實現(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的資料寫的,但是是直接給出的,不是看高低電平判斷延時時間寫的,省事不少呀。
雖然只是簡單闡述了一下,但是按照總線型來設計電路圖,來寫程序,真心好。當然除此之外還有CAN總線,IIC,SPI,以及dala公司的一根線搞定,。再說一下總線吧,三總線簡稱ADC,這總是讓我想起ADC的芯片,A是地址總線,D是數(shù)據(jù)總線,C是控制總線,是控制片外ROM、RAM和I/O的。這學期學單片機這門課程,之前沒有上過微機原理那些,老師幾個課時直接講完,實在是精彩。當時也說過了解了總線型的話后面開發(fā)ARM芯片都很容易了,唉,我要走的路還很長呀。
#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寫數(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選 寫的位置和數(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);}
板子原理圖是當時自己畫的,目測找不到了。T T.但是看程序還是可以看出點什么吧~
本文引用地址:http://m.butianyuan.cn/article/201611/318154.htm這是以前的程序了,當時是用來紅外測距,測的數(shù)據(jù)經(jīng)AD轉(zhuǎn)換顯示出來,我把AD部分都刪去了。
很明顯,非總線型的1602程序就是完全按照1602數(shù)據(jù)手冊上的高低電平來控制的,寫了很多代碼。
接下來,看總線型的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ù)據(jù),在while(1);前面加數(shù)據(jù)便可。
LCD_Data=a;
先上板子的原理圖:
簡單分析一下:
P0口線既用作地址線,又用作數(shù)據(jù)線(分時復用),因此需要加一個8位的鎖存器。
使用ALE作為地址鎖存的通選信號,以實現(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的資料寫的,但是是直接給出的,不是看高低電平判斷延時時間寫的,省事不少呀。
雖然只是簡單闡述了一下,但是按照總線型來設計電路圖,來寫程序,真心好。當然除此之外還有CAN總線,IIC,SPI,以及dala公司的一根線搞定,。再說一下總線吧,三總線簡稱ADC,這總是讓我想起ADC的芯片,A是地址總線,D是數(shù)據(jù)總線,C是控制總線,是控制片外ROM、RAM和I/O的。這學期學單片機這門課程,之前沒有上過微機原理那些,老師幾個課時直接講完,實在是精彩。當時也說過了解了總線型的話后面開發(fā)ARM芯片都很容易了,唉,我要走的路還很長呀。
評論