90 基于单片机蓄电池充放电检测系统设计【毕设课设】

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
/***************引脚声明*********************/
#define lcd P0
sbit rs=P2^7;	  //LCD液晶控制端
sbit en=P2^6;
sbit SPK=P1^7;  //蜂鸣器引脚
sbit CS=P1^2;   //将CS位定义为P1.2引脚
sbit CLK=P1^0;  //将CLK位定义为P1.0引脚
sbit DIO=P1^1;  //将DIO位定义为P1.1引脚
sbit key=P2^5;  //定义按键引脚
sbit a=P2^0;		//模拟量通道选择端
sbit b=P2^1;		//模拟量通道选择端
sbit c=P2^2;		//模拟量通道选择端
sbit LED = P3^7;
sbit LED1 = P3^6;

/***********LCD显示数组**************************/

uchar table1[]="V=0.00V";
uchar table3[]="I=0.00A";
uchar table5[]="PO=000%";
uchar table6[] = "T=000C";   

uchar temp = 0;
uchar tt = 0;
/***************全局变量************************/
uchar flag=0;      //换挡标志位


void delay(uint count)		 //延时
{
  uint i,j;
  for(i=0;i<count;i++)
   for(j=0;j<120;j++);
}

/*************LCD1602驱动程序************************/
void w_cmd(uchar com)		  //lcd1602写命令
{
  rs=0;
  lcd=com;
  en=1;
  delay(5);
  en=0;
}

void w_data(uchar dat)		  //lcd1602读数据
{
  rs=1;
  lcd=dat;
  en=1;
  delay(5);
  en=0;
}

void w_str(uchar *s)       //lcd1602写字符串
{
    while(*s)  w_data(*s++);
}

void init()		     //lcd1602初始化
{
  en=0;
  w_cmd(0x38);
  w_cmd(0x0c);
  w_cmd(0x06);
  w_cmd(0x01);
}

/*****************************************************
函数功能:将模拟信号转换成数字信号
***************************************************/ 
unsigned char  A_D()
{
  unsigned char i,dat;
   CS=1;   //一个转换周期开始
   CLK=0;  //为第一个脉冲作准备
   CS=0;  //CS置0,片选有效
   DIO=1;    //DIO置1,规定的起始信号  
   CLK=1;   //第一个脉冲
   CLK=0;   //第一个脉冲的下降沿,此前DIO必须是高电平
   DIO=1;   //DIO置1, 通道选择信号  
   CLK=1;   //第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 
   CLK=0;   //第二个脉冲下降沿
    
   DIO=0;   //DI置0,选择通道0
   CLK=1;    //第三个脉冲
   CLK=0;    //第三个脉冲下降沿
   DIO=1;    //第三个脉冲下沉之后,输入端DIO失去作用,应置1
   CLK=1;    //第四个脉冲
   for(i=0;i<8;i++)  //高位在前
    {
      CLK=1;         //第四个脉冲
      CLK=0; 
      dat<<=1;       //将下面储存的低位数据向右移
   dat|=(unsigned char)DIO;   //将输出数据DIO通过或运算储存在dat最低位 
    }             
    CS=1;          //片选无效 
  return dat;  //将读书的数据返回     
}
/**********************报警程序************************/ 
void BaoJing(void) 
{  
	uint i, j;
	for (i = 0; i < 200; i++)    //产生脉冲使蜂鸣器发出声音
	{
         SPK = 0; for (j = 0; j < 100; j++);
         SPK = 1; for (j = 0; j < 100; j++);
  }	 
}
/*********************按键判定************************************/
void keyscan()
{
	if(key==0)		   //判断是否按下
	{
		delay(10);
		if(key==0)
		{
			while(!key);
			flag++;
			if(flag>3) flag=0;
			
		}
	}
}
/*******************定时器1初始化程序******************/ 
void Timer1_Init(void) // 
{ 
	TMOD=0x11;	
	TH1 = ( 65535 - 50000 ) / 256;   //0.2ms 
	TL1 = ( 65535 - 50000 ) % 256; 
	ET1=1;		
	TR1=1;	 
	EA=1;
}
/*******************定时器1中断程序********************/ 
void Timer1 ( void ) interrupt 3  //定时器1中断函数 0.2ms 
{ 
	TH1 = ( 65535 - 50000) / 256;  
	TL1 = ( 65535 - 50000 ) % 256;
	keyscan();   //按键判定
}

 

 资料下载地址

https://pan.baidu.com/s/1LQIVRBE_KBaCUgM0gCqdZQ?pwd=8888

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值