2、程序移植#definelone_key_portPORTB//独立键盘接口用于输入小数点#definelone_key_ddrDDRB#definelone_key_pin(PINB&BIT(0))//读取独立键盘接口的电平#definers_0PORTA&=~BIT(0)//RS复位#definers_1PORTA
3、=BIT(0)//RS置位#defineen_0PORTA&=~BIT(1)//使能端复位#defineen_1PORTA
4、=BIT(1)//使能端置位constuchartable1[]="Youarewelcome!";//初始显示字符constuchar
5、table2[]="ERROR!";//出错提示字符uchara[7]={0,0,0,0,0,0,0},b[11]={0,0,0,0,0,0,0},a1[5]={0,0,0,0,0},b1[5]={0,0,0,0,0};//用来存储输入的两个数字,位数不可超过10位ucharaa,bb,cc,dd;//用来记数输入的位数ucharsym;//用来保存符号ucharflag;//起动标志ucharfuhao;//符号标志uchardeflag1;//小数点标志uchardeflag2;//小数点标志ucharoverflag;//数值溢出标志ucharallowflag=1;
6、//符号允许标志,用于禁止连续两个符号的输出ucharnegative;//负数标志,当是负数要作相应的处理longtemp3,temp4;//计算的数值得数用其中一个变量存储即可,不用再浪费内存开辟其他变量floattemp1,temp2;constunsignedcharkey_table[16]={7,8,9,10,4,5,6,11,1,2,3,12,50,0,21,13};//键盘编码可根据具体情况而设定voidport_init();//端口初始化voiddevice_init();//夜晶初始化voidtime_init();//定时器初始化voidwright
7、_com(ucharcom);//夜晶写指令函数voidwright_data(uchardate);//夜晶写数据函数voidlcd_handle(uchartemp);//夜晶显示处理,该显示什么,不该显示什么ucharkeyscan();//键盘扫描voidjudgechar(uchart);//判断字符为符号还是数字voiddecimal(ucharde);//判断是不是小数点,只能出现两个小数点,且不能连续出现voidreset();//复位函数voidcalculate(void);//对数值进行计算voidresult(longvalue);//显示结果voi
8、dflow_clew();//溢出提示函数intmain(){port_init();device_init();time_init();//初始化while(1){flow_clew();//溢出提示函数,一旦扫描到出错就会显示错误}}/***********中断服务程序***********/volatileunsignedinti;//中断服务程序中要使用全局变量,且要加volatileSIGNAL(SIG_OVERFLOW0){TCNT0=205;//重装初值i=keyscan();//返回键盘扫描值if(i!=No_key)//确认有按键按下{if(i==50){
9、wright_com(0x01);//清显示_delay_ms(10);//延时等待清屏指令完成wright_com(0x80);wright_data('0');//重新显示0reset();//初始化flag=1;//标志起动}if(i<50&&flag)//条件为已经启动而且输入的是有效字符{judgechar(i);//判断是不是操作符,要是则要作相应的处理decimal(i);//判断是不是小数点输入,要是则要作相应的处理lcd_handle(i);//对输入的数据进行合理存储并加以显示}if(i==21