簡易計算器,行掃描式,LCD顯示(非完美版)。16按鍵
0.jpg (119.63 KB, 下載次數: 70)
下載附件
2018-5-5 16:55 上傳
單片機計算器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
162402icyllgagsmznlcma.png (45.59 KB, 下載次數: 72)
下載附件
2018-5-5 16:54 上傳
單片機源程序如下:
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
- sbit Lcd_RS = P2^5;
- sbit Lcd_RW = P2^6;
- sbit Lcd_en = P2^7;
- uchar code table[] = "51201314";
- uchar code table1[] = "20140815";
- uchar code key16[]=
- {0xee,0xed,0xeb,0xe7,
- 0xde,0xdd,0xdb,0xd7,
- 0xbe,0xbd,0xbb,0xb7,
- 0x7e,0x7d,0x7b,0x77}
- uchar key_number;
- void delayMS(uint x)
- {
- uchar i;
- while(x--) for(i = 0; i < 120; i++);
-
- }
-
- bit Busy_Check()
- {
- bit state;
- Lcd_RS = 0;
- Lcd_RW = 1;
- Lcd_EN = 1;
- delayMS(1);
-
- state=(bit)(P0&0x80);
- Lcd_EN = 0;
- delayMS(1);
- return state;
- }
- void LCD_Wdata(uchar dat)
- {
- while(Busy_Check());
- Lcd_RS = 1;
- Lcd_RW = 0;
- Lcd_EN = 0;
- P0 = dat;
- Lcd_EN = 1;
- delayMS(1);
- Lcd_EN = 0;
- }
- void LCD_Wcmd(uchar cmd)
- {
- while(Busy_Check());
- Lcd_RS = 0;
- Lcd_RW = 0;
- P0 = cmd;
- delayMS(1);
- Lcd_EN = 0;
- Lcd_EN = 1;
- delayMS(1);
- Lcd_EN = 0;
- }
- void Init_Lcd()
- {
- LCD_Wcmd(0x38);
- delayMS(1);
- LCD_Wcmd(0x0f);
- delayMS(1);
-
- LCD_Wcmd(0x06);
- delayMS(1);
- LCD_Wcmd(0x01);
- delayMS(1);
- }
- bit pushkey()
- {
- P1=0xf0;
- if(P1!=0xf0)
- return (1);
- else
- return (0);
- }
- void key_scan()
- {
- uchar keycode,p;
- delayMS(15);
- if(P1!=0xf0)
- {P1?=?0xf7;
- while(1)
- {
- keycode = P1;
- if((keycode&0xf0)!=0xf0)?break;
- P1=_cror_(P1,1);
- }
- while((pushkey()));
- for (p?=?0 p<16?P++)
- if ( keycode== key16[p])
- key_number=p;
- }
- }
- void LCD_address(uchar hang,uchar lie )
- {
- if (hang%2==1) LCD_Wcmd(0x80+(lie%16)-1);
- else LCD_Wcmd(0x80+0x40+(lie%16)-1);
- }
- void LCD_display()
- { uchar j;
- LCD_address(1,1);
- while(table1[j]!='')
- {
- LCD_Wdata(table[j]);
- j++;
- }
-
- }
- void main()
- { uchar n=0;
- Init_Lcd();//初始化LCD
- LCD_display();
- while(1)
- {
- if(pushkey())//判斷是否有鍵按下
- {
- key_scan();
- switch(key_number)
- {
- case 10: LCD_Wcmd(0x10);break;
- case 11: LCD_Wcmd(0x14);break;
- case 12: n++;
- if((n%2)==1)
- {
- LCD_Wcmd(0x80+0x40);break;
- }
- else LCD_Wcmd(0x80);break;
- ase 13: LCD_Wcmd(0x10);
- LCD_Wdata(0x00);LCD_Wcmd(0x10);break;
- case 15: LCD_Wcmd(0x01);break;
- default: LCD_Wdata(key_number+0x30);break;
- }
- }
- }
- }
復制代碼
0.jpg (28.98 KB, 下載次數: 71)
下載附件
2018-5-5 16:53 上傳
所有資料51hei提供下載:
4乘4計算器LCD.rar
(49.01 KB, 下載次數: 26)
2018-5-5 16:18 上傳
點擊文件名下載附件
LCD掃描式 下載積分: 黑幣 -5
|