<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 4×4矩陣鍵盤(pán)+1602液晶顯示

4×4矩陣鍵盤(pán)+1602液晶顯示

作者: 時(shí)間:2012-08-06 來(lái)源:網(wǎng)絡(luò ) 收藏

//這是51hei單片機開(kāi)發(fā)板附帶的一個(gè)程序,接p3口,其中p3.0-p3.4為行,P3.5->p3.7為列
//每按一下鍵數字便可顯示在液晶上面,并且蜂鳴器會(huì )發(fā)出響聲.
//全部源代碼下載: http://www.51hei.com/f/jz.rar

#includereg52.h>#include Intrins.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbit rs=P2^2;sbit lcden=P2^0;sbit rw=P2^1;sbit BEEP=P2^3;uchar num,temp,date,i;uchar code table_1[]=" shu ru tiao ma ";uchar code table_2[]=" Pro_8888 ";uchar code dis_tab[17]={ 0x30,	  //0在中的十六進(jìn)制碼  0x31,	  //1在1602中的十六進(jìn)制碼 	0x32,	  //2在1602中的十六進(jìn)制碼 0x33,	  //3在1602中的十六進(jìn)制碼 0x34,	  //4在1602中的十六進(jìn)制碼  0x35,	  //5在1602中的十六進(jìn)制碼 	0x36,	  //6在1602中的十六進(jìn)制碼 0x37,	  //7在1602中的十六進(jìn)制碼 0x38,	  //8在1602中的十六進(jìn)制碼  0x39,	  //9在1602中的十六進(jìn)制碼 	0x41,	  //A在1602中的十六進(jìn)制碼 0x42,	  //B在1602中的十六進(jìn)制碼0x43,	  //C在1602中的十六進(jìn)制碼  0x44,	  //D在1602中的十六進(jìn)制碼 	0x2A,	  //*在1602中的十六進(jìn)制碼 0x23,	  //#在1602中的十六進(jìn)制碼0x20,	  // 在1602中的十六進(jìn)制碼};void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void beep(){uchar i;for (i=0;i50;i++){delay(4);BEEP=0;       //BEEP取反} BEEP=1;           //關(guān)閉蜂鳴器delay(100);       //延時(shí)     }void lcd_wait_busy()  //1602忙檢測函數{  P0=0xff;			   //數據口全部置1,為讀狀態(tài)做準備rs=0;			   //選擇指令寄存器rw=1;			   //選擇讀lcden=1;				   //使能線(xiàn)電平變化while((P00x80)==0x80);//讀忙狀態(tài),不忙時(shí)退出lcden=0;				   //恢復使能線(xiàn)電平}// 1602寫(xiě)命令函數		 void lcd_write_com(unsigned char combuf){  rs=0;          	//選擇指令寄存器rw=0;           	//選擇寫(xiě)P0=combuf;         	//把命令字送入P2 	lcden=1;	            //使能線(xiàn)電平變化,命令送入1602的8位數據口_nop_();lcden=0;	            //恢復使能線(xiàn)電平}// 1602寫(xiě)命令函數(帶忙檢測)		 void lcd_write_com_busy(unsigned char combuf){  lcd_wait_busy();				//調用忙檢測函數lcd_write_com(combuf); 	//調用寫(xiě)命令函數}// 1602寫(xiě)數據函數(帶忙檢測)		 void lcd_write_data(unsigned char databuf){  lcd_wait_busy();	//調用忙檢測函數rs=1;          	//選擇數據寄存器rw=0;           	//選擇寫(xiě)P0=databuf;      	//把數據字送入P2lcden=1;	            //使能線(xiàn)電平變化,命令送入1602的8位數據口_nop_();lcden=0;	            //恢復使能線(xiàn)電平}// 1602顯示地址寫(xiě)函數		 void lcd_write_address(unsigned char x,unsigned char y){  	y=0x01;			//行地址限制在0-1if(y==0x00)lcd_write_com_busy(x|0x80);	   //第一行的列地址寫(xiě)入elselcd_write_com_busy((x+0x40)|0x80);	   //第二行的列地址寫(xiě)入}// 指定地址寫(xiě)入函數		 void lcd_write_char(unsigned char x,unsigned char y,unsigned char buf){  		lcd_write_address(x,y); //寫(xiě)入地址			lcd_write_data(buf);		//寫(xiě)入顯示數據    } // 液晶初始化指令void lcd_init(){uchar num;dula=0;wela=0;lcden=0;lcd_write_com_busy(0x38); //設置16*2顯示,5*7點(diǎn)陣,8位數據接口lcd_write_com_busy(0x0d); //關(guān)顯示 顯示光標 光標閃爍lcd_write_com_busy(0x06); //當讀或寫(xiě)一個(gè)字符后地址指針加一,且光標加一,寫(xiě)一個(gè)字符,整屏顯示移動(dòng)lcd_write_com_busy(0x01); //顯示清屏:1,數據指針清零 2,所有顯示清零lcd_write_com_busy(0x80); //80h+地址碼(0-27h,40h-67h) 設置數據地址指針    for(num=0;num16;num++){lcd_write_data(table_1[num]);delay(5);}lcd_write_com_busy(0x80+0x40);}void key_wdat(uchar i)  //按鍵寫(xiě)數據{//	dula=0;//	wela=0;//	lcden=0;//液晶初始化指令//	write_com(0x38); //設置16*2顯示,5*7點(diǎn)陣,8位數據接口//	write_com(0x0d); //關(guān)顯示 顯示光標 光標閃爍//	write_com(0x06); //當讀或寫(xiě)一個(gè)字符后地址指針加一,且光標加一,寫(xiě)一個(gè)字符,整屏顯示移動(dòng)//	write_com(0x01); //顯示清屏:1,數據指針清零 2,所有顯示清零//	write_com(0x80+0x40); //80h+地址碼(0-27h,40h-67h) 設置數據地址指針 lcd_wait_busy();lcd_write_data(i);delay(100);}// 刪除液晶第1或2行全部數據void clear(uchar t){if(t==1){lcd_write_com_busy(0x80);}if(t==2){lcd_write_com_busy(0x80+0x40);}for(i=0;i15;i++){lcd_write_data(dis_tab[16]);}lcd_write_com_busy(0x80+0x40);}// 產(chǎn)品顯示函數  待寫(xiě)         如何從鍵盤(pán)輸入中提取出三位的產(chǎn)品號碼???????????????????/*void display_product(){}*/// 4*4檢測void keyscan(){lcden=1;//???//P3=0xfe;temp=P3;temp=temp0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xee:key_wdat(dis_tab[7]); beep();    // 7break;case 0xde:key_wdat(dis_tab[8]); beep();    // 8break;case 0xbe:key_wdat(dis_tab[9]); beep();    // 9break;case 0x7e:key_wdat(dis_tab[17]); beep();   // break;}while(temp!=0xf0){temp=P3;temp=temp0xf0;}}}//P3=0xfd;temp=P3;temp=temp0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xed:key_wdat(dis_tab[4]); beep();  // 4break;case 0xdd:key_wdat(dis_tab[5]); beep();  // 5break;case 0xbd:key_wdat(dis_tab[6]); beep();  // 6break;case 0x7d:key_wdat(dis_tab[17]); beep();  // break;}while(temp!=0xf0){temp=P3;temp=temp0xf0;}}}//P3=0xfb;temp=P3;temp=temp0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key_wdat(dis_tab[1]);beep();  // 1break; case 0xdb:key_wdat(dis_tab[2]);beep();  // 2break;case 0xbb:key_wdat(dis_tab[3]);beep();  // 3break;case 0x7b:key_wdat(dis_tab[17]);beep();  // break;}while(temp!=0xf0){temp=P3;temp=temp0xf0;}}}//P3=0xf7;temp=P3;temp=temp0xf0;while(temp!=0xf0){delay(5);temp=P3;temp=temp0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key_wdat(dis_tab[0]); beep();  // 0break;case 0xd7:key_wdat(dis_tab[17]); beep();  // break;case 0xb7:clear(2); beep();  // 刪除液晶第二行break;case 0x77:beep();  // enterbreak;}while(temp!=0xf0){temp=P3;temp=temp0xf0;}}}}//void main(){lcd_init();while(1){keyscan();}while(1);}
蜂鳴器相關(guān)文章:蜂鳴器原理


評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>