一个旋转编码器+LCD1602的驱动程序
5页1、一个旋转编码器+LCD1602的驱动程序#include #include /* 宏定义字符串 */ #define uchar unsigned char #define LCD_DAT P0 /LCD数据/指令输入端(D7,D6,D5,D4,D3,D2,D1,D0) sbit LCD_RW = P25;/LCD读写控制端 sbit LCD_RS = P26;/LCD指令/数据控制端 sbit LCD_E = P27; /LCD使能控制端 sbit AA = P10;/接编码器A端 sbit BB = P11;/接编码器B端 /* 任意ms延时函数 */ void delayms(uchar count) uchar i,j; for(i = 0; i count; i+) for(j = 0; j 0; b-) for(a = 130; a 0; a-); /* LCD写函数 */ void LCD_W(uchar m, uchar com_dat) /m=0:写指令,m=1:写数据 LCD_RS = m; LCD_RW = 0;/写操作 LCD_E = 0; /使能禁止 LCD_
2、DAT = com_dat; /在指令/数据端置数 delay; /5ms延时 LCD_E = 1; /使能允许 delay; /5ms延时 LCD_E = 0; /使能禁止 /* LCD初始化函数 */ void LCD_INIT delay; delay; delay; /5ms延时 LCD_W(0, 0x38); /不检测忙信号 delay; LCD_W(0, 0x38); /不检测忙信号 delay; LCD_W(0, 0x38); /不检测忙信号 LCD_W(0, 0x38); /显示模式 LCD_W(0, 0x08); /显示关闭 LCD_W(0, 0x06); /光标移动 LCD_W(0, 0x0c); /显示开和光标设置 /* LCD清屏函数 */ void CLS LCD_W(0, 0x01); /清屏 /* LCD定位函数 */ void LOCATE(uchar H, uchar L) if(H = 1) /如果是第一行 LCD_W(0, 0x80 + L - 1); /定位在第一行第L列 else LCD_W(0, 0x80 + 0x40 + L - 1); /
3、否则定位在第二行第L列 /* LCD显示数值函数 */ void LCD(unsigned long num) char n, m; unsigned long ww; if(num 9) /两位数以上进行处理显示 n = log10(num); /取数值的位数 for(m = n; m = 0; m-) /从高位开始输出 ww = (num / pow(10, m); /从高位向低位依次取数 ww = ww % 10; /取各次的最低位数 LCD_W(1, 48 + ww); /输出 else LCD_W(1, 48 + num); /一位数直接显示 LCD_W(1, ); /显示空格 LCD_W(1, ); /显示空格 LCD_W(1, ); /显示空格 /* 主函数 */ void main uchar kkk, keys, tmp = 1; LCD_INIT;/LCD初始化 CLS;/清屏 while(1) if(AA = 0)/开始检测是否旋转了开关 delayms(10);/消除抖动 if(AA = 0) /确实是旋转了,进行正反转判断 if(BB = 0)/正转,进行正转处理 tmp = tmp * 2;/为了使LED正向递增 if(tmp = 0)tmp = 128;/达到最大值,不再加 kkk = +;/正转显示 + if(BB = 1)/反转,进行反转处理 tmp = tmp / 2;/为了使LED反向递减 if(tmp = 0)tmp = 1;/达到最小值,不再减 kkk = -;/反转显示 - LOCATE(1,1);/定位第 1 行 1 列 LCD(tmp);/显示数值 LOCATE(1,5);/定位第 1 行 5 列 LCD_W(1, kkk);/显示字符 keys = 0;/延时等待计数器 while(AA = 0)/等待开关A端复位,防止出现乱加减的现象 delayms(20);/延时等待 keys+;/计数器加 1 if(keys = 50)break;/达到 1 秒没有复位,开关卡住了,退出继续扫描开关 P3 = tmp; /输出到P0
《一个旋转编码器+LCD1602的驱动程序》由会员pu****.1分享,可在线阅读,更多相关《一个旋转编码器+LCD1602的驱动程序》请在金锄头文库上搜索。
2022-08-08 65页
2023-11-08 19页
2023-08-10 9页
2022-09-19 3页
2023-08-24 13页
2023-06-20 24页
2023-03-04 63页
2023-05-15 47页
2022-09-11 15页
2023-03-18 4页