资源简介

基于51单片机的电流电压采集程序,有串口通信和led显示,自己编写,完全可以使用

资源截图

代码片段和文件信息

# include 
# include 




sbit rs=P0^7;
sbit rw=P0^6;
sbit ep=P0^5;

unsigned char dis1[4];
unsigned char dis2[4];
unsigned char chv=0x00;
unsigned char cha=0x70;
//unsigned char chv;
unsigned int date_v=0;
unsigned int date_a=0;


sbit EOC=P1^0;
sbit CS=P1^4;
sbit IO_CLK=P1^1;
sbit DAT_IN=P1^2;
sbit DAT_OUT=P1^3;


void init() //初始化uart
{
  
  
    TMOD=0X20;  //定时器1定时器方式  工作模式2,可自动重载的8位计数器常把定时/计数器1以模式2作为串行口波特率发生器
SCON=0XD0; //选择工作模式1使能接收,允许发送,允许接收
    EA=1; //开总中断
  ES=1;  //打开串口中断
  ET1=0;  //打开定时器中断
    PCON=0X00; //8位自动重载,波特率加倍
  TH1=0Xfd;  //用22.1184 mhz波特率
  TL1=0Xfd;
    TR1=1; //打开中时器
    

}


void UART_Putch(unsigned char dat)  //输出一个字符
{
  SBUF=dat; //把数据送给sbuf缓存器中
  while(TI!=1);//发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环
  TI=0;  //到了,TI清为0
}



unsigned int read_tlc2543(unsigned char M)//M 为十六进制;
{
unsigned char ictrl_word;
unsigned int ad_result=0;
DAT_OUT=1;
ctrl_word=M;
CS=1;
IO_CLK=0;
CS=0;
for(i=0;i<8;i++)
{
DAT_IN=ctrl_word&0x80;
ctrl_word=ctrl_word<<1;
IO_CLK=1;
ad_result=ad_result<<1;
if(DAT_OUT)
ad_result=ad_result+1;
IO_CLK=0;
}
for(i=8;i<12;i++)
{
IO_CLK=1;
ad_result=ad_result<<1;
if(DAT_OUT)
ad_result=ad_result+1;
IO_CLK=0;
}
CS=1;
return ad_result;
}




void delay (int m)
{
 unsigned char ij;
 for (i=0;i for (j=0;j<253;j++);
}

bit lcd_bz()
{
  bit result;
  rs=0;           // 读忙信号
  rw=1;
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  result = (bit)(P2&0x80);
  ep=0;
  return result;
}

void lcd_wcmd (unsigned char cmd)
{
  while (lcd_bz());
  rs=0;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P2=cmd ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}

void lcd_pos (unsigned char pos)
{
  lcd_wcmd (pos|0x80);
}

void lcd_wdat (unsigned char dat)
{
   while (lcd_bz());
  rs=1;
  rw=0;
  ep=0;
  _nop_();
  _nop_();
  P2=dat ;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=1;
  _nop_();
  _nop_();
  _nop_();
  _nop_();
  ep=0;
}

void lcd_init ()
{
  lcd_wcmd (0x38);
  delay (1);
  lcd_wcmd (0x0c);
  delay (1);
  lcd_wcmd (0x06);
  delay (1);
  lcd_wcmd (0x01);
  delay (1);
}

void lcd_dis(unsigned char poseunsigned char *dis)
{
unsigned char i;
  //lcd_init ();
  delay (10);

  lcd_pos (pose);
  for(i=0;i<4;i++)
  {
   lcd_wdat(dis[i]+0x30);
  }
 

}

void convert(unsigned int  aunsigned char *dis1)//电流
{
unsigned int tempb;
b=a/1000;
if(b!=0)
dis1[0]=(unsigned char)b;
else
dis1[0]=0;
temp=a%1000;
b=temp/100;
if(b!=0)
dis1[1]=(unsigned char)b;
else
dis1[1]=0;
temp=temp%100;
b=temp/10;
if(b!=0)
dis1[2]=(unsigned char)b;
else
dis1[2]=0;
b=temp%10;
if(b!=0)
dis1[3]=(unsigned char)b;
else
dis1[3]=0;
}

void main ()
{
  init();
  lcd_init ();
  read_tlc2543(

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-07-13 14:12  基于51单片机电流电压采集\
     文件       13958  2013-07-13 14:12  基于51单片机电流电压采集\0713
     文件       19873  2013-07-13 14:12  基于51单片机电流电压采集\0713.M51
     文件        1080  2013-07-13 14:12  基于51单片机电流电压采集\0713.Opt
     文件         852  2013-07-13 14:12  基于51单片机电流电压采集\0713.plg
     文件        2046  2013-07-13 14:12  基于51单片机电流电压采集\0713.Uv2
     文件           0  2013-07-13 14:03  基于51单片机电流电压采集\0713_Uv2.Bak
     目录           0  2013-07-13 14:01  基于51单片机电流电压采集\src\
     文件        4526  2013-07-13 14:12  基于51单片机电流电压采集\src\Text2.c
     文件        5115  2002-04-16 15:32  基于51单片机电流电压采集\STARTUP.A51
     文件       11750  2013-07-13 14:12  基于51单片机电流电压采集\STARTUP.lst
     文件         810  2013-07-13 14:12  基于51单片机电流电压采集\STARTUP.obj
     文件       10839  2013-07-13 14:12  基于51单片机电流电压采集\Text2.lst
     文件       15076  2013-07-13 14:12  基于51单片机电流电压采集\Text2.obj

评论

共有 条评论