📄 main.c
字号:
#define uchar unsigned char
#define uint unsigned int
//--------------------------------------------------------------------
/*void set_timer0_1T()//设置T0为1T模式
{
AUXR=AUXR|0x80;
}
//--------------------------------------------------------------------
void set_timer1_1T()//设置T1为1T模式
{
AUXR=AUXR|0x40;
}
//--------------------------------------------------------------------
void set_timer0_12T()//设置T0为12T模式
{
AUXR=AUXR&0x7f;
}
//--------------------------------------------------------------------
void set_timer1_12T()//设置T1为12T模式
{
AUXR=AUXR&0xbf;
}
//--------------------------------------------------------------------
uchar EEPROM_read(uint addr)//EEPROM字节读
{
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_CONTR=0x81;
ISP_CMD=1;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
return ISP_DATA;
}
//--------------------------------------------------------------------
void EEPROM_write(uint addr,uchar dat)//EEPROM字节写
{
ISP_DATA=dat;
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_CONTR=0x81;
ISP_CMD=2;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
}
//--------------------------------------------------------------------
void EEPROM_ERASE(uint addr)//EEPROM扇区擦除
{
ISP_ADDRH=(addr&0xff00)>>8;
ISP_ADDRL=addr&0x00ff;
ISP_CONTR=0x81;
ISP_CMD=3;
ISP_TRIG=0x46;
ISP_TRIG=0xb9;
} */
//--------------------------------------------------------------------
/* void set_p3_tw()
{
P3M0|=0x00;
P3M1|=0x00;
}*/
//--------------------------------------------------------------------
void AD_init(uchar AD_port_sel ) //ADC初始化
{
ADC_CONTR|=0x80; //开ADC电源
switch(AD_port_sel) //选择作为ADC的端口
{
case 0:
P1M0=0x01;
P1M1=0x00;
ADC_CONTR&=0xf8;
break;
case 1:
P1M0=0x02;
P1M1=0x00;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x01;
break;
case 2:
P1M0=0x04;
P1M1=0x00;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x02;
break;
case 3:
P1M0=0x08;
P1M1=0x10;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x03;
break;
case 4:
P1M0=0x10;
P1M1=0x00;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x03;
break;
case 5:
P1M0=0x20;
P1M1=0x00;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x05;
break;
case 6:
P1M0=0x40;
P1M1=0x00;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x06;
break;
case 7:
P1M0=0x80;
P1M1=0x80;
ADC_CONTR&=0xf8;
ADC_CONTR|=0x07;
break;
}
ADC_CONTR=0xe7;
}
//--------------------------------------------------------------------
uint GET_AD_Result()//启动AD转换并返回转换值
{
uchar temp;
uint data_temp;
data_temp=0;
ADC_DATA=0;
ADC_LOW2=0;
ADC_CONTR|=0x08;
re: temp=0x10;
temp&=ADC_CONTR;
if(temp==0)
goto re;
ADC_CONTR&=0xe7;
data_temp=ADC_DATA;
data_temp<<=2;
data_temp+=ADC_LOW2;
return data_temp;
}
//--------------------------------------------------------------------
//模块:Dis_Wave.C
//功能:示波器模块
//晶振:24.000MHz
//芯片: STC12C5412AD
//版本:V1.0.0
//设计:魏广寅
//日期:2007.4.10
#include "lcd12864_driver_new.h"
#define uchar unsigned char
#define uint unsigned int
extern void d0(void);
extern uchar keyfuncindex;
extern void d1(void);
extern void AD_init(uchar AD_port_sel );
extern uint GET_AD_Result();//启动AD转换并返回转换值
extern void delay_1(uchar time);
uint xdata record[128];
sbit key1=P3^0;
sbit key2=P3^1;
//--------------------------------------------------------------------
void delay(uint time)
{
uchar jj,hh;
while(--time!=0)
{
for(jj==0;jj<255;jj++)
{
for(hh==0;hh<255;hh++);
}
}
}
//--------------------------------------------------------------------
void wave()
{
uchar mod=1;
uchar data k;
float x2;
lcd_init();
AD_init(7);
while(1)
{
for(k=0;k<128;k++)
{
record[k]=GET_AD_Result();
}
switch(mod)
{
case 0:
{
if(record[k]==512)
{
dis_cls();
for(k=0;k<128;k++)
{
x2=record[k]/16;
dis_point(64-x2,k);
}
for(k=127;k>0;k--)
{
x2=record[k]/16;
dis_point(64-x2,k);
}
}
}
break;
case 1:
{
dis_cls();
for(k=0;k<128;k++)
{
x2=record[k]/16;
dis_point(64-x2,k);
}
for(k=127;k>0;k--)
{
x2=record[k]/16;
dis_point(64-x2,k);
}
delay(30000);
}
break;
}
key2=1;
if(key2==0)
{
mod=!mod;
delay_1(5);
}
key1=1;
if(key1==0)
{
delay_1(5);
goto exit;
}
}
exit: keyfuncindex=1;
d1();
delay(1);
}
//--------------------------------------------------------------------
//模块:Freqen.C
//功能:频率计模块
//晶振:24.000MHz
//芯片: STC12C5412AD
//版本:V1.0.0
//设计:魏广寅
//日期:2007.4.10
#include "stc12c5412ad.h"
#define uchar unsigned char
#define uint unsigned int
extern uchar keyfuncindex;
void dis_cls(void);
extern void d0(void);
extern void lcd_init(void);
extern void dis_one_char(uchar x,uchar y,uchar asc_num,bit b_flag);
extern void dis_one_zi(uchar x_add,uchar y_add,uchar code *po,bit back_flag,bit char_moudle);
extern void delay(uint time);
extern uchar bdata gate;
extern void beep(uint time);
void sel_x(uchar x); //74HC390 分频系数选择1,10,100
void delay_1(uchar time);
extern uchar temp_l,temp_h;
extern uchar i;
extern unsigned char code x43[];// 量
extern unsigned char code x44[];// 程
extern unsigned char code x45[];// 切
extern unsigned char code x46[];// 换
extern unsigned char code x47[];// 请
extern unsigned char code x48[];// 稍
extern unsigned char code x49[];// 候
extern unsigned char code x50[];// …
extern unsigned char code x51[];// 周
extern unsigned char code x52[];// 期
extern unsigned char code x7[]; // 频
extern unsigned char code x8[]; // 率
extern uint temp0,temp1,temp2,temp3,temp4;
uchar a1,a2;
sbit sel_1=P1^6;
sbit sel_10=P1^4;
sbit sel_100=P3^4;
sbit p3_5=P3^5;
bit clr_flag0=0;
bit clr_flag1=0;
bit clr_flag2=0;
bit clr_flag3=0;
bit clr_flag4=0;
sbit key0=P3^0;
sbit key1=P3^1;
//--------------------------------------------------------------------
void timer_init()
{
TMOD=0xd1; //T1 做门控计数
TH1=0;
TL1=0;
TH0=0x3c;
TL0=0xb0;
ET0=1;
EA=1;
TR0=1;
TR1=1;
p3_5=1;
}
//--------------------------------------------------------------------
void time_up() interrupt 1 using 3
{
TH0=0x3c;
TL0=0xb0;
if(++i==gate)
{
TR1=0;
temp_l=TL1;
temp_h=TH1;
TH1=0;
TL1=0;
i=0;
TR1=1;
}
}
//--------------------------------------------------------------------
void sel_x(uchar x) //74HC390 分频系数选择1,10,100
{
switch(x)
{
case 1:
{
sel_1=1;
sel_10=0;
sel_100=0;
break;
}
case 10:
{
sel_1=0;
sel_10=1;
sel_100=0;
break;
}
case 100:
{
sel_1=0;
sel_10=0;
sel_100=1;
break;
}
default:
break;
}
}
//--------------------------------------------------------------------
void temp_to_tempx(uint temp)
{
temp0=temp/10000;
temp1=(temp-(temp0*10000))/1000;
temp2=(temp-(temp0*10000)-(temp1*1000))/100;
temp3=(temp-(temp0*10000)-(temp1*1000)-(temp2*100))/10;
temp4=temp%10;
}
//--------------------------------------------------------------------
void dis_mod(unsigned long temp,uchar point,uchar danwei)
{
uchar danwei_t;
temp_to_tempx(temp);
dis_one_zi(0,0,x7,1,1);//频
dis_one_zi(0,1,x8,1,1);//率
dis_one_char(0,11,0x7f,0);
dis_one_char(0,12,danwei,1);
dis_one_char(0,13,'H',1);
dis_one_char(0,14,'z',1);
dis_one_char(0,15,0x7f,0);
dis_one_char(0,4,0x7f,0);
if(temp0!=0)
{
dis_one_char(0,5,temp0+0x30,1);
clr_flag0=0;
}
else
dis_one_char(0,5,0x7f,0);
clr_flag0=1;
dis_one_char(0,10,temp4+0x30,1);
dis_one_char(0,9,temp3+0x30,1);
switch (point)
{
case 0:
{
dis_one_char(0,5,temp0+0x30,1);
dis_one_char(0,6,'.',1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -