历史上的今天
返回首页

历史上的今天

今天是:2025年05月08日(星期四)

正在发生

2018年05月08日 | 单片机按键按下的先后顺序判断

2018-05-08 来源:eefocus

K4、K3:“进出”模拟检测键。
每先按K3、再按K4,即代表“进”一人次;
每先按K4、再按K3,则代表“出”一人次。
每“进”一人次,就在原“进”显示基础上加1(“进”显示初始状态为“b000”);
每“出”一人次,就在原“出”显示基础上加1(“出”显示初始状态为“C000”)。 
悬赏分:100 - 解决时间:2010-6-25 19:14 
最好把C语言程序给出来~

按照题目,编写了程序。用 PROTEUS 软件仿真截图如下。

单片机按键按下的先后顺序判断 - 非著名博主 - 电子信息角落

原来编写的程序,是使用汇编语言,现按照要求改成了C语言。
//================================================================
#include
#define uint unsigned int
#define uchar unsigned char
sbit K3 = P3^2;
sbit K4 = P3^3;
uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
//                       0     1     2     3     4     5     6     7     8     9 
                       0x88,0x83,0xc6,0xa1,0x86,0x8e,0xc2,0x89,0xff};
//                       A     b     C     d     E     F     G     H    [ ]
uchar DispD[] = {0,0,0,11,0,0,0,12};
uchar DispW[] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
//------------------------------------
void delay(uint z)
{
     uint x, y;
     for(x = z; x > 0; x--) for(y = 110; y > 0; y--);
}
//------------------------------------
void display(void)
{
     uint i;
     for (i = 0; i < 8; i++) {
       P2 = 0;
       P0 = table[DispD[i]];
       P2 = DispW[i];
       delay(3);
     } 
}
//------------------------------------
void main()
{
     uint in_num = 0, outnum = 0;
     while(1) {
       display();
//--------------------------
       if (K3 == 0) {
         display();
         if (K3 == 0) {
           while(K3 == 0) display();
           while(K4 == 1) display();
           in_num++;
           DispD[0] = in_num % 10;
           DispD[1] = in_num / 10 % 10;
           DispD[2] = in_num / 100;
           while(K4 == 0) display();
         }
       }
//--------------------------
       if (K4 == 0) {
         display();
         if (K4 == 0) {
           while(K4 == 0) display();
           while(K3 == 1) display();
           outnum++;
           DispD[4] = outnum % 10;
           DispD[5] = outnum / 10 % 10;
           DispD[6] = outnum / 100;
           while(K3 == 0) display();
         }
       }
//--------------------------
     }

推荐阅读

史海拾趣

Epistar Corp公司的发展小趣事

作为一家电子产品制造企业,Epistar始终关注环保和可持续发展问题。公司积极采用环保材料和生产工艺减少污染排放和能源消耗;同时,Epistar还加强了对废旧产品的回收和处理工作以减少对环境的负面影响。这些努力不仅提升了公司的社会形象也增强了公司的市场竞争力。

EOZ S.A.S公司的发展小趣事

EOZ S.A.S公司自创立之初,就致力于电子技术的研发与创新。在智能手机市场饱和之际,公司敏锐地捕捉到可穿戴设备市场的潜力,投入大量资源进行智能手表的研发。通过不断优化算法和硬件设计,EOZ S.A.S成功推出了一款具有超长待机、高精度健康监测和丰富应用场景的智能手表,迅速在市场上获得认可,公司因此崭露头角。

Everbuild公司的发展小趣事

Everbuild深知人才是企业发展的核心。因此,公司注重人才培养和团队建设。公司建立了完善的培训体系,为员工提供各种技能培训和职业发展机会。同时,Everbuild还鼓励员工参与创新项目和技术研发,激发员工的创造力和工作热情。这些努力使Everbuild拥有一支高素质、专业化的团队,为公司的持续发展提供了强有力的保障。

Captive Fastener公司的发展小趣事

随着环保意识的日益增强,Captive Fastener公司积极响应国家环保政策,推动生产方式的绿色转型。公司引进先进的环保生产设备和技术,减少生产过程中的污染排放。同时,公司还研发出可回收再利用的紧固件产品,为电子行业的可持续发展做出了贡献。

Fullywell Semiconductor Co Ltd公司的发展小趣事

随着全球对环境保护和可持续发展的重视,Fullywell也积极响应这一趋势,开始实施绿色转型战略。公司投入大量资源研发环保型半导体材料和生产工艺,致力于降低生产过程中的能耗和排放。同时,Fullywell还加强了与产业链上下游企业的合作,共同推动绿色供应链的建设。这些举措不仅提升了公司的社会责任感,也为公司的可持续发展奠定了坚实的基础。通过绿色转型,Fullywell在行业内树立了良好的企业形象,吸引了更多关注环保和可持续发展的客户和合作伙伴。

ABCO公司的发展小趣事

随着技术的不断进步,ABCO公司意识到只有不断创新才能在竞争中保持领先地位。因此,公司加大了对研发的投入,建立了一支高效的技术团队。这支团队不仅成功研发出了多款具有自主知识产权的新型传感器,还积极探索传感器与其他电子设备的融合应用,为公司开辟了新的增长点。

问答坊 | AI 解惑

linux与wince最根本的区别是什么-扫盲

让我们逐条分析评价Linux和WinCE/Windows的优缺点。 1.支持多种硬件平台由于嵌入式设备硬件平台的多样性,CPU芯片的快速更新,嵌入式操作系统要求支持常用的嵌入式CPU,如X86, ARM, MIPS, POWERPC等,并具有良好的可移植性。另外还需要支持种类繁 ...…

查看全部问答>

关于FPGA和CPLD,选择哪一个比较好?

FPGA:Field Programmable Gate Array(现场可编程门阵列) CPLD:Complex programmable logic devices(复杂可编程逻辑器件) 这两者之间的主要区别是什么?对于高速的电路系统,选择哪一个比较好? 笼统的说,两者的区别在于资源的规模和芯片 ...…

查看全部问答>

杭州汇文怎么样?

杭州汇文怎么样?能学到很多有用的东西吗? 还是骗人的啊…

查看全部问答>

s3c2440_spi.ko驱动编译失败,s3c2440 linux 2.6.29自己带的spi驱动如何编译

友善之笔 的系统,采用三星的s3c2440处理器, 想要spi驱动,不是gpio io口模拟的那种,直接采用多路复用spi的给定口,可是选择了spi_s3c2440_serial这个选项后,编译的时候总是遇到问题,说是spi_alloc_master找不到,网上搜索了很多资料,很多都是介绍 ...…

查看全部问答>

关于SLE4442读写问题:

关于SLE4442读写问题:     我用初始密码0XFF 0XFF  0XFF,效验成功,  读加密存储器器数据为7000FFFF ,         修改密码,0XF1 0XF1  0XF1,效验失败, 读加密存储器器数据为 ...…

查看全部问答>

WINCE60上的挂起与唤醒功能怎么做啊?有没做过的人啊?能不能通过触摸屏点击唤醒系统?

WINCE60上的挂起与唤醒功能怎么做啊?有没做过的人啊?能不能通过触摸屏点击唤醒系统?…

查看全部问答>

关于驱动程序的安装

我利用SetupDiXXX系列的函数进行驱动程序的安装。 但是有的机器需要10来分钟才能安装完成,而有的机器只要30秒钟就可以了 我跟踪了时间,发现时间主要花费在UpdateDriverForPlugAndPlayDevices函数上 不知道各位大大有什么建议? 我找不出来 ...…

查看全部问答>

"EVC高级编程与应用"中第11章TCP例程的使用问题!

在EVC中把程序编译好了,下到板子上的WINCE系统中运行;主机上的程序在wince的模拟器中运行。当把服务器端程序运行在主机模拟器上,把客户端程序运行在板子上,相互是可以通信的。但把两者运行的地方交换,就不能通信了,为什么??根据服务器的地 ...…

查看全部问答>

ADC123_IN0是什么意思???

                                 还有AD12_IN5等等....…

查看全部问答>

程序

大家可以对比一下程序就明白了, ASII_TAB.c里还有我的签名, 楼主还没能改掉! 边屏的主机接口都和咱的是一样的. STM32_FSMC_7.0_8bit.rar (465.28 KB) 下载次数:26 2010-12-13 11:00 …

查看全部问答>