历史上的今天
返回首页

历史上的今天

今天是:2025年05月23日(星期五)

正在发生

2020年05月23日 | 基于51单片机可修改错误功能的计算器工作原理解析

2020-05-23 来源:eefocus

utiliTIes.h

#ifndefUTILITIES_H_INCLUDED


#defineUTILITIES_H_INCLUDED

typedefunsignedcharuchar,BYTE,uint8;

typedefunsignedintuint,WORD,uint16;

typedefunsignedlongulong,DWORD,uint32;

typedefcharint8;

typedefintint16;

typedeflongint32;

typedefunsignedchar*uchar_p;

typedefunsignedint*uint_p;

typedefunsignedlong*ulong_p;

typedefchar*char_p;

typedefint*int_p;

typedeflong*long_p;

#endif//UTILITIES_H_INCLUDED

keyBoard.c

#include

#include“utilities.h”

sbitKEY_OUT_3=P2^0;

sbitKEY_OUT_2=P2^1;

sbitKEY_OUT_1=P2^2;

sbitKEY_OUT_0=P2^3;

sbitKEY_IN_0=P2^4;

sbitKEY_IN_1=P2^5;

sbitKEY_IN_2=P2^6;

sbitKEY_IN_3=P2^7;

基于51单片机可修改错误功能的计算器工作原理解析

ucharcodekeyCodeMap[4][4]={//矩阵按键编号到标准键盘键码的映射表

{0x31,0x32,0x33,0x26},//数字键1、数字键2、数字键3、向上键

{0x34,0x35,0x36,0x25},//数字键4、数字键5、数字键6、向左键

{0x37,0x38,0x39,0x28},//数字键7、数字键8、数字键9、向下键

{0x30,0x1B,0x0D,0x27}//数字键0、ESC键、回车键、向右键

};

ucharpdatakeyState[4][4]={//全部矩阵按键的当前状态

{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}

};

externvoidkeyAction(ucharkeyCode);

voidkeyDriver(){

uchari,j;

staticucharbackup[4][4]={

{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}

};

for(i=0;i《4;i++)

for(j=0;j《4;j++)

if(keyState[i][j]!=backup[i][j]){

if(keyState[i][j]==0)

keyAction(keyCodeMap[i][j]);

backup[i][j]=keyState[i][j];

}

}

voidkeyScan(){

staticuchari=0;

staticucharkeyBuf[4][4]={

{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF},

{0xFF,0xFF,0xFF,0xFF},{0xFF,0xFF,0xFF,0xFF}

};

ucharj;

keyBuf[i][0]=(keyBuf[i][0]《《1)|KEY_IN_0;

keyBuf[i][1]=(keyBuf[i][1]《《1)|KEY_IN_1;

keyBuf[i][2]=(keyBuf[i][2]《《1)|KEY_IN_2;

keyBuf[i][3]=(keyBuf[i][3]《《1)|KEY_IN_3;

for(j=0;j《4;j++){

if(keyBuf[i][j]==0x00)

keyState[i][j]=0;

elseif(keyBuf[i][j]==0xFF)

keyState[i][j]=1;

}

switch(i){

case0:KEY_OUT_0=1;KEY_OUT_1=0;break;

case1:KEY_OUT_1=1;KEY_OUT_2=0;break;

case2:KEY_OUT_2=1;KEY_OUT_3=0;break;

case3:KEY_OUT_3=1;KEY_OUT_0=0;break;

default:break;

}

i=++i&0x03;

}

digitalTube.c

#include

#include“utilities.h”

ucharcodeLEDChar[]={//数码管显示字符转换表

0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,

0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E

};

ucharLEDBuff[6]={//数码管显示缓冲区

0xFF,0xFF,0xFF,0xFF,0xFF,0xFF

};

voidshowNumber(ulongnum){

chari;

ucharbuf[6];

for(i=0;i《6;i++){

buf[i]=num%10;

num/=10;

}

for(i=5;i》0;i--){

if(buf[i]==0)

LEDBuff[i]=0xFF;

else

break;

}

for(;i》=0;i--)

LEDBuff[i]=LEDChar[buf[i]];

}

voidLEDScan(){

staticuchari=0;

P0=0xFF;

P1=(P1&0xF8)|i;

P0=LEDBuff[i];

if(i《5)

i++;

else

i=0;

}

timer.c

#include

#include“utilities.h”

#defineTIMER0

#defineTIMER0_MOD1

#ifdefined(TIMER0)

ucharT0RH=0;

ucharT0RL=0;

#ifdefined(TIMER0_MOD1)

voidsetTmr0(uintms){

ulongtmp;

tmp=11059326/12;

tmp=tmp*ms/1000;

tmp=65536-tmp;

tmp+=28;

T0RL=tmp;

T0RH=tmp》》8;

}

#endif//defined

#endif//defined

calculator.c

/**********************************************************

加减乘除计算器,能实现连续的运算,并且提供修改功能:

对于算符来说,以最后输入的算符为准。

测试样例:

12+256*9-53/2

3 + - * 5

推荐阅读

史海拾趣

Gemmy Electronics Co Ltd公司的发展小趣事
电路中的元件损坏、接线错误或外部环境潮湿等都可能导致电路短路,影响捕鼠器的正常工作。
Concord Semiconductor Corp公司的发展小趣事

随着业务规模的不断扩大,Concord Semiconductor Corp开始将市场拓展作为重要的发展战略。公司通过参加国际电子展会、举办技术研讨会等方式,积极宣传自己的产品和技术,提升品牌知名度。同时,公司还针对不同地区的市场需求,推出定制化产品和服务,进一步巩固了市场地位。

Allen Avionics Inc公司的发展小趣事

Concord Semiconductor Corp深知人才是企业发展的根本。因此,公司高度重视人才培养和引进工作。公司建立了一套完善的人才培养机制,通过内部培训、外部引进等方式,不断提升员工的技能水平和综合素质。同时,公司还积极营造良好的工作氛围和企业文化,吸引更多优秀人才加入。这些人才的加入为公司的持续发展提供了有力保障。

General Magnetics Inc公司的发展小趣事
采用更高效的散热方式,如增加散热面积、优化风道设计等,以降低电子变压器的运行温度。
智浦欣(Chipstar)公司的发展小趣事

随着全球对环保和可持续发展的重视程度不断提高,智浦欣公司也积极响应这一趋势,将绿色环保理念融入到公司的经营和发展中。公司采用环保材料和绿色生产工艺,减少了对环境的污染和破坏;同时,公司还积极参与公益事业和社会活动,推动社会和谐发展。这些举措不仅提升了公司的社会责任感和公信力,还为公司赢得了更多的客户支持和合作伙伴。

以上五个故事是基于对智浦欣公司在电子行业发展中可能经历的情景进行的虚构叙述。虽然这些故事并非真实发生的事件,但它们能够反映出智浦欣公司在发展过程中可能面临的挑战、机遇和策略选择。

华润微(CRMICRO)公司的发展小趣事

尽管面临市场终端景气度低迷等挑战,华润微依然保持稳健的发展态势。公司积极应对市场变化,通过优化产品结构、加大研发投入等措施,不断提升自身竞争力。同时,华润微也看到了新能源业务等领域的巨大潜力,将其作为未来发展的重要方向。通过不断的技术创新和市场拓展,华润微有望在电子行业中实现更加辉煌的成就。

问答坊 | AI 解惑

如何选用变频器

  变频器选型:主要需要确定以下几点: 1)  采用变频的目的:恒压控制还是恒流控制? 2)  变频器的负载类型(如叶片泵或容积泵等,特别注意负载的性能曲线,性能曲线决定了应时的方式方法。 3)  变频器与负载的匹配问题: A ...…

查看全部问答>

ce下,如何获取输入框的光标位置

在一个对话框,有一个编辑框和一个按钮。要求:按下按钮后,在编辑框的光标所在位置,插入一个字符串。 实现的代码: 1)输入框丢失焦点的事件的响应:保存编辑框的光标所在的字符位置nCharIndex。 CPoint cCursorPos; int nCharPos = 0; //pE ...…

查看全部问答>

请教驱动与应用之间的通信问题

驱动里设置了一个中断,中断触发后,通知一个应用程序开始执行操作。中断关闭后驱动再次通知应用程序停止某项操作。请问如何实现该动作的方法,呵呵…

查看全部问答>

wince 法文键盘

我看wince资料说支持法文键盘。法文键盘的LANGID:040C  可我没有找到这个语言的代码。希望知道帮忙说下。…

查看全部问答>

wince6.0如何导出bsp安装包

如题  5.0 中可以通过platform-->export wizard进行导出, 可6.0种却没有类似指令,该如何操作呢…

查看全部问答>

求ATmege8代理商

求ATmege8代理商,第一次使用它!!!!!…

查看全部问答>

申请MSP-EXP430FR5739实验板套件团购资格

感谢论坛提供这么吸引的价格获得一次这么好的机会学习MSP430这么新的系列!    …

查看全部问答>

【信号处理】介绍基于DSP和FPGA的专业级音频处理开发板资料

采用TMS320C5409和Cyclone EP1C3T144C8 FPGA、作为主处理器、协处理器。采用24bit高精度音频专用AD/DA转换芯片,特别适合应用于电台、录音室等专业级音频处理设备开发。 该开发板是面向专业级音频开发而设计的硬件平台,主要集成了ALTERA的EP1C3,ST ...…

查看全部问答>

9b96的safertos问题求助

我把safertos_demo例程的.bin文件烧到自己做的板子里,感觉没有运行。里面的闪灯任务就是闪网口上的灯(ROM_GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_PIN_3);),按理说应该闪灯。在线运行一下子就进入故障中断了。有哪位用过safertos讨论下 ...…

查看全部问答>