📄 link12.c
字号:
#include <reg51.h>
#include <intrins.h>
typedef unsigned char INT8U;
typedef unsigned int INT16U;
typedef unsigned long INT32U;
/************************** 定义**************************************/
sbit chanel0 = P1^0;
sbit chanel1 = P1^1;
sbit chanel2 = P1^2;
INT8U data Hz_H ;
INT8U data Hz_L;
INT8U data countt;
INT8U data com_count;
INT8U data com_EV1000[18];
INT8U data com_part;
INT8U data com_command1;
INT8U data com_command2;
INT8U data com_find;
INT16U data com_data;
INT16U data final_data;
unsigned char code ACSII[16]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};
///////////////延时1ms子函数//////////////////////////////////////
void DelayX1ms(INT16U count)/*延时XmS子程序*/
{
INT16U i;
INT8U j;
for(i=0;i<count;i++)
for(j=0;j<110;j++);
}
///////////////////串口初始化////////////////////////
void com_start(void)
{
TMOD = 0x20; /*定时器*计数器1的操作模式为2*/
PCON = 0x00;
SCON = 0x40; /*串口工作方式1*/
TH1 = 0xfd; /*定时器1的重装载值,此时若SMOD=0,9.6K;SMOD=1,19.2K*/
TL1 = 0xfd;
TR1 = 1; /*定时器*计数器1开始工作*/
REN = 1; /*允许串行口接收*/
}
/////////////////串口接收子函数////////////////////
unsigned char com_rev(void)
{
INT8U com_buf ;
REN=1;
while(RI!=1) ;
RI=0;
com_buf=SBUF;
return(com_buf);
}
////////////////串口发送子函数////////////////////
void com_sent(INT8U sent)
{
SBUF=sent;
while(TI!=1) ;
TI=0;
}
//////////////////EV1000累加和计算/////////////////
void EV1000_com_add(void)
{
INT16U ev_add;
INT8U ev_add_h;
INT8U ev_add_l;
INT8U i;
ev_add=com_EV1000[1];
for(i=2;i<13;i++)
{
ev_add= ev_add+com_EV1000[i];
}
ev_add_h = (ev_add&0xff00) / 256;
ev_add_l = ev_add&0xff;
com_EV1000[13] = ACSII[(ev_add_h&0xf0)/16];
com_EV1000[14] = ACSII[ev_add_h&0x0f];
com_EV1000[15] = ACSII[(ev_add_l&0xf0)/16];
com_EV1000[16] = ACSII[ev_add_l&0x0f];
com_EV1000[17] = 0x0d;
}
void EV1000_sent()
{
INT8U com_data_h,com_data_l,i;
com_EV1000[0] = 0x7e;
com_EV1000[1] = ACSII[(com_part&0xf0)/16];
com_EV1000[2] = ACSII[com_part&0x0f];
com_EV1000[3] = ACSII[(com_command1&0xf0)/16];
com_EV1000[4] = ACSII[com_command1&0x0f];
com_EV1000[5] = ACSII[(com_find&0xf0)/16];
com_EV1000[6] = ACSII[com_find&0x0f];
com_EV1000[7] = ACSII[(com_command2&0xf0)/16];
com_EV1000[8] = ACSII[com_command2&0x0f];
com_data_h = (com_data & 0xff00) / 256;
com_data_l = com_data & 0x00ff ;
com_EV1000[9] = ACSII[ (com_data_h & 0xf0) /16 ] ;
com_EV1000[10] = ACSII[ com_data_h & 0x0f ] ;
com_EV1000[11] = ACSII[ (com_data_l & 0xf0) /16 ] ;
com_EV1000[12] = ACSII[ com_data_l & 0x0f ] ;
EV1000_com_add();
for(i=0;i<18;i++)
{
com_sent(com_EV1000[i]);
}
}
/////////////////主函数/////////////////////////////
void main()
{
INT16U i;
com_start();
com_part = 1 ;
com_command1 = 2 ;
com_find = 0 ;
com_command2 = 1 ;
final_data = 5000 ;
i=0;
while(final_data != i)
{
if((final_data - i) >= 1000)
{
com_data=i;
EV1000_sent();
DelayX1ms(200);
i=i+100;
}
else if((final_data - i) >= 100)
{
com_data=i;
EV1000_sent();
DelayX1ms(200);
i=i+10;
}
else if((final_data - i) >= 10)
{
com_data=i;
EV1000_sent();
DelayX1ms(200);
i=i+1;
}
else if((final_data - i) >= 0)
{
com_data=i;
EV1000_sent();
DelayX1ms(200);
i=i+1;
}
}
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -