標題:
51單片機驅(qū)動adc0804 lcd1602液晶顯示程序
[打印本頁]
作者:
das
時間:
2015-4-18 04:19
標題:
51單片機驅(qū)動adc0804 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; //定義周期 該數(shù)字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;//定時器設(shè)置 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 保持原來狀態(tài)
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);
}
}
復(fù)制代碼
作者:
GG-路人乙
時間:
2015-5-10 10:02
好東西,學(xué)習(xí)一下,謝謝分享!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1