历史上的今天
今天是:2024年10月14日(星期一)
2019年10月14日 | ATMEGA16单片机实现的数控频率计原理图及程序
2019-10-14 来源:eefocus
//包含所需头文件
#include #include #include /*------宏定义------*/ #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //数码管字型表,对应0, 1, 2, 3, 4, 5, 6, 7, 8, 9// uchar Table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar Data[4]={0,0,0,0}; //显示初始值:0 0 0 0 uint data=0; uint CNT=0; uchar fanwei=1; unsigned long Load; //延时函数 void delay_us( int t) //us { do t--; while(t>1); } void delay_ms(unsigned int t) //ms { while(t!=0) { delay_us(1142); t--; } } //动态显示函数 void Display(uchar *p) //参数p为待显示的数组名 {uchar i,sel=0x01; for(i=0;i<4;i++) { PORTA=Table[p[i]]; //送字型码 PORTD=~sel; delay_us(500); //显示延时 sel=sel<<1; //移位以显示前一位 } } //计数值处理函数 void Process(unsigned long i,uchar *p) { if(fanwei==2) i=i/1000; if(fanwei==1) { if(i>9999) i=9999; } p[0]=i/1000; i=i%1000; p[1]=i/100; i=i%100; p[2]=i/10; p[3]=i%10; } void xuanze (void) { if((PINB&0X10)==0) fanwei=1; //单位为1Hz if((PINB&0X20)==0) fanwei=2; //单位为1KHz if(fanwei==1) PORTC=0X01; if(fanwei==2) PORTC=0X02; } //端口初始化 void port_init(void) { PORTA = 0xFF; DDRA = 0xFF; PORTB = 0xFF; DDRB = 0x00; PORTC = 0xFF; DDRC = 0xFF; PORTD = 0xFF; DDRD = 0xFF; } //定时T1初始化 void timer1_init(void) { TCCR1B = 0x00;//停止定时器 TIMSK |= 0x04;//中断允许 TCNT1H = 0x00; TCNT1L = 0x00;//初始值 OCR1AH = 0xFF; OCR1AL = 0xFF;//匹配A值 OCR1BH = 0xFF; OCR1BL = 0xFF;//匹配B值 ICR1H = 0xFF; ICR1L = 0xFF;//输入捕捉匹配值 TCCR1A = 0x00; TCCR1B = 0x07;//启动定时器 } //定时器T1溢出中断服务程序 #pragma interrupt_handler timer1_ovf_isr:9 void timer1_ovf_isr(void) { CNT++; TCNT1H = 0x00; //重装值高位 TCNT1L = 0x00; //重装值低位 } //定时器T2初始化 void timer2_init(void) { PORTC =0X01; TCCR2 = 0x00;//停止定时器 ASSR = 0x08;//异步时钟模式 AS2=1 TCNT2 = 0xFF;//初始值 OCR2 = 0xFE;//匹配值 TIMSK |= 0x40;//中断允许 TCCR2 = 0x05;//启动定时器 PCK/128 } //T2溢出中断服务程序 #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { PORTC=0X02; TCCR1B = 0x00; //关闭计数 //读取计数值 Load=CNT*65536+TCNT1; //计算频率值 TCNT1 = 0X00; //清除计数值 CNT=0; TCCR1B = 0x07; //开始计数 } void init_devices(void) { cli(); //禁止所有中断 MCUCR = 0x00; MCUCSR = 0x80;//禁止JTAG GICR = 0x00; port_init(); timer1_init(); timer2_init(); sei();//开全局中断 } //主函数 void main(void) { init_devices(); while(1) { xuanze(); Process(Load,Data); //计数值处理 Display(Data); //动态扫描显示 } }
史海拾趣
|
这里只上一些照片,详细资料均在论文中 简略的介绍: 这些照片所拍摄的是我的多机器人系统中的两台灭火机器人中的一台。本系统中除了灭火机器人还有侦察机器人。侦察机器人的照片下次再发。灭火机器人主要功能是接收上位机发来 ...… 查看全部问答> |
|
大家好!!!我不是东西!我乱发垃圾信息!!!我真该死!!!!我老婆生孩子没屁眼,孩子脸上还长个小JJ!!我老婆就跟第四者跑了,但是第三者和第五者还轮流早我家门前徘徊....我真郁闷啊.... [ 本帖最后由 西门 于 2009-8-7 15:26 编辑 ]… 查看全部问答> |
|
请教一个CF问题,c#开发的,Shared Memory问题 各位,最近在6410的开发板上测试下shared memory,语言是c#,wince6.0,.net compact framework3.5, 测试下来发现内存在不停的变小,大概从36M下降到20多M【比较有规律的,每次少64k】,测试了几次,一次时间大概1个晚上,第二天发现wince的界面冻 ...… 查看全部问答> |
|
很多网友在学习 TI Stellaris 的时候,肯定会遇到各种疑问,这里是一个很好的交流平台,不管你是工程师还是一名学生,有问题就可以提出来,让我们大家来一起讨论。 不过,在提出问题的时候,为了更好让大家解决问题,在有些时候也需要提问者提供一 ...… 查看全部问答> |
|
单片机C51编程几个有用的模块(转载) [ 2011-3-3 6:31:00 | By: 32446975 ] 本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型 ...… 查看全部问答> |




