完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人电信专业大三在读,老师讲的汇编太复杂,就自己弄了个板子来学c语言编程。但是频率计要用到脉冲信号,就只有先用proteus仿真了,各位大神有时间就帮小妹我看一看了。不甚感激!(*^__^*) ---
#include #include #define uint unsigned int #define uchar unsigned char ***it dula=P2^6; ***it wela=P2^7; uchar temp,t; uchar a,b,flg; uchar count[6]; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void init(); void delay(uint z); void display(uchar m,uchar n); void fun(uchar x,uchar y); uchar kkk(uchar p,uchar q); void main() { uchar sum; flg=0; t=0; temp=0; init(); while(flg) { if(flg==1) { flg=0; sum=TL1+TH1*256+temp*65536; //sum为五秒内所获得的脉冲总数 a=temp/5/1000; //获取频率数最高三位 b=temp/5%1000; //获取低三位 TR0=0; } display(a,b); //显示 } } void init() { TMOD=0x15;//设置定时器0为工作方式1,以及计数器1工作方式为1 EA=1;//开总中断 ET0=1;//开定时器0中断 ET1=1; //开计数器1中断 TR0=1;//启动定时器0 TR1=1;//启动计数器1 TH0=(65536-50000)/256; TL0=(65536-50000)%256; TH1=0x00; TL1=0x00; } //延时函数 void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //显示函数 void display(uchar m,uchar n) { count[0]=m/100; fun(count[0],0); count[1]=m%100/10; fun(count[1],1); count[2]=m%100%10; fun(count[2],2); count[3]=n/100; fun(count[2],2); count[4]=n%100/10; fun(count[2],2); count[5]=n%100%10; fun(count[2],2); } //统一化每个数码管的位选字选 void fun(uchar x,uchar y) { uchar w=0xfe; dula=1; P0=table[x]; dula=0; wela=1; P0=kkk(w,y); wela=0; delay(1); } //位选函数 uchar kkk(uchar p,uchar q) { p=_crol_(p,q); return p; } //定时器工作中断内容 void time0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t++; if(t==100)//当计时5秒时将计数器停止工作 { flg=1; t=0; TR1=0; } } //计数器工作中断内容 void count1() interrupt 3 { TH1=0x00; TL1=0x00; temp++; } 程序感觉是没问题的,可是接到proteus里没有反应。本人的想法是在他T1计数器那里接方波脉冲,这样就可以凭下降沿个数来知道一秒内有多少个脉冲,从而计算脉冲频率。或者是要用外部中断接脉冲? |
|
相关推荐
4个回答
|
|
回帖奖励 +1 分积分
路过,看看
|
|
|
|
|
|
|
|
其实我也需要这个程序的,我也是下载到单片机中就不得了,
|
|
|
|
#include
#define wei P2 #define duan P1 unsigned char ls151_a,ls151_b,ls151_b; unsigned long int f; unsigned int a,tt; unsigned char code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay_us(unsigned int us) { while(us--); } void display(unsigned char len,unsigned long int num) { unsigned char n; unsigned char temp[8]; temp[7]=num%100000000/10000000; temp[6]=num%10000000/1000000; temp[5]=num%1000000/100000; temp[4]=num%100000/10000; temp[3]=num%10000/1000; temp[2]=num%1000/100; temp[1]=num%100/10; temp[0]=num%10/1; if(len<8) len=8; for(n=0;n P2=weima[n]; P1=~duanma[temp[n]]; delay_us(100); } } void main() { TMOD |=0X15; TH0=0; TL0=0; TH1=(65536-46083)/256; TL1=(65536-46083)%256; ET1=1; TR1=1; ET0=1; TR0=1; EA=1; while(1) { ls151_a=1;ls151_a=0;ls151_a=0; display(8,f); } } void time0() interrupt 1 { TH0=0; TL0=0; a++; } void time1() interrupt 3 { TH1=(65536-46083)/256; TL1=(65536-46083)%256; tt++; if(tt==20) { tt=0; TR0=0; f=a*65536+TH0*256+TL0; a=0; TH0=0; TL0=0; TR0=1; } } 这是我编的,但是74ls151有abc有三个通道的,有八种可能的,能不能帮我编好其余的其中呢,用三个三个按键就可以,一个按键的功能时菜单功能的,就是说有多少种模式的,其余的两个按键时模式加减。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
727 浏览 0 评论
815 浏览 0 评论
850 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
823 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1274 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11816 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-29 00:36 , Processed in 0.584448 second(s), Total 80, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号