Mạch Khóa Số Điện Tử Mạch Đếm Sản Phẩm Mạch Đèn giao thông Ngã Tư Mạch Trái Tim Final Mạch Trái Tim Final Mạch Trái Tim I Love U

February 20, 2013

Bài 6: ADC0804 + LCD + LM35


Bài này Chip lập trình chuyển đổi ADC đúng rồi,nhưng có chỗ hiển thị LCD chưa được, bạn nào biết thì đóng góp Chip nhé..^^


CODE C


#include <REGX51.H>
#include<math.h>
#include <stdio.h>
#include <intrins.h>
#include <string.h>
/********************/
#define ADC_CS  P3_3
#define ADC_RD P3_4
#define ADC_WR P3_5
#define ADC_INTR P3_6
#define ADC_DATA P1

/*sbit CS = P3^3;
sbit RD = P3^4;
sbit WR = P3^5;
sbit INTR = P3^6; */
/**************/
#define LCDdata P2
sbit BF = 0xA7;
sbit RS = P3^0;
sbit RW = P3^1;
sbit EN = P3^2;
unsigned char ADC_val,voltage;
// Khai bao cac bien toan cuc
unsigned char code string1[] = "Chipkool.net";
unsigned char code string2[] = "Dien ap = ";
unsigned char voltage,digit1,digit2;
/***************************/
void delay(unsigned char ms)
{
unsigned char i,j;
for(i=0;i<ms;i++)
for(j=0;j<125;j++){}
}

void delayshort(void)
{
unsigned char a;
for(a=0;a<10;a++);
}
/*********************************/
void wait(void)
{
RS=0;//chon thanh ghi lenh
RW=1;//doc du lieu tu lcd
LCDdata=0xff;
while(BF)
{
EN=0;
EN=1;
}
}
/************************************/
void LCDcontrol(unsigned char x)
{
RS=0; //chon thanh ghi lenh
RW=0;//ghi lenh len LCD
LCDdata=x;
EN=1;
EN=0;
wait();

}
/**************************************/
void LCDinit(void)
{
LCDcontrol(0x38);//ma tran 5x7
LCDcontrol(0x0e);//bat man hinh bat con tro
LCDcontrol(0x01);//xoa man hinh
}
/*************************************/
void LCDwrite(unsigned char c)
{
RS=1;//chon thanh ghi du lieu
RW=0;//ghi du lieu ra
LCDdata=c;
EN=1;
EN=0;
wait();
}
/****************************************/
void LCDwrites(unsigned char*s)
{
unsigned char data lens,count;
lens=strlen(s);
for(count=0;count<lens;count++)
{
LCDwrite(*(s+count));
}
}
/*****************************************/
void LCDclear(void)
{
LCDcontrol(0x01);
wait();
}
/*****************************/
void Convert()
{
// ra lenh chuyen doi
ADC_RD =1;
ADC_CS =0;
delayshort();
ADC_WR =0;
delayshort();
ADC_WR =1;
delayshort();
ADC_CS =1;
// cho chuyen doi xong
while(ADC_INTR==1);//chuyen xong 1 bit thi ngat ADC
ADC_DATA = 0xff;//chuyen port thanh cong vao de chuan bi doc du lieu
ADC_CS =0;
delayshort();
ADC_RD =0;
delayshort();
ADC_CS =1;
// Doc du lieu vao
voltage = ADC_DATA;
ADC_RD = 1;
delayshort();
ADC_CS = 1;


}
/*******************************************/

void view(unsigned char var)
 {
unsigned char val;
if(val<10){
LCDwrite(val+48);
}else if(val<100){
LCDwrite(val/10+48);
LCDwrite(val%10+48);
}else{
var=val/10;
LCDwrite(var/10+48);
LCDwrite(var%10+48);
LCDwrite(val%10+48);
}
 }
/************************************************/

void main(void)
{

LCDinit();
LCDcontrol(0x83);
LCDwrites("ADC0804");
while(1){
LCDcontrol(0xC0);
Convert();

//view(ADC_DATA);
view(voltage);




  }
 }


(Empty)
Blog Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử

2 comments:

nguyen thanh said...
21/2/13

Bạn tham khảo code này thử:

#include
#include
#include

#define RS P3_0
#define RW P3_1//RW=0 => ghi
#define EN P3_2//RW=1 => doc
//RS=0 => code
//RS=1 => data
#define LCD_PORT P2

#define INTR P3_6
#define RD P3_4
#define WR P3_5


//===========================
void delay_ms(int n)
{
int k,j;
for(k=0;k2)&&(y<1||y>16))
{
x=1;
y=1;
}
if(x == 1)
LCDWriteCmd(0x7F+y);
else
LCDWriteCmd(0xBF+y);
}
//===============================
void LCD_init() // Khoi tao LCD
{
delay_15ms();

LCDWriteCmd(0x38);
LCDWriteCmd(0x0C);
// LCDWriteCmd(0x06);
LCDWriteCmd(0x01); // Xoa man hinh LCD
}
//================================
void LCD_clear()
{
LCDWriteCmd(0x01);
}
//===============================
void LCD_home()
{
LCDWriteCmd(0x80);
}
//=============================
void LCD_putstr(unsigned char *s)
{
while (*s)
{
LCDWriteData(*s);
s++;
}
}
//============================
void HienThi_ADC(unsigned char t)
{
unsigned char v;


if(t<10)
{ LCDWriteData(t+48);
}else if(t<100){
LCDWriteData(t/10+48);
LCDWriteData(t%10+48);
}else{
v=t/10;
LCDWriteData(v/10+48);
LCDWriteData(v%10+48);
LCDWriteData(t%10+48);
}
}

//==========================================


void main (void)
{
unsigned char gt=0; //gt la bie^n' cho gia tri 8bit ADC
LCD_init();
LCDWriteCmd(0x83);
LCD_putstr("8051 & ADC");
while(1)
{

WR=0; // Bat dau chuyen doi gia tri tu ADC
delay_ms(5); // Tao tre de cap nhat du lieu tu ADC
WR=1; //
while(!INTR);
RD=0; // Nhan du lieu da duoc chuyen doi
gt=P1;
LCDWriteCmd(0x01);
LCDWriteCmd(0x83);
LCD_putstr(" 8952&ADC");
LCDWriteCmd(0xC0);
LCD_putstr("Nhiet do:");
HienThi_ADC(gt);
delay_ms(150);






}
}

Chip Kool said...
22/2/13

OK..Thanks bạn nhé..để Chip tìm hiểu xem sao..=D>

Post a Comment

Bạn đọc hãy giúp chúng tôi xây dựng cộng đồng bằng cách để lại bình luận, chúng tôi luôn đón nhận mọi ý kiến của các bạn:
» Bình luận nghiêm túc và không chứa các liên kết quảng cáo.
» Vui lòng không Spam nhận xét với mọi hình thức.
» Rất mong bạn đề tên cho nhận xét của chính mình - Bằng cách chọn vào Tên/URL và điền tên bạn vào (Phần URL có thể bỏ trống ).

- Bạn có thể chèn Link nhạc (NCT), video(Youtube),Hình ảnh vào comment bằng cú pháp:
+ [youtube] Link video Youtube [/youtube].
+ [img] Link ảnh( định dạng PNG, JPG,GIF) [/img]
+Chèn link liên kết: <a href="LINK" rel="nofollow">Name</a>
-Bạn copy mã bên cạnh biểu tượng chèn vào nhận xét để bày tỏ cảm xúc!!

:) :( :)) :(( =)) =D> :D :P