51单片机矩阵键盘计算器
51单片机矩阵键盘计算器
/**********413暑假作品*********12864液晶显示屏,结合4*4矩阵键盘,简易计算器*,存储地址:STC-hex2 , LCD12864.c *************************************/
/***功能:1、基本整数的加减乘除; 2、有清除功能;3、除法计算,结果保留两位小数;4、分母为0报错********/
/*********5、小数减大数可显示负号;6、只能做两个数的加减乘除;7、可做10位数的有效运算***********************************/
/******注意:计算结果要求余显示,比如正确结果123,求余显示321,所以将321逐个赋给某一数组,倒序向12864输出**/
#include
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit rs=P3^7;
sbit rw=P3^6;
sbit e=P3^5;
sbit psb=P3^4; //串并选择,H=串 L=并,此程序让12864并行输出
bit flag1=0; //数字标记位
bit flag11=0; // +标记位
bit flag12=0; // —标记位
bit flag13=0; // *标记位
bit flag14=0; // /标记位
bit flag15=0; // =标记位
bit flag16=0; //清除位
bit flag2=0; // 负号标记
bit flag3=0; // 分子小于分母,结果只有两位有效数字时,扩大100倍有两位有效数字
bit flag4=0; //分子小于分母,结果只有一位效数字时,扩大100倍有1位有效数字
void init(); //初始化16824子函数
void write_com(uchar); //写命令
void write_dat(uchar); //写数据,即显示内容
void display1(uchar); //显示字符
void delete(); //清除显示
void delay(uint); //延时
void keyscan(); //键盘扫描
void scan(); //扫描运算符,设定两个数计算
void display_value(); // 计算结果显示
void value(); // 计算
void begin(); //开机屏幕显示
void math_error(); //数学错误显示
uchar code table1[]="0123456789.+-*/=";
uchar code table3[]="welcome to";
uchar code table4[]=" 51 calculator" ;
uchar code table5[]="math error";
long table2[19]; //存储结果的数组,20就出错?
long s,a,b,num1; //s为计算结果,a为第一个数,b为第二个数,num1对应为键对应的值为显12864显示服务
/***********************************主**函**数***********************************************************/
void main()
{
init();
delay(5);
begin(); //开机初始化
delay(5);
write_com(0x80);//输入数在第一行显示
while(1) //大循环使其不断的显示
{
keyscan();
scan();
value();
display_value();
delete();
}
}
/***********初始化********************************/
void init()
{
psb=1; //并口传输方式
delay(50); //先等待50个毫秒
write_com(0x30); //基本操作指令
delay(5);
write_com(0x0e); //显示状态开/关,08什么也没有;0c无光标;0