1.png (71.09 KB, 下載次數: 20)
下載附件
2022-11-10 05:33 上傳
- 主程序:
- #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
復制代碼
|