标题:
基于单片机频率计的设计 求指导
[打印本页]
作者:
wasd12355
时间:
2022-11-10 18:39
标题:
基于单片机频率计的设计 求指导
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(123.08 KB, 下载次数: 13)
下载附件
2022-11-10 19:31 上传
单片机源程序如下:
#include "reg51.h"
#define uint8 unsigned short int
uint8 i,k;
/****** ??????? *******/
void delay_us(int t)
{
i = t;
while(i--)
{}
}
/*******************************/
/************************************* ????? **************************************/
uint8 code smg_data[11] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//?????????(0-9????)
uint8 smg7,smg6,smg5,smg4,smg3,smg2,smg1,smg0;//???????:???????...???
//?????????
void smg(int a)
{
smg0 = 8;
smg1 = 6;
smg2 = 6;
smg3 = (a%100000)/10000;
smg4 = (a%10000)/1000;//??????
smg5 = (a%1000)/100;//??????
smg6 = (a%100)/10;//??????
smg7 = a%10;//??????
P2 = 0xf7;//1111 0000???8????
P0 = smg_data[smg7];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf6;//1111 0000???7????
P0 = smg_data[smg6];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf5;//1111 0000???6????
P0 = smg_data[smg5];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf4;//1111 0000???5????
P0 = smg_data[smg4];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf3;//1111 0000???4????
P0 = smg_data[smg3];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf2;//1111 0001???3????
P0 = smg_data[smg2];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf1;//1111 0010???2????
P0 = smg_data[smg1];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
P2 = 0xf0;//1111 0011???1????
P0 = smg_data[smg0];
delay_us(200);
P0 = smg_data[10];//?????
delay_us(10);
}
/****************************************************************************************/
/********** ????? ***********/
int count = 0;//????????
//???????,?????1??
void single_in() interrupt 2
{
count++;//??????,???1
}
/***********************************/
/******************* ??????? ********************/
uint8 flag = 1;//??????????
uint8 time0_num = 0;//???0????
int fr_cest = 0;//????
void timer0() interrupt 1
{
TH0 = 0x3c;//???0????,?????50??,65536-50000=3cb0
TL0 = 0xb0;
time0_num++;//???0????
if(time0_num>=20&&flag==0)//???0????20?,???1?,??????
{
EX1 = 0;//??????,??????
fr_cest = count;//????
time0_num = 0;//???0?????0
flag = 1;//??????
}
else if(time0_num>=20&&flag==1)
{
EX1 = 1;//??????,?????
count = 0;//??????0
time0_num = 0;//???0?????0
flag = 0;//???????
}
}
/*********************************************************/
/**************************** ????? ******************************/
void interrupt_init()
{
TMOD = 0x11; //0001 0001 T1????0 T1?????? 01,T1????1 T0????0 T0?????? 01,T0????1
TCON = 0x14; //0001 0100 T1????0 T1???? T0????0 T0???? ??1????0 ??1????? ??0????0 ??0????
IP = 0x09; //0000 1001 -- -- -- ????????? T1??????? ????1????? T0??????? ????0?????
IE = 0x86; //1000 0110 ????? -- -- ?????? ??T1?? ??????1 ??T0?? ??????0
}
/***********************************************************************/
void main()
{
interrupt_init();//?????
while(1)
{
if(flag==1)
{
if(fr_cest>10000)
{
P1 = 0x01;
}
else if(fr_cest<100)
{
P1 = 0x04;
}
else
{
P1 = 0x00;
}
smg(fr_cest);
}
else
{
P1 = 0x02;
}
}
}
复制代码
所有资料51hei附件下载:
基于单片机频率计的设计.7z
(79.81 KB, 下载次数: 11)
2022-11-10 19:32 上传
点击文件名下载附件
作者:
ycyydsl
时间:
2022-12-16 20:01
求仿真的使用手册
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1