1、 录入5.硬件设计(1)电路原理图:(2)元件清单:元件名称型号数量用途单片机1控制核心电阻10k4按键电路数码管8位共阳极显示电路按键166.软件设计(1)算法流程图:开始主函数结束调用运算程序录入数值判断符号中断结束定时器赋初值送显示数据关中断中断开始显示函数 按键函数运算查值赋值给变量列扫描行扫描(2)程序清单:#include/*按键程序*/char keyscan();/*显示程序*/ void display();char dsp9=0,0,12,12,12,12,12,12,12; /初始化显示数组/*计算程序*/ void calculate(char k,char c18,c
2、har c28);/*片选*/unsigned char code Select=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;/*码选*/ unsigned char code LED_CODES=0xC0,0xF9,0xA4,0xB0,0x99, /0-40x92,0x82,0xF8,0x80,0x90, /5-90x86,0xAF,0xFF,0x7F,0xBF,; /E,r,空格,.,-/*main函数*/void main(void)char i,j,k,c;char a8,b8;/*定时1ms*/TMOD=0;/TL0=-(1000/256);/TH
3、0=-(1000%256);EA = 1; /总中断开关ET0 = 1; /开中断TR0 = 1; /启用计数器0LR:dofor(i=1;i9;i+) /数字录入循环dsp0=keyscan();if(c=2&dsp010) /此段代码验证是否有旧的计算结果在显示,且不再参与新计算dsp1=dsp0;for(j=2;j9) /旧的计算结果将参与新的计算,作为第一个数if(dsp0=0&dsp1=0&dsp2=12) /个位为0且十位为空时按下0,按键无效,跳回LR等待正确输入/*goto跳转标志*/ goto LR;else if(dsp09) break; /有操作符按下,跳出数字录入循环
4、 elsefor(j=i;j0;j-)dspj=dspj-1; /移位,以正确显示数字 if(i=9) /判断是否输入8个有效数字,是则等待操作符,否则直接判断操作符do /使用do while无论是否第一个数都取一次操作符dsp0=keyscan(); /获取操作符号if(dsp0=14|dsp010) /按下C或者第9位数字清零dsp1=0;for(i=2;i+)dspi=12;c=0;while(dsp0=15)&(c=0); /等号被按下,等待新的操作符(仅对第一个数字有效)else if(dsp0=14) /按下C清零dsp1=0;for(i=2;dspi=12;c=0;while(
5、dsp0=15&c=0) /未输满8位且是第一个数字即按下等号,等待非等号操作符if(dsp0=14|dsp010) /按下C或者数字都进行清零,重新输入adsp0=14; /将dsp0置为14,防止因数字清零未能拦截dsp1=0;for(i=2;dspi=12;while(dsp0=14); /数字输入未完成即按下C,重新等待输入doif(c=0) /没有数字输入 k=dsp0; /存计算符(循环内已排除C、数字)for(i=0;8;i+) /将第一个数存入a8ai=dspi+1; /清零c=1; /已输入a/*goto跳转标志*/goto LR;else if(c=1)i+) /将第二个数存入b8bi=dspi+1;c=2; /已输入bif(dsp0!=15) /b输完后操作符不是等号calculate(k,a,b);for(i=0;i+) /将计算结果存入a8,a值更新ai=dspi+1;k=dsp0; /更新计算符c=1;while(dsp0=15)&(c=0;i-) /从高位到低位扫描显示P2=0;P1=LED_CODESdsp8-i;P2=Selecti;for(h=0;hh+);TL0=-(1000/256);TH0=-(1000%256);ET0=1;voi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1