📄 aa.#2
字号:
{
wr_lcd (dat,0xA3);wr_lcd (dat,bai);
wr_lcd (dat,0xA3);wr_lcd (dat,shi);
}
}
else
{
wr_lcd (dat,0xA3);
wr_lcd (dat,qian);
wr_lcd (dat,0xA3);
wr_lcd (dat,bai);
wr_lcd (dat,0xA3);
wr_lcd (dat,shi);
}
wr_lcd (dat,0xA3);
wr_lcd (dat,gew);
wr_lcd (comm,0x8D);
wr_lcd (dat,0xA3);
wr_lcd (dat,dian_bai);
wr_lcd (dat,0xA3);
wr_lcd (dat,dian_shi);
wr_lcd (dat,0xA3);
wr_lcd (dat,dian_gew);
}
void show_init (void)
{
LEDA=1;
fys(tab0);
delay(1000);
}
/*void t0_init(void)
{
CKCON = 0x00;
TCON = 0x01;
TH0 = 0xfc;
TL0 = 0x17;
EA = 1;
TR0 = 1;
ET0 = 1;
;
}
*/
void chn_disp1 (uchar code *chn)
{
uchar i,j;
wr_lcd (comm,0x30);
wr_lcd (comm,0x80);
j=0;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
wr_lcd (comm,0x90);
j=1;
for (i=0;i<16;i++)
wr_lcd (dat,chn[j*16+i]);
}
void img_disp1 (uchar *img)
{
uchar i,j;
for(i=0;i<8;i++)
{
for(j=0;j<32;j++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j);
wr_lcd (comm,x2+i);
wr_lcd (comm,0x30);
wr_lcd (dat,img[j*16+i*2]);
wr_lcd (dat,img[j*16+i*2+1]);
wr_lcd (comm,0x36);
delay1(500);
}
// wr_lcd (comm,0x36);
}
// wr_lcd (comm,0x36);
// wr_lcd (comm,0x34); ////////////////////////////////////////////////////////////////////////////////////////////
}
void fys(uchar code *tab)
{
uchar n;
wr_lcd (comm,0x30);
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
for(n=0;n<64;n++)
{
wr_lcd (dat,*(tab+n));
}
n=0;
}
void chk_busy (void)
{
LCDRS = 0;
delay1(2);
RW =1;
delay1(2);
LCDEN = 1;
delay1(2);
P3=0xff;
while(DB7==1);
LCDEN=0;
delay1(2);
}
void wr_lcd (uchar dat_comm,uchar content)
{
chk_busy ();
if(dat_comm)
{
LCDRS=1; //data
delay1(2);
RW=0; //write
delay1(2);
}
else
{
LCDRS=0; //command
delay1(2);
RW=0; //write
delay1(2);
}
P3=content; //output data or comm
LCDEN=1;
delay1(2);
;
// chk_busy ();
LCDEN=0;
delay1(2);
}
void init_lcd (void)
{
LEDA = 1;
LCDRST=1;
delay1(2);
wr_lcd (comm,0x30); /*30---基本指令动作*/
wr_lcd (comm,0x01); /*清屏,地址指针指向00H*/
wr_lcd (comm,0x06); /*光标的移动方向*/
wr_lcd (comm,0x0C); /*开显示,关游标*/
}
void clrram (void)
{
wr_lcd (comm,0x30);
wr_lcd (comm,0x01);
}
void lat_disp (uchar data1,uchar data2)
{
uchar i,j,x;//k,x;
x=x1;
//for(k=0;k<2;k++)
//{
for(j=0;j<16;j++)
{
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data1);
wr_lcd (dat,data1);
}
for(i=0;i<8;i++)
{
wr_lcd (comm,0x34);
wr_lcd (comm,y+j*2+1);
wr_lcd (comm,x+i);
wr_lcd (comm,0x30);
wr_lcd (dat,data2);
wr_lcd (dat,data2);
}
}
//x=x2;
// }
wr_lcd (comm,0x36);
}
void delay (uint us) //delay time
{
while(us--);
}
void delay1 (uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<15;j++)
delay(1);
}
void ad_convert1(void)
{ad_until=0;
ad_count = 0;
ad_add= 0;
ad_flag= 1;
EA = 0;
CKCON = 0x00; //0x00时T2时钟为系统时钟的12分频,0x02时为系统时钟.
AMX0SL = 0x01; // AMUX Channel Select Register
AMX0CF = 0x00; // AMUX Configuration Register
ADC0CN = 0xCC; // ADC Control Register
//TH2 = 0x00;
//TL2 = 0x00;
//TH2 = 0x3C;
//TL2 = 0xB0; // T2要计数50000次才会溢出.
//T2 = 65465; //最大溢出一次的时间:(1/16M)*12*65536=49.152ms 现在是70*0.75=50us
if(low_freq == 1)
{T2 = 65465;
RCAP2 = 65465;
}
else if(low_freq == 0)
{T2 = 0xffff-(int)((129/((double)cp0_count*128))/(49.152))*0xffff;
RCAP2=0xffff-(int)((129/((double)cp0_count*128))/(49.152))*0xffff; //自动重装值为0x0000 溢出一次计65536次
}
CT2 = 0;
CPRL2 = 0;
EXEN2 = 1;
EIE2 |=0x02;
TR2 = 1;
EA = 1;
ad_init_flag = 0; ///
}
void comparation(void)
{
t0_count = 25; //25次为1S
cp0_count = 0;
CKCON &= 0xF7; // T0用16M/12时钟
TCON = 0x00; //关所有使能
TMOD = 0x01;
TL0 =0xAB ; // 1/16M*12*53333=40ms 即T0 40MS中断一次
TH0 =0x2F;
EIE1 = 0x20; //只开比较器0上升沿中断
IE &= ~0x02; //关T0中断
TR0 = 1 ; //开定时器T0
CPT0CN = 0x8F; //开比较器0使能
EA = 1;
}
void DispConvert(void)
{
float xdata m;
//uint xdata i;
uchar xdata gew,shi,bai,qian;
uint a ; //tab2输出计数
CPT0CN |=0x80; //开比较器
for(a=0;a<128;a++)
{
m = (float)tab3[a];
/* 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;
}
*/
// i = (int)m;
// ad_count++;
m = m/100;
m *= AD_VALUE_MAX;
qian = m/1000;
bai = (m-qian*1000)/100;
shi = (m-qian*1000-bai*100)/10;
gew = m-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);
*/
}
}
void config (void)
{
uchar data i;
EA = 0; // disable watchdog timer
WDTCN = 0xDE;
WDTCN = 0xAD;
OSCXCN = 0x00; // EXTERNAL Oscillator Control Register
OSCICN = 0x07; // Internal Oscillator Control Register 16M
EMI0CF = 0x03; // External Memory Configuration Register
EMI0TC = 0x03; // External Memory CLOCK
EMI0CN = 0x00; // External Memory HIGHT BYTE
XBR0 = 0x94; // XBAR0: Initial Reset Value
XBR1 = 0x00; // XBAR1: Initial Reset Value
XBR2 = 0x42; // XBAR2: Initial Reset Value
P0MDOUT = 0x00; // Output configuration for P0
P1MDOUT = 0x00; // Output configuration for P1
P2MDOUT = 0x00; // Output configuration for P2
P3MDOUT = 0x00; // Output configuration for P3
P1MDIN = 0xFF; // Input configuration for P1
CPT0CN = 0x00; // Comparator 0 Control Register
for(i = 0; i < 10; i++); CPT0CN &= ~0x30; //clear interrupt pending flags
REF0CN = 0x03; // Reference Control Register
DAC0CN = 0x00; // DAC0 Control Register
DAC0L = 0x00; // DAC0 Low Byte Register
DAC0H = 0x00; // DAC0 High Byte Register
DAC1CN = 0x00; // DAC1 Control Register
DAC1L = 0x00; // DAC1 Low Byte Register
DAC1H = 0x00; // DAC1 High Byte Register
PCA0MD = 0x08; // PCA Mode Register
PCA0CN = 0x00; // PCA Control Register
PCA0H = 0x00; // PCA Counter/Timer High Byte
PCA0L = 0x00; // PCA Counter/Timer Low Byte
//Module 0
PCA0CPM0 = 0xC3; // PCA Capture/Compare Register 0
PCA0CPL0 = 0xFF; // PCA Counter/Timer Low Byte
PCA0CPH0 = 0x00; // PCA Counter/Timer High Byte
//Module 1
PCA0CPM1 = 0xC3; // PCA Capture/Compare Register 1
PCA0CPL1 = 0xFF; // PCA Counter/Timer Low Byte
PCA0CPH1 = 0x00; // PCA Counter/Timer High Byte
AMX0CF = 0x60; // AMUX Configuration Register
//AMX0SL = 0x00; // AMUX Channel Select Register
ADC0CF = 0x38; // ADC Configuration Register
ADC0CN = 0x00; // ADC Control Register
ADC0LTH = 0x00; // ADC Less-Than High Byte Register
ADC0LTL = 0x00; // ADC Less-Than Low Byte Register
ADC0GTH = 0xFF; // ADC Greater-Than High Byte Register
ADC0GTL = 0xFF; // ADC Greater-Than Low Byte Register
IE = 0x00; //Interrupt Enable
IP = 0x00; //Interrupt Priority
EIE1 = 0x08; //Extended Interrupt Enable 1
EIE2 = 0x00; //Extended Interrupt Enable 2
EIP1 = 0x00; //Extended Interrupt Priority 1
EIP2 = 0x00; //Extended Interrupt Priority 2
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -