📄 frequent.c
字号:
#include<stdio.h>
#include<reg52.h>
#include<absacc.h>
#include <intrins.h>
#define DA_0 XBYTE [0x8140]
#define DA_1 XBYTE [0x8180]
#define DACR XBYTE[0x81c0]
#define COM8279 XBYTE[0x8041]
#define DATA8279 XBYTE[0x8040]
#define uchar unsigned char
#define uint unsigned int
sbit StatusBit= ACC^7;
sbit SPI_DATA= P1^0;
sbit SPI_CLK= P1^1;
sbit CS =P1^2;
sbit INC=P1^3;
sbit UP_DOWN=P1^4;
sbit CS9313=P1^5;
sbit c0=P1^0;
sbit c1=P1^1;
sbit c2=P1^2;
sbit c3=P1^3;
sbit c4=P1^4;
sbit c5=P1^5;
sbit c6=P1^6;
sbit c7=P1^7;
sbit b1=P3^4; //清零口
sbit b0=P3^5; //启动口
int k=0;
int k2=0; //DA转换值
int value=0; //置数
uchar place=4; //数码管地址标示,高四位
int differ=0;//频率与置数的差值
int da;
int N;
int tim;
char tim2;
uchar code tab[23]={0x3f,0x06,0x5b,0x4f,0x66,0x6d, // 0 1 2 3 4 5 //
0x7d,0x07,0x7f,0x6f,0x77,0x7c, // 6 7 8 9 A b //
0x39,0x5e,0x79,0x71,0x40,0x76, // c d e f - h //
0x38,0x3e,0x73,0x67,0xff};
//***************************子函数声明*****************
void disp(long num,uchar index);
uchar getkey(void);
void delay(uchar time);
//****************主程序***************************
void main(void)
{
tim=0;
tim2=0;
COM8279=0x00;
COM8279=0x5c;
COM8279=0x2a;
COM8279=0x94;
COM8279=0xd1;
b0=0;
b1=0;
N=20;
TMOD=0x01; //定时器0初始化
TR0=1;
ET0=1;
IT0=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EX1=1;
EA=1;
while(1)
{
}
}
//*******************************************
//*****************显示子函数定义**************
void disp(long num,uchar index)
{
uchar i;
//COM8279=0xd1; //初始化8279 110 10001全部清零
do{
ACC=COM8279;//读回状态信息
}
while(ACC==1);//等待
//COM8279=0X00;//键盘/显示工作方式
//COM8279=0X2a; //时钟编程 001 01010(10分频)
COM8279=0x90+index;//写显示RAM 100 1(自动加一)0000(指向第零个存储单元)
for(i=0;num>0;i++)
{
DATA8279=tab[num%10];
num=num/10;
}
}
/*void disp(long num,uchar index)
{
COM8279=144+index;
COM8279=0xd1;
do
{
ACC=COM8279;
}while(StatusBit==1);
while(num>0)
{
DATA8279=tab[num%10];
num=num/10;
}
}
*/
////////////////////////获取键值/////////////////////////
uchar getkey(void)
{
uchar m;
switch(DATA8279)
{
case 0xc3:m=13; break; //K13键
case 0xc2:m=9; break; //K9键
case 0xca:m=10; break; //K10键
case 0xd2:m=11; break; //K11键
case 0xc1:m=5; break; //K5键
case 0xc9:m=6; break; //K6键
case 0xd1:m=7; break; //K7键
case 0xc0:m=1; break; //K1键
case 0xc8:m=2; break; //K2键
case 0xd0:m=3; break; //K3键
case 0xcb:m=14;break; //K14键
case 0xd3:m=15; break; //K15键
case 0xd8:m=4; break; //K4键
case 0xd9:m=8; break; //K8键
default: m=16; break;
}
return m;
}
/////////////////////////////////////////////////////
//********************按键中断程序**********************
void int_1(void) interrupt 2 //外部中断1
{
uchar key;
EA=0;
key=getkey();
switch(key)
{
case 1:N=20;
disp(1,7);break;
case 2:N=40;
disp(2,7);break;
case 3:N=60;
disp(3,7);break;
case 4:N=80;
disp(4,7);break;
case 5:N=100;
disp(5,7);break;
case 6:N=120;
disp(6,7);break;
case 7:N=140;
disp(7,7);break;
case 8:N=160;
disp(8,7);break;
case 9:N=180;
disp(9,7);break;
case 10:N=200;
disp(0,7);break;
case 11:disp(0,0);break;
default: ;break;
}
EA=1;
}
/*********************************************
函数名称:定时器/计数器0中断服务程序
参数:
返回值:
*********************************************/
void TIMER_0(void) interrupt 1
{
int a1=0,a2=0,a3=0,a4=0,t1=0,t2=0,t3=0,t4=0;
long a=1,t=100,f=0;
TR0=0;
//if(tim2==20)
//{
b0=~b0;
if(b0==0)
{
c0=1;c1=c2=c3=c4=c5=c6=c7=0; //先读标准信号值
a1=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c1=1;c0=c2=c3=c4=c5=c6=c7=0;
a2=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c2=1;c1=c0=c3=c4=c5=c6=c7=0;
a3=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c3=1;c1=c2=c0=c4=c5=c6=c7=0;
a4=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c4=1;c1=c2=c3=c0=c5=c6=c7=0; //再读被测信号值
t1=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c5=1;c1=c2=c3=c4=c0=c6=c7=0;
t2=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c6=1;c1=c2=c3=c4=c5=c0=c7=0;
t3=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
c7=1;c1=c2=c3=c4=c5=c6=c0=0;
t4=P0;
c2=c1=c0=c3=c4=c5=c6=c7=0;
b1=1;
b1=0;
//a=a4*256*62256+a3*62256+a2*256+a1;
//t=t4*256*62256+t3*62256+t2*256+t1;
//f=54656306/a*t;
//COM8279=0xd1; //初始化8279 110 10001全部清零
//disp(f,0);
//f=0;
}
//tim2=0;
//}
//else tim2++;
tim++;
if(tim==N)
{
tim=0;
a=a4*256*62256+a3*62256+a2*256+a1;
t=t4*256*62256+t3*62256+t2*256+t1;
f=60000000/a*t;
if(f<=1000) f=f*0.95238;
if(f<=10000&&f>1000) f=f*0.93738;
if(f<=100000&&f>10000) f=f*0.92249;
if(f>100000) f=f*0.92461;
COM8279=0xd1; //初始化8279 110 10001全部清零
disp(f,0);
f=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -