📄 main.c
字号:
//uchar channel_temp;
// channel_temp=channel;
// do{ADCON0|=0x08;}while(channel_temp--); //设置对应通道的寄存器
// ad_init(); //A/D初始化
switch(channel_temp)
{
case 1:ADCON0=0x49;break; //RA1通道输入
case 2:ADCON0=0x51;break; //RA2
case 3:ADCON0=0x59;break; //RA3
case 4:ADCON0=0x61;break; //RA5
case 5:ADCON0=0x69;break; //RE0
}
ADGO=1;
do{;}while(1==ADGO);
ad_date=ADRESH;
date_temp1=ad_date<<2;
date_temp1|=ADRESL;
date_temp1=date_temp1*5;
date_temp2=(float)date_temp1; //转换成FLOAT型
date_temp2/=1024; //转换成电压
date_temp1=(int)(date_temp2*100); //转换成整形
ad_key_init(); //结束时把AD通道还给键盘
return date_temp1;
}
//***************数据显示*********************
void date_display(uint temp)
{
//uchar temp1[]="The voltage is: ";
// uchar temp2[]="Alarm value: ";
//uchar temp3[]=" ";
// uchar temp4[]="low ";
// uchar temp5[]="high ";
//temp=get_date();
if(2==set)
LCD_DisplayString(1,1,date_display_temp1); //显示"The voltage is: "
if(3==set) //报警值设置
LCD_DisplayString(1,1,date_display_temp2); //显示""Alarm value: "
LCD_WriteControl(0xc0); //起始地址
LCD_DisplayCharacter(channel+0x30); //显示路数
if(2==set)
// LCD_DisplayString(2,2,date_display_temp3);
if(auto_mode==0)
{
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
}
else
{
LCD_DisplayCharacter('A');
LCD_DisplayCharacter('U');
LCD_DisplayCharacter('T');
LCD_DisplayCharacter('O');
LCD_DisplayCharacter(' ');
}
if(3==set)
{
if(0==gao)
//LCD_DisplayString(2,2,date_display_temp4);//显示“low”
{
LCD_DisplayCharacter('l');
LCD_DisplayCharacter('o');
LCD_DisplayCharacter('w');
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
}
if(1==gao)
//LCD_DisplayString(2,2,date_display_temp5);//显示"high"
{
LCD_DisplayCharacter('h'); //显示“low”
LCD_DisplayCharacter('i');
LCD_DisplayCharacter('g');
LCD_DisplayCharacter('h');
LCD_DisplayCharacter(' ');
}
}
//LCD_WriteControl(0xc0); //起始地址
LCD_DisplayCharacter(temp/100+0x30);
LCD_DisplayCharacter('.');
LCD_DisplayCharacter(temp%100/10+0x30);
LCD_DisplayCharacter(temp%100%10+0x30);
LCD_DisplayCharacter('V');
LCD_DisplayCharacter(' ');
}
//**************功能键*******************
void set_key()
{
uint temp; //送数据显示的暂时变量
if(0==set){shift=0; time_display();} //初始状态,显示时间
if((1==set)||(0==set)) {time_seting(); time_display();} //功能键按一次,进入时间校准模式
if(2==set) { temp=get_date(channel);date_display(temp);}//显示电压值
if(3==set)
{
if(0==gao) temp=low[channel-1];
if(1==gao) temp=high[channel-1];
date_display(temp);
}
}
//************左移键/手动模式*************
void left_key() //
{
if(1==set)
{shift--;
if(shift<1) shift=6;
}
if(2==set) auto_mode=0; //设定为手动模式
if(3==set) {gao=gao+1;if(gao>1)gao=0;} //对高低位进行报警设置
}
//************右移键/自动模式*************
void right_key()
{
if(1==set)
{
shift++;
if(shift>6)shift=1;
}
if(2==set)auto_mode=1; //设为自动模式
if(3==set){channel++;if(channel>5)channel=1;}//对要报警的路数进行选择设置
}
//********加键****************
void add_key()
{
if(1==set)add=1;
if((2==set)&&(auto_mode==0)){channel++;if(channel>5)channel=1;}
if(3==set)
{
if(0==gao) //对低位进行报警设置
{
low[channel-1]++;
if(low[channel-1]>375) low[channel-1]=250; //低报警值为上限为3.75V
}
if(gao==1)
{
high[channel-1]++;
if(high[channel-1]>500)high[channel-1]=375; //高报警值下限为3.75V
}
}
}
//*********减键******************
void reduce_key()
{
if(1==set)reduce=1;
if((2==set)&&(auto_mode==0)){channel--;if(channel<1)channel=5;}
if(3==set)
{
if(0==gao)
{
low[channel-1]--;
if(low[channel-1]<250)low[channel-1]=375; //低报警值下限为2.50V
}
if(1==gao)
{
high[channel-1]--;
if(high[channel-1]<375)high[channel-1]=490; //高报警值上限为5.00V
}
}
}
//*************报警子函数*****************
void alarm()
{
uchar channel_i; //AD通道变量,仅用于报警
if(set!=3) //在报警设置时不具备报警功能
{
for(channel_i=1;channel_i<=5;channel_i++)
{
if(get_date(channel_i)>=high[channel_i-1]) //超过上限
{
LCD_WriteControl(0xce); //起始地址
LCD_DisplayCharacter(channel_i+0x30); //显示第几路报警
LCD_DisplayCharacter('H');
PORTB=0x01<<(channel_i-1);
}
if(get_date(channel_i)<=low[channel_i-1]) //超过上限
{
LCD_WriteControl(0xce); //起始地址
LCD_DisplayCharacter(channel_i+0x30); //显示第几路报警
LCD_DisplayCharacter('L');
PORTB=0x01<<(channel_i-1);
}
}
if(auto_count==1) //过1秒后情显示
{
LCD_WriteControl(0xce);
LCD_DisplayCharacter(' ');
LCD_DisplayCharacter(' ');
PORTB=0x00;
}
}
}
//************获取PC传输的数据*********************
uchar get_usart_date()
{
uchar usart_date_temp;
do{;}while(RCIF==0);
RCIF=0;
usart_date_temp=RCREG;
return usart_date_temp;
}
//*********************************
//通过USART向PC发送数据
void send_usart_date(uchar send_temp)
{
TXREG=send_temp;
do{;}while(0==TXIF);
TXIF=0;
}
//***********通过USART发送字符串*****************
void send_pc_string(const uchar *string_temp)
{
while('\0'!=*string_temp)
{
// if(*string_temp=='\n')send_usart_date('\r'); //如果出现换行,则回车
send_usart_date(*string_temp);
string_temp++;
}
}
//****************************
void pc_read()
{
uchar i;
uchar channel_pc; //定义PC可设置的通道变量
uchar channel_i;
// if(get_usart_date()=='1') //
if(4==set)
{
LCD_Clear();
LCD_DisplayString(1,4,test3);
//pc_link_ready=1;
//send_pc_string("Data reading..."); //PC与单片机建立连接
//send_usart_date('\r');
// send_usart_date('\n'); //换行回车
for(channel_i=1;channel_i<=5;channel_i++)
{
send_usart_date(channel_i+0x30);
send_usart_date(' ');
send_usart_date(get_date(channel_i)/100+0x30);
send_usart_date('.');
send_usart_date((get_date(channel_i)%100)/10+0x30);
send_usart_date((get_date(channel_i)%100)%10+0x30);
send_usart_date('V');
send_usart_date(' ');
send_usart_date(' ');
// if(channel_i!=5)
// {send_usart_date('\r');
// send_usart_date('\n'); //换行回车
//}
}
for(i=0;i<49;i++)
{
send_usart_date('\r');
send_usart_date('\n'); //换行回车
}
}
// if(get_usart_date()=='/')
// {
// pc_link_ready=0; //PC与单片机建立连接
// send_pc_string("unlink...");
//for(i=0;i<49;i++)
// {
//send_usart_date('\r');
// send_usart_date('\n'); //换行回车
// }
// }
/*
if(1==pc_link_ready) //在建立连接的情况下
{
for(channel_i=1;channel_i<=5;channel_i++)
{
send_usart_date(channel_i+0x30);
send_usart_date(' ');
send_usart_date(get_date(channel_i)/100+0x30);
send_usart_date('.');
send_usart_date((get_date(channel_i)%100)/10+0x30);
send_usart_date((get_date(channel_i)%100)%10+0x30);
send_usart_date('V');
send_usart_date(' ');
send_usart_date('\r');
send_usart_date('\n'); //换行回车
}
pc_link_ready=0; //断开连接
}
*/
}
//*****************************
//************主函数******************
void main()
{
Init_LCD();
tmr1_init();
ad_key_init();
usartint(); //异步同步串行通信模块初始化
LCD_Clear();
LCD_DisplayString(1,1,test1);
LCD_DisplayString(2,1,test2);
delay_nms(500);
LCD_Clear();
TMR1IE=1; //开中断
PORTC=0x00;
while (1)
{
key=get_key();
if(1==key) {left_key();}
if(2==key) {reduce_key();}
if(3==key){set++;if(set>4)set=0;}
if(4==key){add_key();}
if(5==key){right_key();}
set_key();
alarm(); //报警
pc_read();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -