历史上的今天
返回首页

历史上的今天

今天是:2024年10月17日(星期四)

正在发生

2019年10月17日 | AVR单片机简单计算器的Proteus仿真实现+源码

2019-10-17 来源:51hei

0.png?imageView2/2/w/550

单片机源程序如下:

#include "mega16.h"

#include "1602.h"

#include "key.h"



float k1,k2;              //记录最终输入运算的两个数


uint one,two,three,four;   //记录每次输入的数字


uint flag;                //计数标志位


uint flag1,flag2;   //第一个数   第二个数 完成标志位


uint flag3;//记录加减乘除标志位


long Result;     //最后运算的结果



void main()

{

     init();  //液晶初始化

    // write_com(0x80+15);

    // write_date('0');

     Init_Keypad();   //键盘初始化

     flag1 = 1;

     while(1)

    {

        Key_Event();  //扫描键盘

    

        if(key_Flag == 1)

        {

            key_Flag = 0;

            if(key_val <= 10)   //小于10  则为需要的数字

            {

            

              if(flag1)       //flag1为1  表示正在输入第一个数字

              {

                switch(flag)

                {

                    case 0:

                     flag = 1;

                     one = key_val%10;

                     write_com(0x80+6);

                     write_date(tab[key_val]);

                     k1 = (float)one;

                     break;

                    case 1:

                       flag = 2;

                       two = key_val%10;

                       write_com(0x80+7);

                       write_date(tab[key_val]);

                       k1 = (float)(one*10 + two);

                     break;

                 case 2:

                      flag = 3;

                         three = key_val%10;

                       write_com(0x80+8);

                       write_date(tab[key_val]);

                      k1 = (float)(one*100 + two * 10 + three);

                      break;

                 case 3:

                     flag = 4;

                        four = key_val%10;

                     write_com(0x80+9);

                     write_date(tab[key_val]);

                        k1 = (float)(one*1000 + two * 100 + three*10 + four);

                     break;

                   case 4:

                      flag = 0;

                      break;   

                 }

                }

                

                

                

                

                

                if(flag2)        //flag2为1  表示正在输入第2个数字

              {

                switch(flag)

                {

                    case 0:

                     flag = 1;

                     one = key_val%10;

                     write_com(0x80+12);

                     write_date(tab[key_val]);

                     k2 = (float)one;

                     break;

                    case 1:

                       flag = 2;

                       two = key_val%10;

                       write_com(0x80+13);

                       write_date(tab[key_val]);

                       k2 = (float)(one*10 + two);

                     break;

                 case 2:

                      flag = 3;

                         three = key_val%10;

                       write_com(0x80+14);

                       write_date(tab[key_val]);

                      k2 = (float)(one*100 + two * 10 + three);

                      break;

                 case 3:

                     flag = 4;

                        four = key_val%10;

                     write_com(0x80+15);

                     write_date(tab[key_val]);

                        k2 = (float)(one*1000 + two * 100 + three*10 + four);

                     break;

                   case 4:

                      flag = 0;

                      break;   

                 }

                }

                

                

            }

            

            

            

            else if(key_val>=13 || key_val <= 16)  //判断运算符

            {

                flag1 = 0;

                flag2 = 1;

                flag = 0;

                switch(key_val)

                {

                    case 13:

                      write_com(0x80+11);

                      write_date('+');

                      flag3 = 1;

                      break; 

                    case 14:

                      write_com(0x80+11);

                      write_date('-');

                      flag3 = 2;

                      break; 

                    case 15:

                      write_com(0x80+11);

                      write_date('*');

                      flag3 = 3;

推荐阅读

史海拾趣

BLT Circuit Services公司的发展小趣事

随着环保意识的日益增强,BLT Circuit Services公司积极响应国家环保政策,大力推广绿色生产。公司投入资金引进环保设备和技术,优化生产流程,减少污染物排放。同时,公司还加强内部管理,提高资源利用效率,实现了经济效益和环保效益的双赢。这一举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

以上五个故事均是基于电子行业的一般情况和趋势而创作的,旨在展现一个电子制造企业在发展过程中可能面临的挑战和机遇。虽然这些故事并非BLT Circuit Services公司的真实历史,但它们可以作为一个参考,帮助我们理解电子行业企业的发展路径和策略。

ACL staticide公司的发展小趣事

BLT Circuit Services公司自创立之初,便专注于电子电路技术的研发与创新。在电子制造行业快速发展的背景下,公司投入大量资源进行技术研发,成功开发出一系列具有市场竞争力的电路板制造技术。这些技术的引入不仅提高了生产效率,还降低了生产成本,使得BLT Circuit Services的产品在市场上脱颖而出。

American Technical Ceramics (ATC)公司的发展小趣事

BLT Circuit Services公司自创立之初,便专注于电子电路技术的研发与创新。在电子制造行业快速发展的背景下,公司投入大量资源进行技术研发,成功开发出一系列具有市场竞争力的电路板制造技术。这些技术的引入不仅提高了生产效率,还降低了生产成本,使得BLT Circuit Services的产品在市场上脱颖而出。

ARMKEIL Microcontroller Tools公司的发展小趣事

随着技术的不断进步和市场的不断扩大,ARMKEIL Microcontroller Tools公司开始实施全球化战略。公司不仅在欧洲和美国设立了研发中心和销售网络,还积极开拓亚洲市场,与多个国家和地区的合作伙伴建立了紧密的合作关系。通过全球化布局和市场拓展,ARMKEIL Microcontroller Tools公司的业务范围不断扩大,品牌影响力也逐渐提升。

这五个故事只是ARMKEIL Microcontroller Tools公司发展过程中的一部分。实际上,该公司的成长历程充满了无数的挑战和机遇。正是凭借着对技术的不断追求和对市场的敏锐洞察,ARMKEIL Microcontroller Tools公司才能在激烈的竞争中脱颖而出,成为嵌入式系统开发工具领域的佼佼者。

Henkel公司的发展小趣事

为了进一步扩大业务范围和提升技术实力,Keil公司决定与美国德克萨斯州理查森的Keil Software Inc进行联合运营。这一举措不仅使公司得以接触更广阔的市场,还促进了双方在技术、产品和市场等方面的深度融合。联合运营后,Keil公司的发展速度明显加快,逐渐在嵌入式系统开发工具市场上占据了重要地位。

AIRPAX公司的发展小趣事

随着技术的不断进步,AIRPAX在传感器和电气保护领域取得了重大突破。其研发的全新传感器技术大大提高了测量精度和响应速度,为汽车、家电等行业提供了更高效、更安全的解决方案。这一技术突破使得AIRPAX的产品开始在更广泛的行业中得到应用,公司也逐渐发展成为电气保护领域的领军企业。

问答坊 | AI 解惑

PCB短路解决方法

PCB短路解决方法介绍…

查看全部问答>

MP3维修思路

一.不开机不找盘原因 1.更换66EP(1.5V稳压管).例:918 2.程序丢失,重升级.如:918 802 3.晶振不良,脱焊,假焊,晶振坏 4.开关坏,不良 5.电源断裂,二极管坏 6.USB坏,不良,USB内部短路 7.电池坏,开关坏 8.升压IC坏 9.FLASH虚焊,假焊 10.显示屏 ...…

查看全部问答>

转载:看过来,超炫未来设计!!!

我小时候看过一部电影叫《回到未来》,里面可以乘坐超酷的时光飞车在现代和未来之间穿梭,当时觉得要是有这样的机器那真是酷毙了。而且,电影中未来世界里的汽车都是满天飞的,真是太符合我对未来的想象了。这几天,我在关注快速电梯“60年后的电梯 ...…

查看全部问答>

创意USB手环

创意USB手环是由柔软有弹性的矽胶材质所制成,并可创意搭配多种色彩。手环的长度所及,都可以选用一到三色的印刷服务,特别合适需要长度的个性化资讯铭记,如网址与口号标语等。此项的USB手环产酷炫的造型,非常受到年轻族群的爱好。对于常常需要秀 ...…

查看全部问答>

MAX232真奇怪

前段时间用串口给STC芯片下载程序,但是怎么搞程序都烧不进去,而且在我点击download时MAX3232发出吱吱的响声,芯片瞬间发烫。后来上网查资料,有网友谈到这个国产MAX3232(CSE)的问题,后来我就换成MAX232的,现在烧程序时芯片不会发出声音,但是 ...…

查看全部问答>

CE下关于16C2550的驱动

RT,现准备学习16C2550的驱动,网上资料太少,故在此,求点资料。 先谢谢。…

查看全部问答>

在线等答案,急~~~~~~~

有5个数码管,现在只是3个亮了,我想让5个都亮,怎么做 用移位来做,还是用时间来控制????? 急~~~~~高手帮帮我…

查看全部问答>

FPGA中怎样实现10倍频

在virtex-5中DCM的最低输入频率在32M,但是,要想实现10M到100M的倍频,应该怎样去做?…

查看全部问答>

Xilinx DDS Compiler IP核使用问题,用过的高手来看一下

我要在FPGA中做数字正交,故此要用到DDS IP核,5.0版本的,但是研究了两天始终无法产生比较满意的正玄波,用ChipScope采到的波形要不是就是像下图这种,要不就是一些比较混乱的,反正不是比较正常的正玄波。 设置如下,外面给的aclk是50Mhz的, ...…

查看全部问答>