找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1715|回复: 0
打印 上一主题 下一主题
收起左侧

lcd1602显示程序

[复制链接]
跳转到指定楼层
楼主
ID:354096 发表于 2018-6-20 22:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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);
}

}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表