計算器lcd顯示課程設計
A. 基於LCD1602液晶顯示器課程設計 能顯示字母與數字
Q我
B. 請問如何利用51單片機在LCD1602液晶屏上實現一個簡單的計算器功能
#include <AT89X52.H>
#include <intrins.h>
#include "lcd_drive.h"
#define uchar unsigned char
#define uint unsigned int
void main()
{
uint key();
void deplay(uchar j_p);
void deplay_s(long a);
uchar i=1;
uchar jp=-1;
uchar flat;
uint a,b;
delay_ms(10);
lcd_init();
lcd_clr();
lcd_wcmd(0x80);
while(1)
{
(jp==-1)
jp=key();
deplay(jp);
switch (jp)
{
case '=': switch(flat)
{
case '+': a+=b; deplay_s(a); break;
case '-': a=b-a; deplay_s(a); break;
case '*': a*=b; deplay_s(a); break;
case '/': a=b/a; deplay_s(a); break;
default:break;
}
break;
case '+':flat='+';b=a;i=0;break;
case '-':flat='-';b=a;i=0;break;
case '*':flat='*';b=a;i=0;break;
case '/':flat='/';b=a;i=0;break;
case 'c':a=0;b=0;lcd_clr();break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:a=a*10*i+jp;i=1;break;
}
jp=-1;
}
}
//-------矩陣鍵盤掃描-------
uint key()
{
uchar h = 0,l = 0;//矩陣行h,列l
uchar j_p;
P3 = 0x0f;
if(P3 != 0x0f)
{
delay_ms( 2 );
if(P3!=0x0f)
{
l = P3 & 0x0f ;
P3 = 0xf0;
h = P3 & 0xf0;
}
}
switch(l | h)
{
case 0x7e:j_p=0;break; //按鍵0
case 0x7d:j_p=1;break; //按鍵1
case 0x7b:j_p=2;break; //按鍵2
case 0x77:j_p=3;break; //按鍵3
case 0xbe:j_p=4;break; //按鍵4
case 0xbd:j_p=5;break; //按鍵5
case 0xbb:j_p=6;break; //按鍵6
case 0xb7:j_p=7;break; //按鍵7
case 0xde:j_p=8;break; //按鍵8
case 0xdd:j_p=9;break; //按鍵9
case 0xdb:j_p='+';break; //按鍵a
case 0xd7:j_p='-';break; //按鍵b
case 0xee:j_p='=';break; //按鍵Enter
case 0xed:j_p='*';break; //按鍵c
case 0xeb:j_p='/';break; //按鍵e
case 0xe7:j_p='c';break; //按鍵取消
default:return -1;break;
}
P3=0x0f;
while(P3!=0x0f);
return j_p;
}
void deplay(uchar j_p)
{
if(j_p != -1)
{
if(j_p >= 0 && j_p <= 9)
j_p+=48;
lcd_wdat(j_p);
}
}
void deplay_s(long a)
{
int n[10];
uint i=0;
while(a)
{
n[i]=a%10;
a/=10;
i++;
}
while(i)
deplay(n[--i]);
}
C. 怎麼用51單片機做液晶顯示屏計算器,進行兩位簡單的計算
^#defineLCD1602_FLAG
#defineLCD1602_PORTP0
#include<reg51.h>
#include<stddef.h>
#defineucharunsignedchar
sbitlcd1602_rs=P2^0;
sbitlcd1602_e=P2^2;
sbitlcd1602_rw=P2^1;
sbitlcd1602_busy=P0^7;
ucharstr[]="SimpleCalculator";
ucharkeyval,keystr[16];
voiddelay(uchara)
{
uchari;
while(a--)for(i=0;i<120;i++);
}
/*
************************************
*函數名稱:lcd1602_CheckBusy()
*函數功能:狀態查詢
************************************
*/
voidlcd1602_CheckBusy()
{
do
{
lcd1602_busy=1;
lcd1602_rs=0;
lcd1602_rw=1;
lcd1602_e=0;
lcd1602_e=1;
}
while(lcd1602_busy);
}
/*
***************************************
*函數名稱:lcd1602_WriteCmd()
*函數功能:寫命令
*入口參數:命令字
*出口參數:無
***************************************
*/
voidlcd1602_WriteCmd(constucharcmd)
{
lcd1602_CheckBusy();
lcd1602_rs=0;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=cmd;
lcd1602_e=0;
}
/*
*******************************************
*函數名稱:lcd1602_WriteData()
*函數功能:寫數據
*入口參數:c--待寫數據
*出口參數:無
*********************************************
*/
voidlcd1602_WriteData(constucharc)
{
lcd1602_CheckBusy();
lcd1602_rs=1;
lcd1602_rw=0;
lcd1602_e=1;
LCD1602_PORT=c;
lcd1602_e=0;
}
/*
***********************************************
*函數名稱:lcd1602_Init()
*函數功能:初始化LCD
*入口參數:無
*出口參數:無
***********************************************
*/
voidlcd1602_Init()
{
lcd1602_WriteCmd(0x38); //顯示模式為8位2行5*7點陣
lcd1602_WriteCmd(0x0c);//displayenable,flagenable,flashenable,
lcd1602_WriteCmd(0x06);//flagmovetoright,screendon'tmove
lcd1602_WriteCmd(0x01);//clearscreen
}
/*
************************************************
*函數名稱:lcd1602_Display()
*函數功能:字元顯示
*入口參數:ptr--字元或字元串指針
*出口參數:無
*說明:用戶可通過以下方式來調用:
*1)lcd1602_Display("Hello,world!");
*2)INT8U存儲類型txt[]="要顯示的字元串";
*或者INT8U存儲類型txt[]={'t','x','t',..,'