?? aa.#2
字號:
#include "c8051f020.h"
#include <math.h>
sfr16 ADC0 = 0xBE;
sfr16 DAC0 = 0xD2;
sfr16 DAC1 = 0xD5;
sfr16 RCAP2 = 0xCA;
sfr16 T2 = 0xCC;
sfr16 T0 = 0x8A;
sbit LEDA = P1^2;
sbit LCDRST = P1^1;
sbit RW = P0^7;
sbit LCDEN = P1^3;
sbit LCDRS = P1^0;
sbit DB0 = P3^0;
sbit DB1 = P3^1;
sbit DB2 = P3^2;
sbit DB3 = P3^3;
sbit DB4 = P3^4;
sbit DB5 = P3^5;
sbit DB6 = P3^6;
sbit DB7 = P3^7;
#define uchar unsigned char
#define uint unsigned int
#define x1 0x80
#define x2 0x88
#define y 0x80
#define comm 0
#define dat 1
#define AD_VALUE_MAX 5035 // 5V
#define AD_COUNT_MAX 20 // 20*4.9ms =1s
#define DA_VALUE_MAX1 9990 // 10.02V
#define DA_VALUE_MAX2 9940 // 9.97V
#define DA_VALUE_ONE 4096/1000 // DA_VALUE_MAX/10
#define PWM_VALUE_MAX1 10000 // 100%
#define PWM_VALUE_MAX2 5000 // 5V
#define LCD_COUNT_LEVEL1 1000 //
#define LCD_COUNT_LEVEL2 1000 //
#define N_Hz 128 //畫圖采樣個數
void config (void);
void global_var(void);
void show_init (void);
void chk_busy (void);
void init_lcd (void);
void wr_lcd (uchar dat_comm,uchar content);
void fys(uchar code *tab) ;
void delay1 (uint ms);
void delay (uint ms);
void t0_init(void);
void img_disp1 (uchar *img);
void ad_convert1(void);
void clrram (void);
void lat_disp (uchar data1,uchar data2);
void chn_disp1 (uchar code *chn);
void DispConvert(void);
void comparation(void);
void t0_inter_handle(void);
void cp0(void);
uchar xdata lcd_count;
uchar xdata key_num;
uchar xdata num;
uint xdata key_count;
uchar xdata key_flag;
uchar xdata states_flag;
float xdata ad_add;
uchar xdata ad_count;
float xdata ad_until;
uchar xdata ad_flag;
float xdata da_value1;
float xdata da_value2;
float xdata da_count;
int xdata pwm_count;
uint xdata pwm1_save;
uint xdata pwm2_save;
uint xdata pwm_level; // 0x7FFF表示占空比為50%
int xdata pwm_count_save1;
int xdata pwm_count_save2;
unsigned long xdata cp0_count;
uchar xdata t0_count;
int drawing_flag ;
int low_freq;
int xdata ad_init_flag;
uint xdata N_Hz_Count = 0;
uchar code tab0[]=
{
"吳耘要滅了風雨聲"
" "
"祁高瞻是煞筆 "
" "
};
uchar code tab2[]=
{
"周期為 "
"電壓有效值為 "
};
uchar xdata tab3[128];
uchar xdata tab1[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
float n = 0.00;
int x = 0x00;
int yy = 0x00;
/*void t0_inter(void) interrupt 1
{
{
EA = 0;
TH0 = 0xfc;
TL0 = 0x17;
}
n++;
EA = 1;
TF0 = 0;
}
yy = 3;
}
*/
void cp0_up_inter (void) interrupt 11
{
cp0_count ++ ;
CPT0CN &=0xDF; //清上升中斷標志位CP0RIF
}
void ad_inter (void) interrupt 15
{
// float xdata m;
uint xdata i;
uint xdata b;
float xdata m;
// uchar xdata gew,shi,bai,qian;
if(n == 128) //////數據處理時關中斷不會影響采樣
{n = 0;
x = 0;
}
i = ADC0;
m = i;
m = m/4096.0;
m *= 100;
//////////////////////////////////
if(N_Hz_Count <= 128)
{
b = (int)m;
tab3[N_Hz_Count] = (int)m;
N_Hz_Count++;
}
/////////////////////////////////
/*
m = (float)i;
if (ad_flag==0)
{
ad_add = ad_add + m;
if (ad_count==AD_COUNT_MAX)
{m=ad_add/AD_COUNT_MAX;
ad_count= 0;
ad_add= 0;
ad_until=m;
}
else m=ad_until;
}
if (ad_flag==1)
{
ad_flag=0;
ad_until=m;
}
m = m/4096.0;
m *= AD_VALUE_MAX;
i = (int)m;
ad_count++;
qian = i/1000;
bai = (i-qian*1000)/100;
shi = (i-qian*1000-bai*100)/10;
gew = i-qian*1000-bai*100-shi*10;
if(x < 16)
{ int f;
yy = 16-((float)(qian*10+bai))/50*16;
f = (int)n%8;
switch (f)
{case 0: tab1[16*yy+x] += 0x80;break;
case 1: tab1[16*yy+x] += 0x40;break;
case 2: tab1[16*yy+x] += 0x20;break;
case 3: tab1[16*yy+x] += 0x10;break;
case 4: tab1[16*yy+x] += 0x08;break;
case 5: tab1[16*yy+x] += 0x04;break;
case 6: tab1[16*yy+x] += 0x02;break;
case 7: tab1[16*yy+x] += 0x01;x++;break;
}
}
n++;
*/
/*if (gew >= 4 && gew <=9)
{
gew=0;
shi++;
if shi=
if (shi == 0) bai++;
if (bai == 0) qian++;
}*/
/*
qian += 0xB0;
bai += 0xB0;
shi += 0xB0;
gew += 0xB0;
wr_lcd (comm,0x30);
wr_lcd (comm,0x0C);
wr_lcd (comm,0x89);
wr_lcd (dat,0xA3);
wr_lcd (dat,qian);
wr_lcd (comm,0x8B);
wr_lcd (dat,0xA3);
wr_lcd (dat,bai);
wr_lcd (dat,0xA3);
wr_lcd (dat,shi);
//wr_lcd (dat,gew);
*/
AD0INT = 0;
}
void main(void)
{int a,b;
SP = 0x7f;
config();
init_lcd ();
show_init();
//t0_init();
comparation();////開了t0和cp0
drawing_flag = 0; //畫圖或采樣標志
ad_init_flag = 1; //判斷要不要初始化AD,也就是說要不要調整采樣周期
while(1)
{ if(drawing_flag == 0)
{ cp0(); ////////先采樣,采樣結束后關cp0和T0;注意此時TF0為1
if(TF0 == 0)
continue;
if(TF0 == 1)
{drawing_flag = 1;
TF0 = 0; //////T0仍然未啟動
}
}
if(cp0_count > 300)
low_freq = 0;
else
low_freq = 1;
if(ad_init_flag == 1)
{
ad_convert1(); /////啟動ad準備采樣,并確定完采樣周期,開始采樣
}
if(N_Hz_Count > 128)
{
DispConvert();
if(x == 16 )
{EA = 0;
//init_lcd ();
//clrram();
lat_disp (0x00,0x00);
chn_disp1 (tab2); //////上半屏顯示中文
img_disp1 (tab1); //////下半屏顯示圖形
//delay1(200);
for(a=0;a<16;a++) ////////////清除記錄圖形的tab1
for(b=0;b<32;b++)
tab1[a+b*16]=0x00;
N_Hz_Count = 0;
TR0 = 1; //開定時器T0
EIE2 &= ~0x02 ; //關AD中斷
CPT0CN |=0x80;//開比較器
drawing_flag = 0;
ad_init_flag = 1;
EA = 1;
}
}
}
} //main的括號
void cp0(void)
{
if (TF0==1)
{
//t0_count --;
//if (t0_count == 0)
//{
EA = 0;
CPT0CN &=0x7F; //關比較器
TR0=0; //關定時器T0
t0_inter_handle();
t0_count = 25;
cp0_count= 0;
TL0 = 0xAB;
TH0 = 0x2F;
//TR0 = 1;
//CPT0CN |=0x80; //開比較器
//TF0 = 0;
EA = 1;
//}
//TL0 =0xAB; // 1/16M*12*53333=40ms 即T0 40MS中斷一次
//TH0 =0x19;
}
}
void t0_inter_handle(void)
{
uint i,j;
uchar qian,bai,shi,gew,dian_bai,dian_shi,dian_gew;
cp0_count *= 25;
i = cp0_count/1000;
j = cp0_count%1000;
qian = i/1000;
bai = (i-qian*1000)/100;
shi = (i-qian*1000-bai*100)/10;
gew = i%10;
dian_bai = j/100;
dian_shi = (j-dian_bai*100)/10;
dian_gew = j%10;
qian += 0xB0;
bai += 0xB0;
shi += 0xB0;
gew += 0xB0;
dian_bai += 0xB0;
dian_shi += 0xB0;
dian_gew += 0xB0;
wr_lcd (comm,0x30);
wr_lcd (comm,0x0C);
wr_lcd (comm,0x88);
if (qian==0xB0)
{
wr_lcd (dat,0x20);wr_lcd (dat,0x20);
if (bai==0xB0)
{
wr_lcd (dat,0x20);wr_lcd (dat,0x20);
if (shi==0xB0){wr_lcd (dat,0x20);wr_lcd (dat,0x20);} //隱藏數字
else {wr_lcd (dat,0xA3);wr_lcd (dat,shi);}
}
else
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -