完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
uint selfadaption()
{ uint num = 0; while(1) { if(count >= base_time) { EX0 = 0; ET0 = 0; num = a; a = 0; count = 0; // 计数器清零 if(num > 1000 && num < 10000) // f=10kHz~100kHz { base_time = 1; // 10ms EA = 1; // 开总中断 EX0 = 1; ET0 = 1; // 开定时器中断 TR0 = 1; IT0 = 1; // 边沿触发 // init_51(); } if(num > 100 && num <= 1000) // f=1kHz~10kHz break; if(num > 0 && num < 100) // f=0Hz~1kHz { base_time = 100; // 1s EA = 1; // 开总中断 EX0 = 1; ET0 = 1; // 开定时器中断 TR0 = 1; IT0 = 1; // 边沿触发 // init_51(); } } } return num; } |
|
相关推荐
1个回答
|
|
完整程序如下,但不知道哪里出问题了
/******************************************** 功能简介:周期信号从单片机的P3.2口输入, * 之后在数码管上显示周期信号的频率。* ********************************************/ #include "1602.h" uchar cnt[6]; uint count; uint a; uint num = 0; uint base_time = 10; // 初始定时100ms /* 频率数值分离,为显示做准备 */ void detach(uint fre) { uint freq; freq = fre*1000/base_time; cnt[0] = freq/100000; freq %= 100000; cnt[1] = freq/10000; freq %= 10000; cnt[2] = freq/1000; freq %= 1000; cnt[3] = freq/100; freq %= 100; cnt[4] = freq/10; cnt[5] = freq%10; } void display() { int i; write_com(0x80 + 6); for(i=0;i<6;i++) { write_data(cnt[i] + '0'); } } void init_51() { TMOD = 0x01; // 定时器0工作在方式1 EA = 1; // 开总中断 EX0 = 1; // 开外部中断0 IT0 = 1; // 边沿触发 ET0 = 1; // 开定时器中断 TR0 = 1; // 启动定时/计数器0 TH0 = (65536 - 10000) / 256; // 12M晶振下定时10ms TL0 = (65536 - 10000) % 256; } uint selfadaption() { uint num = 0; while(1) { if(count >= base_time) { EX0 = 0; ET0 = 0; num = a; a = 0; count = 0; // 计数器清零 if(num > 1000 && num < 10000) // f=10kHz~100kHz { base_time = 1; // 10ms EA = 1; // 开总中断 EX0 = 1; ET0 = 1; // 开定时器中断 TR0 = 1; IT0 = 1; // 边沿触发 // init_51(); } if(num > 100 && num <= 1000) // f=1kHz~10kHz break; if(num > 0 && num < 100) // f=0Hz~1kHz { base_time = 100; // 1s EA = 1; // 开总中断 EX0 = 1; ET0 = 1; // 开定时器中断 TR0 = 1; IT0 = 1; // 边沿触发 // init_51(); } } } return num; } void main() { uint f; init_51(); init_1602(); f = selfadaption(); detach(f); display(); while(1) ; // { // // } } void timer() interrupt 1 { TH0 = (65536 - 10000) / 256; // 重装初值 TL0 = (65536 - 10000) % 256; count++; // 计数器加1 /* if(count == 20) // 定时1s到 { count = 0; // 计数器清零 // EA = 0; // 关总中断 num = a; // a = 0; detach(num); ET0 = 0; // 关定时器中断 EX0 = 0; // 关外部中断0 } */ } void exter0() interrupt 0 { a++; } |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
7 浏览 0 评论
26 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
13 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
644 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1000 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11771 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 17:14 , Processed in 0.531596 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号