📄 200632153848.c
字号:
#include <c8051f020.h>
#include <intrins.h>
#include <math.h>
#include <float.h>
#include <stdio.h>
//
sfr16 ADC0=0xbe;
sfr16 TMR3=0x94;
sfr16 TMR3RL=0x92;
//
#define SYSCLK 22118400
#define BAUDRATE 9600
#define SAMPLERATE0 5000
#define VREF0 2430
sbit LCD_DATA=P0^0;
sbit LCD_BUSY=P0^1;
#define key0 0xfe
#define key1 0xfd
#define key2 0xfb
#define key3 0xf7
#define key4 0xef
//
void sysclk_init(void);
void port_init(void);
void uart0_init(void);
void adc0_init(void);
void timer3_init(unsigned int count);
void adc0_isr(void);
void lcd_init(void);
void send(unsigned char sj);
void lcd_setcoordinate(unsigned int start_x,unsigned int start_y);
void delay100us(unsigned char count);
void Timer0_Delay (int ms);
unsigned char kbscan(void);
void lcd_cursor(void);
void DAC0_transition(long value);
void display_time_data(void);
void lcd_clr(unsigned int start_x,unsigned int start_y,unsigned int end_x,unsigned int end_y,unsigned char black);
void lcd_line(unsigned int start_x,unsigned int start_y,unsigned int end_x,unsigned int end_y);
//
long result[2];
unsigned char menu_down_line;
unsigned int second=0,second_h,second_l,minute=0,minute_h,minute_l,hour=0,hour_h,hour_l,s=0;
void main()
{
unsigned char key;
long v,v_h,v_l,temperature;
int t_h,t_l,temp_frac,temp_int,tf_h,tf_l;
WDTCN=0xde;
WDTCN=0xad;
sysclk_init();
port_init();
uart0_init();
timer3_init(SYSCLK/SAMPLERATE0);
adc0_init();
lcd_init();
EA=1;
AD0EN=1;
delay100us(100);
menu_down_line=0;
lcd_line(15,5,315,5);
lcd_line(15,5,15,35);
lcd_line(15,35,315,35);
lcd_line(315,5,315,35);
lcd_line(15+60,5,15+60,35);
lcd_line(15+120,5,15+120,35);
lcd_line(15+180,5,15+180,35);
lcd_line(15+240,5,15+240,35);
lcd_setcoordinate(17,9);
send(0x42);
send(0x44);//
lcd_setcoordinate(17+60,9);
send(0x96);
send(0x97);//显示“报警”
lcd_setcoordinate(17+120,9);
send(0x54);
send(0x49);//
send(0x4d);
send(0x45);
lcd_setcoordinate(17+180,9);
send(0x80);
send(0x8f);//
lcd_setcoordinate(17+240,9);
send(0x8a);
send(0x8b); //
while(1)
{
EA=0;
v=result[0];
v=v/2;
EA=1;
DAC0_transition(result);
v=v*VREF0;
v=v>>16;
v=v/10;
v_h=v/10;
v_l=v%10;
send(0x1b);
send(0x6a);
send(0xb0);
send(0x96);
send(0x00);
send(0xa0);
send(0x01);
send(0x10);
send(0x00);
send(0xbe);
lcd_setcoordinate(151,161);
send(0x9b);
send(0x9c);
send(0x30+v_h);
send(0x30+v_l);
lcd_clr(200,160,270,190);
send(0x30+hour_h);
send(0x30+hour_l);
send(0x3a);
send(0x30+minute_h);
send(0x30+minute_l);
delay100us(100);
EA=0;
temperature=result[1];
EA=1;
lcd_setcoordinate(56,87);
lcd_clr(55,86,95,126);
temperature = temperature - 41380;
temperature = (temperature * 100l) / 156;
temp_int = temperature / 100;
temp_frac = temperature - (temp_int * 100);
t_h=temp_int/10;
t_l=temp_int%10;
tf_h=temp_frac/10;
tf_l=temp_frac%10;
send(0x30+t_h);
send(0x30+t_l);
send(0x30+tf_h);
send(0x30+tf_l);
key=kbscan();
{if(key!=0)
{
switch(key)
{
case key1:
if(menu_down_line<5)
{
menu_down_line=menu_down_line+1;
lcd_setcoordinate(17+60*menu_down_line,9);
lcd_cursor();
}
else
{menu_down_line=0;
lcd_setcoordinate(17,9);
lcd_cursor();
}
break;
case key0:
lcd_setcoordinate(125,87);
lcd_cursor();
send(0x31);
break;
case key2:
if(menu_down_line==0)
{
lcd_clr(15,35,75,65);
lcd_setcoordinate(17,39);
send(0x94);
send(0x95);
send(0x31);
send(0x3a);
send(0x32);
delay100us(100);
lcd_clr(15,65,75,95);
lcd_setcoordinate(17,69);
send(0x94);
send(0x95);
send(0x32);
send(0x3a);
send(0x34);
}
else if(menu_down_line==1)
{
lcd_clr(75,35,135,65);
lcd_setcoordinate(77,39);
send(0x56);
send(0x68);
send(0x3c);
send(0x35);
delay100us(100);
lcd_clr(75,65,135,95);
lcd_setcoordinate(77,69);
send(0x56);
send(0x6c);
send(0x3c);
send(0x30);
}
else if(menu_down_line==2)
{
lcd_clr(135,35,195,65);
lcd_setcoordinate(137,39);
display_time_data();
}
else if(menu_down_line==3)
{
lcd_clr(195,35,255,65);
lcd_setcoordinate(197,39);
send(0xea);
}
else if(menu_down_line==4)
{
lcd_clr(255,35,315,65);
lcd_setcoordinate(257,39);
send(0x30+t_h);
send(0x30+t_l);
send(0x30+tf_h);
send(0x30+tf_l);
}
break;
case key3:
send(0x1b);
send(0x51);
send(0x00);
lcd_line(15,5,315,5);
lcd_line(15,5,15,35);
lcd_line(15,35,315,35);
lcd_line(315,5,315,35);
lcd_line(15+60,5,15+60,35);
lcd_line(15+120,5,15+120,35);
lcd_line(15+180,5,15+180,35);
lcd_line(15+240,5,15+240,35);
lcd_setcoordinate(17,9);
send(0x94);
send(0x95);//
lcd_setcoordinate(17+60,9);
send(0x96);
send(0x97);//显示“报警”
lcd_setcoordinate(17+120,9);
send(0x98);
send(0x99);//
lcd_setcoordinate(17+180,9);
send(0x8e);
send(0x8f);//
lcd_setcoordinate(17+240,9);
send(0x8a);
send(0x8b); //
break;
case key4:
lcd_setcoordinate(125,87);
lcd_cursor();
send(0x34);
break;
}
}
else
while(key);
}
}
}
void sysclk_init(void)
{
unsigned int i;
OSCXCN=0x67;
for(i=0;i<256;i++);
while(!(OSCXCN&0x80));
OSCICN=0x88;
}
void port_init(void)
{
XBR0=0x04;
XBR1=0x00;
XBR2=0x40;
P0MDOUT=0x01;
}
void uart0_init(void)
{
SCON0=0xd0;
TCON=0x40;
TMOD=0x20;
TH1=-(SYSCLK/BAUDRATE/16);
TR1=1;
CKCON=0x10;
PCON=0x80;
TI0=0;
}
void adc0_init(void)
{
ADC0CN=0x45;
ADC0CF=(SYSCLK/2500000)<<3;
ADC0CF |= 0x01;
REF0CN=0x07;
AMX0CF=0x00;
AMX0SL=0x00;
EIE2 |= 0x02; // 允许ADC中断
}
void timer3_init(unsigned int count)
{
TMR3CN=0x02;
TMR3RL=-count;
TMR3=0xffff;
EIE2=0x00; // 禁止定时器3中断
TMR3CN=0x04;
}
void adc0_isr(void) interrupt 15
{
while(!AD0INT);
AD0INT=0;
if(AMX0SL==0)
{
result[0]=ADC0;
AMX0SL=8;
}
else
{result[1]=ADC0;
AMX0SL=0;
}
}
void lcd_init(void)
{
send(0x1b);
send(0x51);
send(0x00);
send(0x1b);
send(0x33);
send(0x1b);
send(0x66);
send(0x04);
}
void send(unsigned char sj)
{
while(LCD_BUSY);
SBUF0=sj;
while(!TI0);
TI0=0;
}
void lcd_setcoordinate(unsigned int start_x,unsigned int start_y)
{
unsigned char lyb_ls=0;
send(0x1b);
send(0x7a);
lyb_ls=start_x/256;
send(lyb_ls);
send(start_x-lyb_ls);
lyb_ls=start_y/256;
send(lyb_ls);
send(start_y-lyb_ls);
}
void delay100us(unsigned char count)
{
unsigned char i,j,k;
for(k=0;k<count;k++)
{
for(i=0;i<5;i++)
{
for(j=0;j<86;j++);
}
}
}
unsigned char kbscan(void)
{
P1=0xff;
if((P1&0xff)!=0xff)
{
delay100us(50);
if((P1&0xff)!=0xff)
{
return(P1&0xff);
}
}
else
{
return(0);
}
}
void lcd_cursor(void)
{
send(0x1b);
send(0x74);
send(0x18);
send(0x18);
send(0xff);
send(0x7e);
send(0x3c);
send(0x18);
}
void lcd_line(unsigned int start_x,unsigned int start_y,unsigned int end_x,unsigned int end_y)
{
unsigned char lyb_ls=0;
send(0x1b);
send(0x78);
lyb_ls=start_x/256;
send(lyb_ls);
send(start_x-lyb_ls);
lyb_ls=start_y/256;
send(lyb_ls);
send(start_y-lyb_ls);
lyb_ls=end_x/256;
send(lyb_ls);
send(end_x-lyb_ls);
lyb_ls=end_y/256;
send(lyb_ls);
send(end_y-lyb_ls);
}
void lcd_clr(unsigned int start_x,unsigned int start_y,unsigned int end_x,unsigned int end_y,unsigned char black)
{
unsigned char lyb_ls=0;
send(0x1b);
send(0x6a);
lyb_ls=start_x/256;
if(black)
send(lyb_ls+0x80);
else
send(lyb_ls+0xf0);
send(start_x-lyb_ls);
lyb_ls=start_y/256;
send(lyb_ls+4);
send(start_y-lyb_ls);
lyb_ls=end_x/256;
send(lyb_ls);
send(end_x-lyb_ls);
lyb_ls=end_y/256;
send(lyb_ls);
send(end_y-lyb_ls);
delay100us(200);
}
void DAC0_transition(long value)
{
unsigned char temp_h,temp_l;
DAC0CN = 0x84; //
temp_h = value/256;
temp_l = value%256;
DAC0L = temp_l;
DAC0H = temp_h;
}
void display_time_data(void)
{
for(s=0;s<100;s++)
{
delay100us(100);
s=s+1;
}
if(second<59) second=second+1;
else second=0;
second_h=second/10;
second_l=second%10;
send(0x1b);
send(0x33);
send(0x30+second_h);
send(0x30+second_l);
if(second==0)
{
if(minute<59) minute=minute+1;
else minute=0;
minute_h=minute/10;
minute_l=minute%10;
lcd_clr(90,50,120,80);
send(0x30+minute_h);
send(0x30+minute_l);
if(minute==0)
{
if(hour<24)hour=hour+1;
else hour=0;
hour_h=hour/10;
hour_l=hour%10;
lcd_clr(60,50,90,80);
send(0x30+hour_h);
send(0x30+hour_l);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -