mình đang làm bài tập về mạch đếm sản phẩm sử dụng led hồng ngoại hiển thị kết quả lên LCD, bên cạnh đó còn kích rờle cho băng chuyền hoạt động. Không biết mình code như này có sai chỗ nào hay không mà khi cấp nguồn LCD sáng mà không thấy có tín hiệu gì.
Mình dùng KielC để viết và sử dụng vdk AT89S52. Mong ae tận tình chỉ giúp!!!!
PHP Code:
#include <REGX52.H>
#include <stdio.h>
#define bat 1;
#define tat 0;
#define LCD_RW P1_1
#define LCD_RS P1_0
#define LCD_EN P1_2
sbit Led = P2^0;
sbit START = P2^2;
unsigned char nghin ,tram,chuc,donvi;
char x;
long int a;
void delay(unsigned long int t)
{
unsigned long int i;
for(i=0;i<t;i++);
}
void ghi_lenh (unsigned char lcd_lenh)//ghi lenh ra lcd
{
LCD_RS=0;
LCD_RW=0;
LCD_EN=1;
P0=lcd_lenh;
LCD_EN=0;
delay(300);
}
void ghi_dulieu (unsigned char lcd_dulieu)
{
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
P0=lcd_dulieu;
LCD_EN=0;
delay(300);
}
//dich chuoi
void write_string(char *s)
{
while(*s)
{
ghi_dulieu(*s);
s++;
}
}
// khoi tao LCD
void khoitao_lcd(void)
{
ghi_lenh (0x02);
ghi_lenh (0x38);
ghi_lenh (0x06);
ghi_lenh (0x0c);
}
void ngatngoai(void) interrupt 0
{
a++;
nghin=a/1000;
tram=(a%1000)/100;
chuc=((a%1000)%100)/10;
donvi=((a%1000)%100)%10;
if(a>9999) a=0;
}
void hienthi(void)
{
ghi_lenh(0x03);
ghi_lenh(0x80);
ghi_dulieu(nghin + 0x30);
ghi_dulieu(tram + 0x30);
ghi_dulieu(chuc + 0x30);
ghi_dulieu(donvi + 0x30);
}
// Ham chinh
void main(void)
{
while(1)
{
Led = tat;
if(START==0){
Led=bat;
delay(50);
khoitao_lcd();
a=0;
IE=0x81;
IT0=1;
ghi_lenh(0xc0);
write_string("san pham");
while(1)
{
hienthi();
}
}
}
}
Comment