标题: lcd1602显示程序 [打印本页]

作者: wt82995    时间: 2018-6-20 22:12
标题: lcd1602显示程序
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code dis0[]={"Volter(V)"};
uchar code dis1[]={"dianliuA"};
sbit jia=P3^4;
sbit jian=P3^5;
sbit lcden=P3^2;
sbit lcdrs=P3^0;
sbit adwr=P3^6;
sbit adrd=P3^7;
sbit  wr1=P3^1;
uchar num;
uint ad_data,ad_data1,ad_data2,ad_data3,adval,ad_data4,da,rw1;
unsigned char CYCLE; //定义周期 该数字X基准定时时间 如果是10 则周期是10 x 0.1ms
unsigned char PWM_ON;//定义高电平时间
sbit LED = P3^3;
void delay(uint z)
{
// uint y;
// for(y=110;y>0;y--);
  while(z--);
}
key(uchar num)
{if(jia==0)
{delay(10);if(jia==0)
{num++;
     if(num==7)num=6;
  while(jia==0);}
   }
  if(jian==0)
  {delay(10);
  if (jian==0)
   {   if(num!=0)num--;else num=0;while(jian==0);}
  }
  return num;
}
dispose(unsigned char PWM_ON)
{
   switch(num)
   {case 0:PWM_ON=20;break;
   case 1:PWM_ON=40;break;
   case 3:PWM_ON=80;break;
   case 2:PWM_ON=60;break;
   case 4:PWM_ON=100;break;
   case 5:PWM_ON=120;break;
   case 6:PWM_ON=140;break;
   }
   return PWM_ON;
  }
void dac0832()
{ int i;
//lcden=1;delay(5);
lcden=0;delay(50);
wr1=1;delay(5);
wr1=0;delay(50);
  P2=ad_data;
da=ad_data;
for(i=0;i<5;i++)
{
if(PWM_ON>da) P2=--da;
if(PWM_ON<da) P2=++da;
if(PWM_ON==da)P2=da;
}
lcden=0;wr1=1;
}
/*void init0()    //初始化
{ TMOD =0x01;//定时器设置 0.1ms in 12M crystal
TH0=(65536-100)/256;
TL0=(65536-100)%256;//定时0.1mS
IE= 0x82;  //打开中断
TR0=1;
}   

void tim(void) interrupt 1 using 1
{
static unsigned char count; //
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if (count==PWM_ON)
    {
     LED = 0; //灯灭
    }
  count++;
if(count == CYCLE)
    {
    count=0;
if(PWM_ON!=0) //如果左右时间是0 保持原来状态
    LED =1;//灯亮
    }
}     */


void write_com(uchar com)
{
  lcdrs=0;P0=com;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void write_data(uchar dota)
{
  lcdrs=1;
  P0=dota;
  delay(5);
  lcden=1;
  delay(5);
  lcden=0;
}
void init()
{
  lcden=0;
  write_com(0x38);
  write_com(0x0c);
  write_com(0x06);
  write_com(0x01);
}
void display0()
{ write_com(0x80);
  for(num=0;num<10;num++)
{
  write_data(dis0[num]);
  delay(5);
}
  delay(5);
  write_data(ad_data1+0x30);delay(1);
  write_data(ad_data2+0x30);delay(1);
  write_data('.');delay(1);
  write_data(ad_data3+0x30);delay(1);
// write_data(ad_data4+0x30);delay(2);
  write_com(0x80+0x40);
  for(num=0;num<8;num++)
{
  write_data(dis1[num]);
  delay(5);}

}
AD0804(uint ad_data)
{ adwr=1;_nop_();
  adwr=0;_nop_();delay(5);
  adwr=1;_nop_();
  P1=0xff;
  adrd=1;_nop_();
  adrd=0;_nop_();
  ad_data=P1;
  adval=ad_data;
  adval=adval*100/51;
  ad_data1=adval/100;
  ad_data2=adval%100/10;
  ad_data3=adval%100%10;
// ad_data4=adval%1000%100%10;
return ad_data;

}

void main()
{   init();
    ad_data=1;
    ad_data1=2;
LED=0;
num=0;
CYCLE=200;
PWM_ON=100;
while(1)
    {LED=0;
display0();
AD0804(ad_data);
    key(num);
    dispose(PWM_ON);
dac0832();
    LED=1;delay(CYCLE);
}

}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1