DS18B20(已通过)测试

源代码在线查看: keyscan.h

软件大小: 43 K
上传用户: xx87293767
关键词: 18B B20 DS 18
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include 
				//#include 
				//unsigned char code BCD[]={0x3f,0x06,0x5b,0x4f, //此处是将0-F转换成相应的BCD码
				//                          0x66,0x6d,0x7d,0x07, 
				//                          0x7f,0x6f,0x77,0x7c, 
				//                          0x39,0x5e,0x79,0x71};
				//unsigned char code KEY[]={0x00,0x00,0x01,0x02,0x03,//此处是为使程序通用,当键值不是按
				//						  	   0x04,0x05,0x06,0x07,//这个排列时,把此表更改即可
				//							   0x08,0x09,0x0a,0x0b,//最前面的那个0x00是为了查表方便,
				//							   0x0c,0x0d,0x0e,0x0f};//因为键值是从1开始的
											
				sfr key_port=0x90;	    //定义P1口为键盘扫描口
										//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
				bit key_ok=0;       	//有键按下的标志
				
				/*************延时子程序*************
				****调用一次用时18微秒,t每加1,用时增加6微秒*/
				void delay(unsigned char t)
				{
				 while(t--);
				}
				
				
				unsigned char r_left(unsigned char x)//循环左移一位
				{
				 x				 x++;
				 return(x);
				}
				
				/*************粗判有无键按下**********
				****有键按下则将key_ok置1************/
				void scan_full(void)
				{
					unsigned char temp;
					key_port=0xf0; 		//低半字节为行线,高半字节为列线
					temp=P1;
					if(temp!=0xf0)
					key_ok=1;
					else key_ok=0;
				}
				/************键盘扫描程序*************************
				****功能:返回键值,当无键按下时,返回0*************/
				 unsigned char key_scan(void)
				{
				 unsigned char temp,count=0x01,key_value;//按键返回值
				 unsigned char x_scan=0xfe,y_scan=0xef;//行、列扫描码
				 unsigned char i,j,y;		//行数和列数
				 while(1)
				 {
				 	scan_full();	 		//粗判是否有键按下
				 	if(key_ok==1)
				 	{
				   		key_ok=0;
				   		delay(200);			//延时去抖动
				   		scan_full();			//再次粗判是否有键按下
				   		if(key_ok==1)
				   		{
				    		for(i=0;i				    		{
					 			key_port=x_scan;
				     			for(j=0;j				     			{
				      				temp=key_port;
					  				temp=temp&0xf0;
					  				y=y_scan&0xf0;
					  				if(temp==y)
					  				{
										while(key_ok!=0)//等待按键松开
				   						{
											scan_full();
				   						}
					   					key_value=count;												
					   					return(key_value);//找到键值,马上返回
					  				}
					  				else 
					  				{
					   					count++;
					   					y_scan=r_left(y_scan);
					  				}	 
					 			}
								y_scan=0xef;		//扫描完一列,重新对列扫描量赋初值
					 			x_scan=r_left(x_scan);//行扫描码左移一位,扫描下一行  					
							}
						}
				  	} 
				    return(key_value);//没键按下,返回0
				 }
				}
				
				//unsigned char key(void)
				//{
				 // unsigned char x;
				 // unsigned char y;
				 // x=key_scan();
				 // return(x);
				  //y=KEY[x];	
				  //return y;
				//}
							

相关资源