Chương trình thực hiện đo nhiện độ và hiển thị kết quả lên LCD 16x2, các bước khởi tạo LCD, khởi tạo bộ ADC trong 8051.

Mã nguồn C:


#include <AT89X51.H>
#include <stdio.h>
#include<string.h>

#define RS P3_5
#define RW P3_6//RW=0 => ghi
#define EN P3_7//RW=1 => doc
//RS=0 => code
//RS=1 => data
#define LCD_PORT P1

#define INTR P3_2
#define RD P3_3
#define WR P3_4


//===========================
void delay_ms(int n)
{
   int k,j;
   for(k=0;k<n;k++)
   {
      for(j=0;j<500;j++);
   }

}
//==========================
void delay_5ms()
{
     int i,j;
     for(i=0;i<250;i++)
     for(j=0;j<4;j++){}
}
//===========================
void delay_15ms()
{
     int i,j;
     for(i=0;i<250;i++)
     for(j=0;j<100;j++){}
}
//============================
void LCDWriteCmd(unsigned char c) //CT con ghi du lieu len LCD
{
 RS=0;//code
 RW=0;//ghi
 LCD_PORT=c;
 EN=1;
 EN=0;
 delay_5ms();
}
//==============================
void LCDWriteData(unsigned char c) //CT con doc du lieu tu LCD
{
 RS=1;//data
 RW=0;//ghi
 LCD_PORT=c;
 EN=1;
 EN=0;
 delay_5ms();
}
//===============================
void LCD_init()  // Khoi tao LCD
{
 delay_15ms();    
 LCDWriteCmd(0x38); //che do 8bit,2 hang,kieu ky tu 5x8 diem anh.
 LCDWriteCmd(0x0C);   //hien thi man hinh.
 LCDWriteCmd(0x06);   //tu dong tang bo dem dia chi
 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();
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;             //ket thuc chuyen doi.
//   while(!INTR);
    RD=0;             // Nhan du lieu da duoc chuyen doi
     gt=P2;          //cap nhat ADC.
     LCDWriteCmd(0x01);
     LCDWriteCmd(0x83);
     LCD_putstr("8051 & ADC");
     LCDWriteCmd(0xC0);
     LCD_putstr("Nhiet do:");
      HienThi_ADC(gt);
     delay_ms(150);
}
}
Phạm Văn Ngọc Anh- 01644326695