单片机源程序如下:
/**********************************************************************/
/**计数器按键**
(1) (2) (3) (4)
(5) (6) (7) (8)
(9) (0) (C) (=)
(+) (-) (*) (/)
10:清零 11:确认 12:加 13:减 14:乘 15:除
**********************************************************************/
//头文件
#include #include //宏定义 #define uchar unsigned char #define uint unsigned int //定义按键返回值 unsigned char keyvalue; //定义数码管段码(共阳) uchar LED[]= { 0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xF8, 0x80,0x90 }; //定义数码管位的控制端 uchar tab[]={0,0,0,0}; //IO端口初始化 void IO_init(void) { DDRA = 0XFF; DDRB = 0XFF; DDRC = 0XFF; DDRD = 0XF0; PORTA = 0X00; PORTB = 0X00; PORTC = 0X08; //PORTD = 0XFF; } //8M晶振下,延时1ms void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=1333;y>0;y--); } //数码管显示 void display(uint num) { tab[0]=num%10; //取个位数 tab[1]=num/10%10; //取十位数 tab[2]=num/100%10; //取百位数 tab[3]=num/1000%10; //取千位数 if(num<=9)//检测为小于等于9的在个位数显示 { PORTA=LED[tab[0]]; PORTC=0x08; delayms(1); } if(num>9&&num<=99)//检测为大于9与小于等于99在个十位显示 { PORTA=LED[tab[0]]; PORTC=0x08; delayms(1); PORTA=LED[tab[1]]; PORTC=0x04; delayms(1); } if(num>99&&num<=999)//检测为大于99与小于等于999在个十百位显示 { PORTA=LED[tab[0]]; PORTC=0x08; delayms(1); PORTA=LED[tab[1]]; PORTC=0x04; delayms(1); PORTA=LED[tab[2]]; PORTC=0x02; delayms(1); } if(num>999&&num<=9999)//检测为大于999与小于等于9999在个十百千位显示 { PORTA=LED[tab[0]]; PORTC=0x08; delayms(1); PORTA=LED[tab[1]]; PORTC=0x04; delayms(1); PORTA=LED[tab[2]]; PORTC=0x02; delayms(1); PORTA=LED[tab[3]]; PORTC=0x01; delayms(1); } } //按键扫描 int key_scan(void) { uint j;//按键循环次数变量定义 PORTD=0xEF;// PD端口输出 1111 1110 for(j=0;j<5;j++)//按键检测4次 if((PIND&0x0F)!=0x0F)//按键检测 { delayms(20);//延时消抖 if((PIND&0x0F)!=0x0F)//再次检测 { if((PIND&0x01)==0) //第一个按键按下 keyvalue=1; //返回按键值 1 if((PIND&0x02)==0) //第二个按键按下 keyvalue=2; //返回按键值 2 if((PIND&0x04)==0) //第三个按键按下 keyvalue=3; //返回按键值 3 if((PIND&0x08)==0) //第四个按键按下 keyvalue=4; //返回按键值 4 while((PIND&0x0F)!=0x0F);//等待按键释放 } } PORTD=0xDF; for(j=0;j<5;j++) if((PIND&0x0F)!=0x0F) { delayms(20); if((PIND&0x0F)!=0x0F) { if((PIND&0x01)==0) keyvalue=5; if((PIND&0x02)==0) keyvalue=6; if((PIND&0x04)==0) keyvalue=7; if((PIND&0x08)==0) keyvalue=8; while((PIND&0x0F)!=0x0F); } } PORTD=0xBF; for(j=0;j<5;j++) if((PIND&0x0F)!=0x0F) { delayms(20); if((PIND&0x0F)!=0x0F) { if((PIND&0x01)==0) keyvalue=9; if((PIND&0x02)==0) keyvalue=0; if((PIND&0x04)==0) keyvalue=10; if((PIND&0x08)==0) keyvalue=11; while((PIND&0x0F)!=0x0F); } } PORTD=0x7F; for(j=0;j<5;j++) if((PIND&0x0F)!=0x0F) { delayms(20); if((PIND&0x0F)!=0x0F) { if((PIND&0x01)==0) keyvalue=12;
上一篇:AVR单片机简单计算器的Proteus仿真实现+源码
下一篇:AVR定时器—关于16位的timer1定时器的具体使用
推荐阅读
史海拾趣
DIALIGHT在工业LED照明领域取得了显著成就。公司专注于为工业应用设计集成系统,以减少安装和维护的复杂性,并确保产品在恶劣条件下持续稳定运行。此外,DIALIGHT的LED产品旨在提供优越的运行性能、可靠性和耐久性,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。
企业文化和团队建设是DCD公司发展的重要保障。公司始终坚持以人为本的管理理念,注重员工的成长和发展。公司建立了完善的培训体系和激励机制,为员工提供广阔的发展空间和良好的职业前景。同时,公司还积极开展各类文化活动和社会公益活动,增强员工的凝聚力和归属感。在团结、进取、创新的企业文化引领下,DCD公司的团队日益壮大和成熟,为公司的发展提供了强有力的支持。
请注意,以上故事均为虚构内容,仅用于演示电子行业公司可能的发展路径和故事框架。在实际应用中,请根据具体公司的实际情况进行调整和修改。
随着技术的不断成熟和产品的广泛应用,Array Microsystems Inc开始寻求市场拓展的机会。公司积极与各大电子设备制造商建立合作关系,将其阵列传感器技术应用于智能手机、平板电脑等消费电子产品中。通过与这些企业的战略合作,Array Microsystems Inc不仅扩大了市场份额,还提升了品牌知名度。同时,公司还积极开拓海外市场,将产品推向全球范围。
随着技术的不断进步和市场需求的日益多样化,CSR plc意识到单一的业务领域已无法满足公司的长远发展。于是,公司开始寻求多元化的发展道路。2007年,CSR plc成功收购了Nordnav Technologies和Cambridge Positioning Systems,开始进军GPS市场。这一战略转型不仅让公司的业务范围得到了极大的拓展,也使其在GPS领域取得了显著的成就。
近年来,电子行业面临着诸多变革和挑战,如物联网的快速发展、人工智能的崛起等。面对这些变革,Boundary Devices积极调整战略,加强在物联网和人工智能领域的研发投入,推出了一系列符合市场趋势的新产品。同时,公司还加强与高校和研究机构的合作,共同推动电子行业的创新与发展。
Boundary Devices公司成立于2003年,总部位于美国亚利桑那州。创立之初,公司便专注于嵌入式系统硬件的开发与生产,凭借对技术的深刻理解和市场需求的敏锐洞察,Boundary Devices迅速在行业中崭露头角。其推出的Boundary Devices插座和适配器,因其兼容性强、性能稳定而备受市场青睐。同时,公司与NXP/Freescale建立了紧密的合作关系,共同推进i.MX系列处理器的应用与发展,为公司的后续发展奠定了坚实的基础。
国际汽车改装展/华南最大汽车改装展/2009汽车改装展/汽车改装展/广州汽车改装展 2009第七届中国(广州)国际汽车改装展暨2009广州房车、旅居车、礼宾车展览会 时间:2009年2月23-25日 地点:中国·广州琶洲国际采购中心 批准举办:中华人民共和国商务部 主办单位:中国对外贸易经济合作企业协会 中汽 ...… 查看全部问答∨ |
初始化SD卡时,等待卡退出空闲状态超时错误,总是在这里卡住,都快郁闷死了,高人指点一下! 在ZLG的SmartARM2200上做SD卡的读卡器实验,用的是uC/OS系统和ZLG_SD驱动。总是在卡初始化时返回“SD_ERR_TIMEOUT_WAITIDLE 0x34”错误,不知道为什么?SD卡是Kingstone 2G的。 … 查看全部问答∨ |
yl2440板子的扩展串口16c2550的驱动问题。请高赐教。 开发板是YL2440。扩展串口的驱动用wince自己的16C550的驱动。现在的情况是可以发送,但是不能接收。是什么原因,高手们赐教。… 查看全部问答∨ |
vc2005 ppc2003模拟器如何分配设备内存和程序内存,以及pda设备(wm5)上给程序增加内存? vc2005 ppc2003模拟器如何分配设备内存和程序内存,以及pda设备(wm5)上给程序增加内存?… 查看全部问答∨ |
请问:在嵌入式linux中,打印机驱动有没有可能做到支持几乎所有型号的打印机,如果可行,请给点建议,如果不行,也请给点原因,谢谢了,小弟刚开始接触这行,老师要求,调查下这个问题:)… 查看全部问答∨ |
|
在寄存器FLL_CTL1中将SELM设置为11b后,OFIFG总是会自动置位,而且选择失败,MCLK始终为DCOCLK,快崩溃了,怎么弄啊?… 查看全部问答∨ |
◆ PANdrive系列:控制器+驱动器+电机(步进,直流无刷)+编码器 PANdrive系列产品是一种智能产品集成了控制器,驱动器,电机,磁编码器与一体此外支持如USB,RS232,RS485,CAN等多种通讯方式。外部只需要提供 ...… 查看全部问答∨ |