历史上的今天
返回首页

历史上的今天

今天是: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);        //动态扫描显示

}


}

IMG_20190725_090858.jpg?imageView2/2/w/550

推荐阅读

史海拾趣

东科半导体(DK)公司的发展小趣事

东科半导体(DK)公司一直将技术创新作为发展的核心驱动力。公司投入大量资金和资源用于研发,先后开发出AC/DC、同步整流、第三代半导体氮化镓芯片等先进技术。其中,东科半导体的同步整流芯片研发成功,其独特的两引脚封装技术为全球首创,为公司赢得了行业内的独家竞争优势。这一技术的成功应用,不仅提升了公司产品的性能,也进一步巩固了东科在电源管理芯片市场的领先地位。

博众电气(BOZHONG ELECTRIC)公司的发展小趣事

博众电气始终坚信,品质是企业生存和发展的根本。因此,公司始终将品质管理放在首位,并严格执行ISO9001等国际质量管理体系标准。

为了进一步提升产品品质和管理水平,博众电气还积极申请并通过了多项国际认证。这些认证不仅证明了博众电气的产品品质和管理水平达到了国际先进水平,还为公司的国际化发展提供了有力保障。

永源微电子(APM)公司的发展小趣事

永源微电子(APM)公司创立于2017年,前身可追溯到台湾汉磊科技。作为汉磊科技的全资子公司,香港艾柏霖科技有限公司的功率器件事业部,永源微电子继承了丰富的技术积累和市场资源。公司创立之初,便确立了专注于集成电路设计、制造与销售的战略方向。通过引进国际先进的生产工艺和研发团队,永源微电子逐渐在电子行业中崭露头角,为后续的快速发展奠定了坚实基础。

Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

Advanced Interconnections Corp公司的发展小趣事

为了进一步提升国际竞争力,AIC公司开始实施全球化布局战略。公司先后在多个国家设立了研发中心和生产基地,以便更好地服务全球客户。同时,AIC公司还积极参加国际展览和交流活动,与海外企业建立合作关系,推动产品的全球化销售。这些举措使AIC公司的国际影响力不断提升,市场份额也进一步扩大。

DART(英国达特)公司的发展小趣事

在快速发展的过程中,DART公司也遇到了不少挑战和危机。例如,某个时期全球电子元器件供应紧张,导致公司面临严重的原材料短缺问题。面对这一挑战,DART公司迅速调整采购策略,积极寻找新的供应商和替代品,并加强与现有供应商的合作和沟通。通过这些措施,公司成功度过了危机,并保持了业务的稳定增长。

问答坊 | AI 解惑

我花半年时间搞的机器人的照片(三之一)

这里只上一些照片,详细资料均在论文中 简略的介绍:     这些照片所拍摄的是我的多机器人系统中的两台灭火机器人中的一台。本系统中除了灭火机器人还有侦察机器人。侦察机器人的照片下次再发。灭火机器人主要功能是接收上位机发来 ...…

查看全部问答>

请问工控用的M27C4002和X28HC64是属于哪个板块的?

请问工控用的M27C4002和X28HC64是属于哪个板块的? 我要重点研究这两个程序芯片 多谢!!…

查看全部问答>

八个三位数码管按键控制电路

各位大侠,小弟要做一个作业,用八个三位数码管显示按键次数。哪位能推荐个方案? 觉得问题的难点在于,数码管太多了。…

查看全部问答>

同煤国电王坪综合利用坑口电厂项目主体施工招标

大家好!!!我不是东西!我乱发垃圾信息!!!我真该死!!!!我老婆生孩子没屁眼,孩子脸上还长个小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几个有用的模块(转载)

单片机C51编程几个有用的模块(转载) [ 2011-3-3 6:31:00 | By: 32446975 ]       本文档包括单片机系统中常用到的时钟中断、通讯及键盘扫描等模块(见所附源程序)的说明。这些模块使用前后台系统模型 ...…

查看全部问答>

稳压管的用法 第三弹

如图,这次是和NPN型三极管构成一个开关功能,求解稳压管的作用?…

查看全部问答>