tình hình em chuẩn bị đi bảo vệ môn vi điều khiển rùi mà code có mấy chỗ chưa hiểu mong bác nào chỉ giáo em với ạ
code day ạ:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit RS_LCD = P1^0;
sbit RW_LCD = P1^1;
sbit E_LCD = P1^2;
unsigned char dong[] = {0x00,0x80,0xc0};
unsigned long d=0;
void delay_short(){ // Tao tre ngan
unsigned int i;
for(i=0;i<=3;i++);
}
void delay(void) // Phuc vu ngat Timer0;
{
TMOD = 0x01; //Timer 0 che do 1
TH0 = -1000/256; // Chu ky xung 2000us
TH0 = -1000%256;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
void ktra_coban(){
unsigned char x;
P2 = 0xff; //11111111: P2 muc cao LCD dang hoat dong;
RS_LCD = 0; // Chon thanh ghi lenh
RW_LCD = 1; // Doc tu LCD
do {
E_LCD = 1; // Cho phep
delay_short();
E_LCD = 0; // Cam
x=P2;
x=x&0x80; //1000000: Xoa 7 bit thap cua P2;
}
while(x!=0x80);
}
void ghi_lenh(unsigned char command){
ktra_coban();
delay();
P2 = command;
RS_LCD = 0; //Chon thanh ghi lenh
RW_LCD = 0; //write to LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
void ghi_kytu(unsigned char kytu){
ktra_coban();
delay();
P2 = kytu;
RS_LCD = 1; // Chon thanh ghi du lieu
RW_LCD = 0; // Ghi vao LCD
E_LCD =1;
delay_short();
E_LCD = 0;
}
void ghi_nhanh ( unsigned char kytu){
delay_short();
P2 = kytu;
RS_LCD = 1; // Chon thanh ghi lenh
RW_LCD = 0; // Ghi vao LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
void ghi_chuoi(char *str){
while(*str){
ghi_kytu(*str);
str++;
}
}
void ghi_nhanh_chuoi(char *str){
while(*str){
ghi_nhanh(*str);
str++;
}
}
void move(unsigned char y,unsigned char x){ //Ham di chuyen con tro tren man hinh LCD
ghi_lenh(dong[y]+x); // y la dong, x la cot
}
void setting(){ //khoi tao LCD
ghi_lenh(0x01);
ghi_lenh(0x38);
// ghi_lenh(0x0f);
ghi_lenh(0x0e);
// ghi_lenh(0x1c); //Dich con tro, dich chuyen con tro sang phai
// ghi_lenh(0x0c); //Bat hien thi ,tat con tro
}
void write_number(unsigned long number){ //Ham tao mot day so dem;
int j;
unsigned char array[10]; //Day 10 phan tu tren mot dong;
for(j=0 ; j<10 ; j++)
{
array[j] = number%10; //chia lay du roi thuc hien dua vao mang
number /= 10;
}
for(j=9 ; j>=0 ; j--){ //Hien thi tu trai qua;
ghi_nhanh(array[j]+0x30); //00110000 : Hien thi mot dong Font 5*7;
}
}
void main(){
setting();
IE = 0x00; //00000000 : Khong cho phep ngat;
ghi_lenh(0x01); //00000001 : Xoa man hinh
ghi_lenh(0x80);
ghi_chuoi(" CDT2-K5");
ghi_lenh(0xc0); //11000000 oc co bao ban va dia chi cua CGRAM or DDRAM
ghi_chuoi(" 1234 ");
delay();
ghi_lenh(0x01);
ghi_chuoi(" DO AN ");
ghi_lenh(0xc0);
ghi_chuoi("DEM SAN PHAM LCD");
delay();
ghi_lenh(0x01);
ghi_chuoi(" SVTH ");
ghi_lenh(0xc0);
ghi_chuoi(" abc ");
delay();
ghi_lenh(0x01);
ghi_lenh(0x0c);
ghi_nhanh_chuoi(" SO SAN PHAM LA");
IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
IT0 = 1; //Uu tien ngat tu ngoai Timer0;
while(1){
move(2,3); // Di chuyen den vi tri 3 dong 2;
write_number(d);
}
}
void sp() interrupt 0 //Ngat ngoai Timer0
{
d++;
}
các bác cho em hỏi chỗ này để làm j ạ:
void delay(void) // Phuc vu ngat Timer0;
{
TMOD = 0x01; //Timer 0 che do 1
TH0 = -1000/256; // Chu ky xung 2000us
TH0 = -1000%256;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
như code trên em bỏ đi có dc không ạ?
chu kì xung 2000us làm j ạ?
IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
IT0 = 1; //Uu tien ngat tu ngoai Timer0;
2 cái này để làm j ạ?
bỏ đi có dc không các bác?
mọi ng giúp em với ạ gần BV rùi mà còn vài chỗ này không bít j
thank mọi ng giúp em ạ
code day ạ:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
sbit RS_LCD = P1^0;
sbit RW_LCD = P1^1;
sbit E_LCD = P1^2;
unsigned char dong[] = {0x00,0x80,0xc0};
unsigned long d=0;
void delay_short(){ // Tao tre ngan
unsigned int i;
for(i=0;i<=3;i++);
}
void delay(void) // Phuc vu ngat Timer0;
{
TMOD = 0x01; //Timer 0 che do 1
TH0 = -1000/256; // Chu ky xung 2000us
TH0 = -1000%256;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
void ktra_coban(){
unsigned char x;
P2 = 0xff; //11111111: P2 muc cao LCD dang hoat dong;
RS_LCD = 0; // Chon thanh ghi lenh
RW_LCD = 1; // Doc tu LCD
do {
E_LCD = 1; // Cho phep
delay_short();
E_LCD = 0; // Cam
x=P2;
x=x&0x80; //1000000: Xoa 7 bit thap cua P2;
}
while(x!=0x80);
}
void ghi_lenh(unsigned char command){
ktra_coban();
delay();
P2 = command;
RS_LCD = 0; //Chon thanh ghi lenh
RW_LCD = 0; //write to LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
void ghi_kytu(unsigned char kytu){
ktra_coban();
delay();
P2 = kytu;
RS_LCD = 1; // Chon thanh ghi du lieu
RW_LCD = 0; // Ghi vao LCD
E_LCD =1;
delay_short();
E_LCD = 0;
}
void ghi_nhanh ( unsigned char kytu){
delay_short();
P2 = kytu;
RS_LCD = 1; // Chon thanh ghi lenh
RW_LCD = 0; // Ghi vao LCD
E_LCD = 1;
delay_short();
E_LCD = 0;
}
void ghi_chuoi(char *str){
while(*str){
ghi_kytu(*str);
str++;
}
}
void ghi_nhanh_chuoi(char *str){
while(*str){
ghi_nhanh(*str);
str++;
}
}
void move(unsigned char y,unsigned char x){ //Ham di chuyen con tro tren man hinh LCD
ghi_lenh(dong[y]+x); // y la dong, x la cot
}
void setting(){ //khoi tao LCD
ghi_lenh(0x01);
ghi_lenh(0x38);
// ghi_lenh(0x0f);
ghi_lenh(0x0e);
// ghi_lenh(0x1c); //Dich con tro, dich chuyen con tro sang phai
// ghi_lenh(0x0c); //Bat hien thi ,tat con tro
}
void write_number(unsigned long number){ //Ham tao mot day so dem;
int j;
unsigned char array[10]; //Day 10 phan tu tren mot dong;
for(j=0 ; j<10 ; j++)
{
array[j] = number%10; //chia lay du roi thuc hien dua vao mang
number /= 10;
}
for(j=9 ; j>=0 ; j--){ //Hien thi tu trai qua;
ghi_nhanh(array[j]+0x30); //00110000 : Hien thi mot dong Font 5*7;
}
}
void main(){
setting();
IE = 0x00; //00000000 : Khong cho phep ngat;
ghi_lenh(0x01); //00000001 : Xoa man hinh
ghi_lenh(0x80);
ghi_chuoi(" CDT2-K5");
ghi_lenh(0xc0); //11000000 oc co bao ban va dia chi cua CGRAM or DDRAM
ghi_chuoi(" 1234 ");
delay();
ghi_lenh(0x01);
ghi_chuoi(" DO AN ");
ghi_lenh(0xc0);
ghi_chuoi("DEM SAN PHAM LCD");
delay();
ghi_lenh(0x01);
ghi_chuoi(" SVTH ");
ghi_lenh(0xc0);
ghi_chuoi(" abc ");
delay();
ghi_lenh(0x01);
ghi_lenh(0x0c);
ghi_nhanh_chuoi(" SO SAN PHAM LA");
IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
IT0 = 1; //Uu tien ngat tu ngoai Timer0;
while(1){
move(2,3); // Di chuyen den vi tri 3 dong 2;
write_number(d);
}
}
void sp() interrupt 0 //Ngat ngoai Timer0
{
d++;
}
các bác cho em hỏi chỗ này để làm j ạ:
void delay(void) // Phuc vu ngat Timer0;
{
TMOD = 0x01; //Timer 0 che do 1
TH0 = -1000/256; // Chu ky xung 2000us
TH0 = -1000%256;
TR0 = 1;
while (!TF0);
TR0 = 0;
TF0 = 0;
}
như code trên em bỏ đi có dc không ạ?
chu kì xung 2000us làm j ạ?
IE = 0x81; //10000001 : Cho phep ngat ngoai Timer0;
IT0 = 1; //Uu tien ngat tu ngoai Timer0;
2 cái này để làm j ạ?
bỏ đi có dc không các bác?
mọi ng giúp em với ạ gần BV rùi mà còn vài chỗ này không bít j
thank mọi ng giúp em ạ
Comment