历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | ATmega16计算器代码(数码管显示)
2019-10-17 来源:51hei
单片机源程序如下:
/**********************************************************************/
/**计数器按键**
(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;
史海拾趣
|
大约从20世纪80年代起,就有许多业内专家宣称模拟电路已走进死胡同,而数字应用将在电子世界中大放异彩,包括用在通信上的集成电路(integrated circuits,ICs)。在现实中,当然,现代化的通信系统同时需要将模拟及数字功能复杂地融合在一起。 不 ...… 查看全部问答> |
|
在BSP文件configAll.h中,对于非ROM驻留型映像的堆栈定义如下两种: 堆栈向下增长:#define STACK_ADRS _romInit 一直对这个定义有疑问,_romInit不是定义在ROM中吗?怎么映射到RAM的地址中呢?没有看到显 ...… 查看全部问答> |
|
大伙或许对编译比较模糊 这是我对explorer编译时的观察记录 Build for Windows CE (Release) (Built on Apr 14 2005 13:54:39) File names: Build.log Build.wrn Build.err Build.dat BUILD: [Thrd:Sequence:Type ] Message B ...… 查看全部问答> |
|
安装protel 99时出现的错误信息为:Error extracting support files:服务器运行失败 请问这是因为什么? 如何处理,是不是需要安装什么WINXP的组件或者服务?… 查看全部问答> |
|
我将以前的MIDI键盘程序弄到万利的STM32板上来了,哈哈~~~ 代码看得比较晕,经过一个晚上加一个上午的奋斗,终于把程序改好了~~~~ 我是拿原来的USB摇杆的那个程序来改的,所以里面还有很多原来的摇杆方面的东东, 懒得去改它了,能用就行了。 源代码包下载: https://bbs.eeworld.com.cn/upfiles/img/20 ...… 查看全部问答> |
|
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //设置ADC采样速率,每秒采样125千次;这个命令是指采样频率还是设置了采样频率的上限?如果在后面使用处理器触发时,即SysCtlSleep();//使处理器进入睡眠模式 &n ...… 查看全部问答> |




