Chào các anh em đang làm mạch đo nhiệt độ nhưng khổ một nỗi khi mô phỏng lcd chỉ hiển thị giá trị nhiệt độ 255.cho dù có thay đổi giá trị đầu vào.có ai biết chỉ em với huhu.
đây là code và hình mô phỏng
cảm ơn các bác rất nhiều!
đây là code và hình mô phỏng
cảm ơn các bác rất nhiều!
Code:
#include <AT89X51.H> #include <stdio.h> #include<string.h> #define RS P2_0 #define RW P2_1//RW=0 => ghi #define EN P2_2//RW=1 => doc //RS=0 => code //RS=1 => data #define lcd_PORT P0 sbit EOC = P2^4 ; sbit ALE_START = P2^3; sbit OE = P2^5 ; //=========================== 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 lcd_command(unsigned char c) //CT con ghi du lieu len LCD { RS=0; RW=0; lcd_PORT=c; EN=1; EN=0; delay_5ms(); } //============================== void lcd_data(unsigned char c) //CT con doc du lieu tu LCD { RS=1; RW=0; lcd_PORT=c; EN=1; EN=0; delay_5ms(); } //============================= void lcd_gotoxy(int x, int y) { if((x<1||x>2)&&(y<1||y>16)) if(x == 1) lcd_command(0x7F+y); else lcd_command(0xBF+y); } //=============================== void lcd_init() // Khoi tao LCD { delay_15ms(); lcd_command(0x38); lcd_command(0x0C); // lcd_command(0x06); lcd_command(0x01); // Xoa man hinh LCD } //================================ void lcd_clear() { lcd_command(0x01); } //=============================== void lcd_home() { lcd_command(0x80); } //============================= void lcd_putsf(unsigned char *s) { while (*s) { lcd_data(*s); } } //============================ void HienThi_ADC(unsigned char t) { unsigned char v; if(t<10) lcd_data(t+48); else if(t<100) { lcd_data(t/10+48); } else { v=t/10; lcd_data(v/10+48); lcd_data(t%10+48); } } void main (void) { unsigned char gt; //gt la bie^n' cho gia tri 8bit ADC lcd_init(); lcd_command(0x83); lcd_putsf("khanh thoa"); while(1) { OE = 1; ALE_START = 1; ALE_START = 0; while(!EOC); OE=0; gt = P1; ALE_START = 1; lcd_command(0x01); lcd_command(0x83); lcd_putsf("DO NHIET DO"); lcd_command(0xC0); lcd_putsf("Nhiet do:"); HienThi_ADC(gt); delay_ms(150); } }
Comment