- 主程序:
- #include <reg51.h>
- #include "lcd.h"
- #include "string.h"
- #include "math.h"
- #include "stdio.h"
-
- typedef unsigned char uint8; //宏定义 :用uint8 重定义unsigned char 无符号char型
- typedef unsigned int uint16;
- uint8 Disp[]="1.calculate";
- uint8 fuhao;//定义具体的那个符号,是加减还是乘除。
- uint8 flag; //定义有没有按下符号键,这个是统称
- long a,b,c,d; //定义运算数据的第一个和第二个及等于的数变量
- double a_l,b_l; //double类型存结果可正负带小数点
- uint8 k,a_wei,b_wei; //定义小数点后面显示的位数
- uint8 zh,xiao,key,num,num_d,i,j;
- uint16 biao,fhao_a,fhao_b;
- uint8 key_lie[] = {0xef,0xdf,0xbf,0x7f}; //列低电平组
- uint8 key_wei[] = {0xe7,0xd7,0xb7,0x77, //位低电平组
- 0xeb,0xdb,0xbb,0x7b,
- 0xed,0xdd,0xbd,0x7d,
- 0xee,0xde,0xbe,0x7e};
- uint8 dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30, 0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//计算 123+ 456- 789* 0R=/
- uint8 dat2[]={0,1,2,3, 4,5,6,7, 8,9,0x41-0x30,0x42-0x30, 0x43-0x30,0x44-0x30,0x45-0x30,0x46-0x30};// 进制转换0123 4567 89ab cdef
- void delay(uint16 i) //延时函数
- {
- while(i--);
- }
- void lcdwrc(uint8 c) //lcd指令函数
- {
- LcdWriteCom(c);
- }
- void lcdwrd(uint8 dat) //lcd显示函数
- {
- LcdWriteData(dat);
- }
- void lcdwrd_string(uint8 dat[],uint n) //lcd显示字符串
- {
- uint8 i;
- for(i=0;i<n;i++)
- {
- lcdwrd(dat[i]); [/i][i]
- }
- }
- void num_zero() //数据归零
- {
- key=0;
- num=0;
- flag=0;
- fuhao=0;
- a=0;
- b=0;
- c=0;
- d=0;
- biao=0;
- zh = 0;
- xiao = 0;
- a_wei = 0;
- b_wei = 0;
- fhao_a = 0;
- fhao_b = 0;
- }
- void keyscan() //键盘取值和运算
- {
-
- if(P3 == 0xf7&&xiao == 0) //小数点11110111
- {
- delay(1000); //消除抖动 一般大约10ms
- if(P3 == 0xf7) //再次判断按键是否按下
- {
- xiao = 1; //小数点标志
- }
- while(P3 == 0xf7); //检测按键是否松开
- lcdwrd(0x2e); //显示小数点
- }
-
- if(P3 == 0xfb) //负号11111011
- {
- delay(1000); //消除抖动 一般大约10ms
- if(P3 == 0xfb) //再次判断按键是否按下
- {
- if (flag==0)fhao_a++; //运算符号之前的负号
- else fhao_b++; //运算符号之后的负号
- }
- while(P3 == 0xfb); //检测按键是否松开
- lcdwrd(0x2d);
- }
- P1=0xfe; //令第一行为0,然后判断是哪一列按下11111110,低位第一行
- if(P1!=0xfe)
- {
- delay(1000);
- if(P1!=0xfe)
- {
- key=P1&0xf0; // 将按下的键的电平给key 比如1110 1111 于 1111 0000 结果为1110 0000
- switch(key)
- {
- case 0xe0: num=0;break; //1
- case 0xd0: num=1;break; //2
- case 0xb0: num=2;break; //3
- case 0x70: num=3;break; //加
- }
- }
- while(P1!=0xfe);
- if(num==0||num==1||num==2) //确认第一行的数1,2,3
- {
- if(flag==0) //没有按下符号键
- {
- if (xiao == 1){a_wei++;} //有小数点的话要记录小数点后有几位
- a=a*10+dat1[num]; //比如第一位输入2第二位输入1就是21 要存起来就是第一次是2 第二次是2*10+1
-
- }
- else//按下符号键
- {
- if (xiao == 1){b_wei++;}
- b=b*10+dat1[num];
- }
-
- }
- if(num==3)
- {
-
- flag=1;
- fuhao=1;//加号+
- xiao=0;
- }
- lcdwrd(0x30+dat1[num]);
- }
- P1=0xfd; //令第二行为0,判断是哪一列按下,低位第二行
- if(P1!=0xfd)
- {
- delay(1000);
- if(P1!=0xfd)
- {
- key=P1&0xf0;
- switch(key)
- {
- case 0xe0: num=4;break; //4
- case 0xd0: num=5;break; //5
- case 0xb0: num=6;break; //6
- case 0x70: num=7;break; //减—
- }
- }
- while(P1!=0xfd);
- if(num==4||num==5||num==6)
- {
- if(flag==0) //没有按下符号键
- {
- if (xiao == 1){a_wei++;}
- a=a*10+dat1[num];
- }
- else
- {
- if (xiao == 1){b_wei++;}
- b=b*10+dat1[num];
- }
- }
- else
- {
- flag=1;
- fuhao=2;//带表减号
- xiao=0;
- }
- lcdwrd(0x30+dat1[num]);
- }
- P1=0xfb; //令第三行为0,判断哪一列按下
- if(P1!=0xfb)
- {
- delay(1000);
- if(P1!=0xfb)
- {
- key=P1&0xf0;
- switch(key)
- {
- case 0xe0: num=8;break; //7
- case 0xd0: num=9;break; //8
- case 0xb0: num=10;break; //9
- case 0x70: num=11;break; //乘*
- }
- }
- while(P1!=0xfb);
- if(num==8||num==9||num==10)
- {
- if(flag==0) //没有按下符号键
- {
- if (xiao == 1){a_wei++;}
- a=a*10+dat1[num];
- }
- else
- {
- if (xiao == 1){b_wei++;}
- b=b*10+dat1[num];
- }
- }
- else
- {
- flag=1;
- fuhao=3;//带表乘号*
- xiao=0;
- }
- lcdwrd(0x30+dat1[num]);
- }
- P1=0xf7; //令第四行为0,判断哪一列按下
- if(P1!=0xf7)
- {
- delay(1000);
- if(P1!=0xf7)
- {
- key=P1&0xf0;
- switch(key)
- {
- case 0xe0: num=12;break; //0
- case 0xd0: num=13;break; //清除rst
- case 0xb0: num=14;break; //等号=
- case 0x70: num=15;break; //除/
- }
- }
- while(P1!=0xf7);
- switch(num)
- {
- case 12:
- if(flag==0) //没有按下符号键
- {
- if (xiao == 1){a_wei++;}
- a=a*10+dat1[num];
- lcdwrd(0x30);
- }
- else
- {
- if (xiao == 1){b_wei++;}
- b=b*10+dat1[num];
- lcdwrd(0x30);
- }
- break;
-
- case 13:
- lcdwrc(0x01); //清屏指令
- num_zero();
- break;
- case 15:
-
- flag=1;
- fuhao=4;
- lcdwrd(0x2f);//除号/
- xiao=0;
- break;
- case 14:
-
- lcdwrc(0xc0);//从第二行第一个开始显示
- lcdwrd(0x3d); //显示等于号=
- if(fhao_a==1){a_l = a*pow(0.1,a_wei)*(-1);} //将结果保存到double精度的数中
- //有几位小数的话要乘0.1的几次方
- //负数的话要成-1
- else {a_l = a*pow(0.1,a_wei);}
- if(fhao_b==1){b_l = b*pow(0.1,b_wei)*(-1);}
- else {b_l = b*pow(0.1,b_wei);}
- if(fuhao==1)//加
- {
- sprintf(Disp,"%-6.3f",a_l+b_l); //将结果存在数组中方便显示
- //spintf将右边的字符串到左边数组中
- //%-6.3f为占位符既(1)表示靠左6位保留三位小数的浮点数
- lcdwrd_string(Disp,6); //显示
- }
- if(fuhao==2)//减
- {
- sprintf(Disp,"%-6.3f",a_l-b_l);
- lcdwrd_string(Disp,6);
- }
- if(fuhao==3)//乘
- {
- sprintf(Disp,"%-9.4f",a_l*b_l);
- lcdwrd_string(Disp,9);
- }
- if(fuhao==4)//除
- {
- sprintf(Disp,"%-9.4f",a_l/b_l);
- lcdwrd_string(Disp,9);
- }
- num_zero();
- }
- }
- }
- /*
- 进制转换 先将输入的数转换成十进制存起来
- 不同进制转10进制按权取数 比如 八进制的76 既7*8^1 +6*8^0= 62
- 10进制转不同进制除进制取余 比如 十进制62转八进制 62除8=7余数6 7除8=0余7 结果反过来写就是76
- */
- void change()
- {
- if(P3 != 0xff)
- {
- delay(1000);
- if(P3 != 0xff)
- {
- switch(P3)
- {
- case 0xef: num=5;break; //1110 1111 2进制
- case 0xdf: num=6;break; //1101 1111 8进制
- case 0xbf: num=7;break; //1011 1111 10进制
- case 0x7f: num=8;break; //0111 1111 16进制
- }
- }
- while(P3 != 0xff);
- fuhao++; //第几次按进制键 第一次输入 第二次输出
- if (num == 5)
- {
- if(fuhao==1)lcdwrd_string("0b",2); //2进制前显示0b
- flag = 1;// 1 2进制 2 8进制 3 10进制 4 16进制
- }
- else if(num == 6)
- {
- if(fuhao==1)lcdwrd_string("0o",2);
- flag = 2;
- }
- else if(num == 7)
- {
- if(fuhao==1)lcdwrd_string("SS",2);
- flag = 3;
- }
- else if(num == 8)
- {
- if(fuhao==1)lcdwrd_string("0x",2);
- flag = 4;
- }
- if (fuhao == 2){lcdwrc(0x4f+0x80);//下一行
- lcdwrc(0x04);//设置光标左移,屏幕不移动
- }
- if(flag == 1&&fuhao >= 2) //按两次进制键 且第二次转换为二进制
- {
- lcdwrc(0x4f+0x80); //第二行最后一个
- lcdwrd_string(" ",16); //清屏
- lcdwrc(0x4f+0x80);
- a = biao; //将值付给a以免第二次转换乱码
- while(a!=0) //一位一位显示 值到零
- {
- lcdwrd(0x30+a%2); //十进制转二进制 初二取余 每次取余
- a=a/2; //每次除二
- }
- lcdwrd_string("b0",2);
- }
- else if(flag == 2&&fuhao >= 2)
- {
- lcdwrc(0x4f+0x80);
- lcdwrd_string(" ",16);
- lcdwrc(0x4f+0x80);
- b = biao;
- while(b!=0) //一位一位显示
- {
- lcdwrd(0x30+b%8); //十进制转8进制 初8取余 每次取余
- b=b/8; //每次除8
- }
- lcdwrd_string("o0",2);
- }
- else if(flag == 3&&fuhao >= 2)
- {
- lcdwrc(0x4f+0x80);
- lcdwrd_string(" ",16);
- lcdwrc(0x4f+0x80);
- c = biao;
- while(c!=0) //一位一位显示
- {
- lcdwrd(0x30+c%10);
- c=c/10;
- }
- lcdwrd_string("SS",2);
- }
- else if(flag == 4&&fuhao >= 2)
- {
- lcdwrc(0x4f+0x80);
- lcdwrd_string(" ",16);
- lcdwrc(0x4f+0x80);
- d = biao;
- while(d!=0) //一位一位显示
- {
- zh = d%16;
- if(zh < 10){lcdwrd(0x30+d%16);} //如果小于10正常显示
- else {lcdwrd(0x37+d%16);} //大于等于10要显示abcdef ascall码要推迟7
- d=d/16;
- }
- lcdwrd_string("x0",2);
- }
- }
- if(flag!=0)
- {
- P1 = key_lie[i]; //扫描列[/i][i]
- i++;
- if(i >= 4)
- i = 0;
- k = 50;
- if(P1 != key_lie[i]) //如果有按键按下[/i][i]
- {
- delay(300); //消抖
- if(P1 != key_lie[i]) //按键真的按下[/i][i]
- {
- for(j = 0;j <= 16;j++) //扫描位
- {
- if(P1 == key_wei[j]) //扫描到
- k = j; //赋值给k显示函数
- }
- }
- while(P1==key_wei[k]);
- }
- if(k != 50)
- {
- if(flag == 1&&fuhao == 1){if(k < 2){biao = biao*2 + k;lcdwrd(0x30+dat2[k]);}} //转为10进制存起来 按每位的权取数
- else if(flag == 2&&fuhao == 1){if(k < 8){biao = biao*8 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 3&&fuhao == 1){if(k < 10){biao = biao*10 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 4&&fuhao == 1){if(k < 16){biao = biao*16 + k;lcdwrd(0x30+dat2[k]);}}
- }
- }
- }
- /*
- 进制计算
- void jinzhi()
- {
- if(P3 != 0xff)
- {
- delay(1000);
- if(P3 != 0xff)
- {
- switch(P3)
- {
- case 0xfe: num=1;break; //1111 1110 +
- case 0xfd: num=2;break; //1111 1101 -
- case 0xfb: num=3;break; //1111 1011 *
- case 0xf7: num=4;break; //1111 0111 =
- case 0xef: num=5;break; //1110 1111 2进制
- case 0xdf: num=6;break; //1101 1111 8进制
- case 0xbf: num=7;break; //1011 1111 10进制
- case 0x7f: num=8;break; //0111 1111 16进制
- }
- }
- while(P3 != 0xff);
- if (num == 5)
- {
- lcdwrd_string("0b",2); //2进制前显示0b
- flag = 1;// 1 2进制 2 8进制 3 10进制 4 16进制
- }
- else if(num == 6)
- {
- lcdwrd_string("0o",2);
- flag = 2;
- }
- else if(num == 7)
- {
- lcdwrd_string("SS",2);
- flag = 3;
- }
- else if(num == 8)
- {
- lcdwrd_string("0x",2);
- flag = 4;
- }
- // +-*
- if (num == 1)
- {
- lcdwrd(0x2b);
- fuhao = 1; //加
- }
- else if(num == 2)
- {
- lcdwrd(0x2d);
- fuhao = 2;
- }
- else if(num == 3)
- {
- lcdwrd(0x2a);
- fuhao = 3;
- }
- else if(num == 4)
- {
- zh = 1; //按下等号
- lcdwrc(0x04);
- lcdwrc(0xcf); //第二行最后一个
- lcdwrd(0x3d);
- }
- if(fuhao == 1 && zh == 1){biao = fhao_a + fhao_b;} //+
- else if(fuhao == 2 && zh == 1){biao = fhao_a - fhao_b;} //-
- else if(fuhao == 3 && zh == 1){biao = fhao_a * fhao_b;} //*
- if(flag == 1&&zh == 1) //二进制显示结果
- {
- while(biao!=0) //一位一位显示
- {
- lcdwrd(0x30+biao%2);
- biao=biao/2;
- }
- lcdwrd_string("b0",2);
- }
- else if(flag == 2&&zh == 1) //八进制显示结果
- {
-
- while(biao!=0) //一位一位显示
- {
- lcdwrd(0x30+biao%8); //十进制转8进制 初8取余 每次取余
- biao=biao/8; //每次除8
- }
- lcdwrd_string("o0",2);
- }
- else if(flag == 3&&zh == 1) //八进制显示结果
- {
-
- while(biao!=0) //一位一位显示
- {
- lcdwrd(0x30+biao%10); //十进制转8进制 初8取余 每次取余
- biao=biao/10; //每次除8
- }
- lcdwrd_string("SS",2);
- }
- else if(flag == 4&&zh == 1)
- {
- // while(biao!=0) //一位一位显示
- // {
- // lcdwrd(0x30+biao%10); //十进制转8进制 初8取余 每次取余
- // biao=biao/10; //每次除8
- // }
- while(biao!=0) //一位一位显示
- {
- d = biao%16;
- if(d < 10){lcdwrd(0x30+biao%16);} //如果小于10正常显示
- else {lcdwrd(0x37+biao%16);} //大于等于10要显示abcdef ascall码要推迟7
- biao=biao/16;
- }
- lcdwrd_string("x0",2);
- }
- }
- if(flag!=0)
- {
- P1 = key_lie[i]; //扫描列[/i][i]
- i++;
- if(i >= 4)
- i = 0;
- k = 50;
- if(P1 != key_lie[i]) //如果有按键按下[/i][i]
- {
- delay(300); //消抖
- if(P1 != key_lie[i]) //按键真的按下[/i][i]
- {
- for(j = 0;j <= 16;j++) //扫描位
- {
- if(P1 == key_wei[j]) //扫描到
- k = j; //赋值给k显示函数
- }
- }
- while(P1==key_wei[k]);
- }
- if(k != 50)
- {
- if(flag == 1&&fuhao == 0){if(k < 2){fhao_a = fhao_a*2 + k;lcdwrd(0x30+dat2[k]);}} //转为10进制存起来 按每位的权取数
- else if(flag == 2&&fuhao == 0){if(k < 8){fhao_a = fhao_a*8 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 3&&fuhao == 0){if(k < 10){fhao_a = fhao_a*10 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 4&&fuhao == 0){if(k < 16){fhao_a = fhao_a*16 + k;lcdwrd(0x30+dat2[k]);}}
- if(flag == 1&&fuhao != 0){if(k < 2){fhao_b = fhao_b*2 + k;lcdwrd(0x30+dat2[k]);}} //转为10进制存起来 按每位的权取数
- else if(flag == 2&&fuhao != 0){if(k < 8){fhao_b = fhao_b*8 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 3&&fuhao != 0){if(k < 10){fhao_b = fhao_b*10 + k;lcdwrd(0x30+dat2[k]);}}
- else if(flag == 4&&fuhao != 0){if(k < 16){fhao_b = fhao_b*16 + k;lcdwrd(0x30+dat2[k]);}}
- }
- }
- }*/
- void main()
- {
- LcdInit(); //初始化lcd
- num_zero(); //数据清零
- lcdwrd_string("1.calculate",11); //初始显示
- lcdwrc(0xc0);
- lcdwrd_string("2.change3.jinzhi",16);
- while(1)
- {
-
- if(P3 == 0xfe | P3 == 0xfd | P3 == 0xfb)
- {
- delay(1000);
- if(P3 == 0xfe | P3 == 0xfd | P3 == 0xfb)
- {
- switch(P3)
- {
- case 0xfe: num_d=1;break; //1111 1110
- case 0xfd: num_d=2;break; //1111 1101
- case 0xfb: num_d=3;break; //1111 1011
- }
- }
- while(P3 == 0xfe | P3 == 0xfd | P3 == 0xfb);
- lcdwrc(0x01);
- num_zero();
- }
- if (num_d == 1)
- {
- keyscan(); //按1 计算
- }
- else if(num_d == 2)
- {
- change(); //按2 进制转换
- }
- /* else if(num_d == 3)
- {
-
- while(1){jinzhi();} //按3 进制计算
- } */
- }
- }
- lcd.c模块
- #include"lcd.h"
- /*******************************************************************************
- * 函 数 名 : Lcd1602_Delay1ms
- * 函数功能 : 延时函数,延时1ms
- * 输 入 : c
- * 输 出 : 无
- * 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
- *******************************************************************************/
- void Lcd1602_Delay1ms(uint c) //误差 0us
- {
- uchar a,b;
- for (; c>0; c--)
- {
- for (b=199;b>0;b--)
- {
- for(a=1;a>0;a--);
- }
- }
-
- }
- /*******************************************************************************
- * 函 数 名 : LcdWriteCom
- * 函数功能 : 向LCD写入一个字节的命令
- * 输 入 : com
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
- void LcdWriteCom(uchar com) //写入命令
- {
- LCD1602_E = 0; //使能
- LCD1602_RS = 0; //选择发送命令
- LCD1602_RW = 0; //选择写入
-
- LCD1602_DATAPINS = com; //放入命令
- Lcd1602_Delay1ms(1); //等待数据稳定
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5); //保持时间
- LCD1602_E = 0;
- }
- #else
- void LcdWriteCom(uchar com) //写入命令
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 0; //选择写入命令
- LCD1602_RW = 0; //选择写入
- LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
- Lcd1602_Delay1ms(1);
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- // Lcd1602_Delay1ms(1);
- LCD1602_DATAPINS = com << 4; //发送低四位
- Lcd1602_Delay1ms(1);
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 数 名 : LcdWriteData
- * 函数功能 : 向LCD写入一个字节的数据
- * 输 入 : dat
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdWriteData(uchar dat) //写入数据
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //选择输入数据
- LCD1602_RW = 0; //选择写入
- LCD1602_DATAPINS = dat; //写入数据
- Lcd1602_Delay1ms(1);
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5); //保持时间
- LCD1602_E = 0;
- }
- #else
- void LcdWriteData(uchar dat) //写入数据
- {
- LCD1602_E = 0; //使能清零
- LCD1602_RS = 1; //选择写入数据
- LCD1602_RW = 0; //选择写入
- LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
- Lcd1602_Delay1ms(1);
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- LCD1602_DATAPINS = dat << 4; //写入低四位
- Lcd1602_Delay1ms(1);
- LCD1602_E = 1; //写入时序
- Lcd1602_Delay1ms(5);
- LCD1602_E = 0;
- }
- #endif
- /*******************************************************************************
- * 函 数 名 : LcdInit()
- * 函数功能 : 初始化LCD屏
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- #ifndef LCD1602_4PINS
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x38); //开显示
- LcdWriteCom(0x0c); //开显示不显示光标
- LcdWriteCom(0x06); //写一个指针加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //设置数据指针起点
- }
- #else
- void LcdInit() //LCD初始化子程序
- {
- LcdWriteCom(0x32); //将8位总线转为4位总线
- LcdWriteCom(0x28); //在四位线下的初始化
- LcdWriteCom(0x0c); //开显示不显示光标
- LcdWriteCom(0x06); //写一个指针加1
- LcdWriteCom(0x01); //清屏
- LcdWriteCom(0x80); //设置数据指针起点
- }
- #endif
- lcd.h头文件
- #ifndef __LCD_H_
- #define __LCD_H_
- /**********************************
- 当使用的是4位数据传输的时候定义,
- 使用8位取消这个定义
- **********************************/
- //#define LCD1602_4PINS
- /**********************************
- 包含头文件
- **********************************/
- #include<reg51.h>
- //---重定义关键词---//
- #ifndef uchar
- #define uchar unsigned char
- #endif
- #ifndef uint
- #define uint unsigned int
- #endif
- /**********************************
- PIN口定义
- **********************************/
- #define LCD1602_DATAPINS P0
- sbit LCD1602_E=P2^7;
- sbit LCD1602_RW=P2^5;
- sbit LCD1602_RS=P2^6;
- /**********************************
- 函数声明
- **********************************/
- /*在51单片机12MHZ时钟下的延时函数*/
- void Lcd1602_Delay1ms(uint c); //误差 0us
- /*LCD1602写入8位命令子函数*/
- void LcdWriteCom(uchar com);
- /*LCD1602写入8位数据子函数*/
- void LcdWriteData(uchar dat) ;
- /*LCD1602初始化子程序*/
- void LcdInit();
- #endif
复制代码
|