·找啄木鸟家庭维修
·人才库累计注册数十万维修工程师
·信息严格加密,放心预约
·预约只需6秒快速完成!
专业师傅
全国服务
质量保障
2023-08-21
不好说 多的很
2023-08-21
#define LCD1602_FLAG#define LCD1602_PORT P0#includereg51.h#includestddef.h#define uchar unsigned charsbit lcd1602_rs=P2^0;sbit lcd1602_e=P2^2;sbit lcd1602_rw=P2^1;sbit lcd1602_busy=P0^7;uchar str[]=This is Key Test;uchar keyval,keystr[16];void delay(uchar a){uchar i;while(a--)for(i=0;i120;i++);}/************************************* * 函数名称:lcd1602_CheckBusy() * 函数功能:状态查询*************************************/void lcd1602_CheckBusy(){ do { lcd1602_busy=1; lcd1602_rs=0; lcd1602_rw=1; lcd1602_e=0; lcd1602_e=1; } while(lcd1602_busy);}/**************************************** * 函数名称: lcd1602_WriteCmd() * 函数功能:写命令 * 入口参数:命令字 * 出口参数:无****************************************/void lcd1602_WriteCmd(const uchar cmd){ lcd1602_CheckBusy(); lcd1602_rs=0; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT=cmd; lcd1602_e=0;}/******************************************** * 函数名称:lcd1602_WriteData() * 函数功能:写数据 * 入口参数:c--待写数据 * 出口参数:无**********************************************/void lcd1602_WriteData(const uchar c){ lcd1602_CheckBusy(); lcd1602_rs=1; lcd1602_rw=0; lcd1602_e=1; LCD1602_PORT=c; lcd1602_e=0;}/************************************************ * 函数名称:lcd1602_Init() * 函数功能:初始化LCD * 入口参数:无 * 出口参数:无************************************************/void lcd1602_Init(){ lcd1602_WriteCmd(0x38); //显示模式为8位2行5*7点阵 lcd1602_WriteCmd(0x0c); //display enable,flag enable,flash enable, lcd1602_WriteCmd(0x06); //flag move to right,screen don't move lcd1602_WriteCmd(0x01); //clear screen}/************************************************* * 函数名称:lcd1602_Display() * 函数功能: 字符显示 * 入口参数:ptr--字符或字符串指针 * 出口参数:无 * 说 明:用户可通过以下方式来调用: * 1)lcd1602_Display(Hello,world!); * 2) INT8U 存储类型 txt[]=要显示的字符串; * 或者 INT8U 存储类型 txt[]={'t','x','t',..,'\0'}; * INT8U *ptr; * ptr=&txt * lcd1602_Display(ptr); * 或 lcd1602_Display(txt); * 或 lcd1602_Display(&txt);*************************************************/void lcd1602_Display(const uchar *ptr,uchar line){ uchar data i=0; uchar *data q; q=ptr; switch(line) { case 0: lcd1602_WriteCmd(0x80); while(q!=NULL && (*q!='\0') && i16) { lcd1602_WriteData(*q); q++; i++; } break; case 1: lcd1602_WriteCmd(0xc0); while(q!=NULL && (*q!='\0') && i16) { lcd1602_WriteData(*q); q++; i++; } break; }}uchar kbscan(void){ unsigned char sccode,recode; P3=0x0f; //发0扫描,列线输入 if ((P3 & 0x0f) != 0x0f) //有键按下 { delay(20); //延时去抖动 if ((P3&0x0f)!= 0x0f) { sccode = 0xef; //逐行扫描初值 while((sccode&0x01)!=0) { P3=sccode; if((P3&0x0f)!=0x0f) { recode=(P3&0x0f)|0xf0; while((P3&0x0f)!=0x0f);//等待键抬起 return((~sccode)+(~recode)); } else sccode=(sccode1)|0x01; } } } return 0; //无键按下,返回0}uchar getkey(void){ uchar key; key=kbscan(); if(key==0){keyval=0xff;return(0);} switch(key) { case 0x11:keyval=7;break; case 0x12:keyval=4;break; case 0x14:keyval=1;break; case 0x18:keyval=10;break; case 0x21:keyval=8;break; case 0x22:keyval=5;break; case 0x24:keyval=2;break; case 0x28:keyval=0;break; case 0x41:keyval=9;break; case 0x42:keyval=6;break; case 0x44:keyval=3;break; case 0x48:keyval=11;break; case 0x81:keyval=12;break; case 0x82:keyval=13;break; case 0x84:keyval=14;break; case 0x88:keyval=15;break; default:keyval=0xff;break; } if(keyval!=0xff)return(1); else return(0);}main(){uchar num;lcd1602_Init();lcd1602_Display(str,0);while(1) { if(getkey()) { if(keyval10)keystr[num]=keyval+0x30; else keystr[num]=keyval-10+'A'; lcd1602_Display(keystr,1); num++; num%=16; } }}
回答:
2023-08-21
内容太多了,你就说哪些你不会吧,减少下工作量吧。/***********************************************************/#define LCD XBYTE[0xffff] // 定义LCD显示的数组,这边用0xffff浪费 // 只要32就可以了#define uint unsigned int // 宏定义“短表示”,方便书写#define uchar unsigned char // 同上void lcd_mwc(uchar i) // 这个函数是用来写命令的:如启动液晶 // 锁定液晶等,可以查看液晶控制字就知道 // 0xb8和0x40是什么命令了,估计是启动/*********************************************/// 属于函数void lcd_clear(void) 要查看液晶的规格书uchar i; // 定义液晶每页的地址个数,用来清0uchar page; // 定义液晶的Page地址(page=0xb8;page0xc0;page++) // 循环清零/*********************************************/uchar i; // 定义传送数据的个数for (i=16;i32;i++) lcd_mwd(*(hz+i)); // lcd_mwd函数的作用是通过给LCD // 数组初始化地址,然后根据地址 // 递增将数组QING[32]等的对应地 // 数据传送到液晶数据口;这边是 // 循环传送后面16个数据for (i=0;i16;i++) lcd_mwd(*(hz+i)); // 同上,传送前面的16个数据/*****************************************************************/从你的程序上看,液晶应该由上下两块显示Page组成,然后上面的Page显示4个汉字的上半段,下面显示4个汉字的下半段,所以有8个Page,和你的void lcd_clear(void) 函数也就对应了。void dispm_hz_down(uchar code * hz)
回答:
2023-08-21
temp等于0x0e时,键值key等于7 : 这个键值是你自己定义的,就是起一个标志位的作用,然后用程序判断键值,当键值等于7时,该进行什么动作,这就相当于当你那个按键按下时执行什么动作写单片机C程序 一定要活用标志位还有你好像都大四了,怎么这样普通的矩阵键盘程序还看不懂,该好好学习呀 兄弟I和J 只是一个变量 用来决定延时时间的长短 延时是为了消除按键的抖动毕竟机械按键存在抖动(按下去并不是电平直接就跳变并稳定下来了)延时是软件消抖 增强系统的稳定性
回答:
2023-08-21
您好,楼主工作的原理是:用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4 X 4个。这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
回答:
·找啄木鸟家庭维修
·人才库累计注册数十万维修工程师
·信息严格加密,放心预约
·预约只需6秒快速完成!
您好,楼主工作的原理是:用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上,设置一个按键。而这样的按键中按键的个数是4 X 4个。这样的行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。
阅读全文你好,矩阵式LED大灯的远光处有5颗灯珠,而普通的LED只有2颗,矩阵式的一个特殊功能就是根据远处的灯光关闭相应的远光,还有一个区别就是转向灯的闪烁方式,矩阵式是动态的,而普通的LED则是一闪一闪的与普通的转向灯一样。
阅读全文冰箱工作原理,实际上就是一个冰箱制冷的过程,了解冰箱工作原理,有利于我们在日常生活中有效解决冰箱的运行过程中的故障。
阅读全文太阳能热水器是一种运用太阳辐射能将水加热的设备,在现代家庭生活中得到了广泛应用。其工作原理是将太阳能转化为热能,通过集热器中的吸光体将热能传给水,通过水管将水加热至设定的温度,最终供给家庭使用。
阅读全文计算机的基本原理:存储程序控制原理。该原理的特点是:(1):在执行程序和处理数据时必需将程序和数据装入存储器中,然后才能使计算机在工作时能够自动地从存储器中取出指令并加以执行。(2):用二进制形式表示数据和指令。(3):对计算进行集中的顺序控制。(4):计算机系统由运算器、存储器、控制器、输入设备、输出设备等5大部件组成。冯·诺依曼“存储程序”工作原理的核心包含两层含义:首先,将编写好的程序和原始
阅读全文当然是节流作用了,节流阀前端(也就是冷凝器端)压力大,后端(即蒸发器端)压力小,从而使蒸发器和冷凝器存在压力差,制冷剂流出节流阀的瞬间才会进行闪发,这种闪发是要吸收很大一部分热量的
阅读全文要拆开储物柜,里面有个盖板,抜出来,更换就行的,
匿名用户
回答
制冷系统泄漏,制冷剂全跑光了,压缩机虽运转,但系统中无制冷剂蒸发吸热,所以电冰箱内温度不下降毛细管中阻塞,制冷剂不能进入蒸发器中蒸发吸热,所以电冰箱内温度不下降在环境温度低于温度控制器正常的启动温度时,应检查电冰箱的低温开关是否打开
啄木鸟家庭维修
回答
热水器安装位置的要求:家用机外机应安装在通风良好的位置,主机顶部不得高处水箱顶部,这样能使产品效率能够达到最佳状态扩展资料注意事项格力空气能热水器的水箱放在室内或阳台,必须在水箱附近预设一个标准地漏,保持常开状态,并在水箱周边安装隔水设施预设的热水管要求保温,尤其是安装有回水管道的热水系统
匿名用户
回答
微波炉按键没反应,修达达介绍了以上两种方法,用户先关闭电源再进行检修,如果损坏严重,建议直接更换购买新的微波炉,相比维修费用会更划算微波炉如果按了开关键,没有反应,主要可能是接触不良、按钮老化等问题,下面为大家分析一下微波炉的检修方法(3)如果阻值为无穷大,说明保险管损坏,需要更换
匿名用户
回答