Mình có đoạn code quét 5 led matrix 8x8 dùng ic 74595 .đoạn code này không bị lỗi mà khi mình nhập nhiều hơn 21 kí tự vào ô chuỗi hiển thị thì không biên dịch debug và mô phỏng đc ! mong mọi người sửa giúp mình để có thể hiển thị nội dung bất kì và không hạn chế số lượng kí tự
code mình đây :
#include<REG52.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<font.c>
//////////////////////////////////
sbit DATA1 = P3^0;
sbit SCK1 = P3^1;
sbit LACH1 = P3^2;
sbit DATA2 = P2^0;
sbit SCK2 = P2^1;
sbit LACH2 = P2^2;
unsigned char temp1;
unsigned int i,j,d,k,c;
unsigned char x;
unsigned char string[]= " TRAN VAN HOANG ";
unsigned char idata font[195];
unsigned char ma[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void xuly()
{
unsigned int i,j,l;
l=(strlen(string)); //l la so dai cua xau ki tu
for(i=0;i<=l-1;i++)
{
for(j=0;j<8;j++)
{
font[8*i+j]=font2[8*(string[i]-32)+j];
d++;
}
}
}
//******************ham tao tre ********************/
void delay1(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++)
{}
}
/******** ham dich hien thi******/
void dich_hien_thi()
{
unsigned int in,tg;
tg=font[0];
for(in=0;in<=d-1;in++)
{
font[in]=font[in+1];
}
font[d-1]=tg;
}
///////////////////
void hienthi(unsigned char x)
{
unsigned int i,temp;
for(i=0;i<8;i++)
{
temp=x;
temp=temp&0x80; //lay ra bit dau tien (bit 7)
if(temp==0x80)//so sanh bit
DATA1=1; // = 1 thi xuat data vao chip =1
else
DATA1=0; // nguoc lai thi data =0 dc xuat vao chip
x*=2; // dich bit lay bit trong so thap
SCK1=0; // tao xung tren chan 11
SCK1=1; // 1 xung dc dua vao 1 bit
}
}
///////////////////////
void hienthi1(unsigned char x)
{
unsigned int i,temp;
for(i=0;i<8;i++)
{
temp=x;
temp=temp&0x80; //lay ra bit dau tien (bit 7)
if(temp==0x80) //so sanh bit
DATA2=1; // bang 1 thi xuat data vao chip =1
else
DATA2=0; // nguoc lai thi data =0 dc xuat vao chip
x*=2; // dich bit lay bit trong so thap
SCK2=0; // tao xung tren chan 11
SCK2=1; // 1 xung dc dua vao 1 bit
}
}
void matrix()
{
for(k=0;k<5;k++)
{
for(j=0;j<8;j++)
{
delay1(30);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
LACH1=0;
LACH1=1;
hienthi1(ma[j]);
LACH2=0;
LACH2=1;
hienthi(font[(j+32)]);
hienthi(font[(j+24)]);
hienthi(font[(j+16)]);
hienthi(font[(j+8)]);
hienthi(font[j]);
LACH1=0;
LACH1=1;
}
}
dich_hien_thi();
}
void main()
{
xuly();
while(1)
{
matrix();
}
}
mong mọi người chỉ mình cách sửa !
code mình đây :
#include<REG52.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<font.c>
//////////////////////////////////
sbit DATA1 = P3^0;
sbit SCK1 = P3^1;
sbit LACH1 = P3^2;
sbit DATA2 = P2^0;
sbit SCK2 = P2^1;
sbit LACH2 = P2^2;
unsigned char temp1;
unsigned int i,j,d,k,c;
unsigned char x;
unsigned char string[]= " TRAN VAN HOANG ";
unsigned char idata font[195];
unsigned char ma[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void xuly()
{
unsigned int i,j,l;
l=(strlen(string)); //l la so dai cua xau ki tu
for(i=0;i<=l-1;i++)
{
for(j=0;j<8;j++)
{
font[8*i+j]=font2[8*(string[i]-32)+j];
d++;
}
}
}
//******************ham tao tre ********************/
void delay1(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++)
{}
}
/******** ham dich hien thi******/
void dich_hien_thi()
{
unsigned int in,tg;
tg=font[0];
for(in=0;in<=d-1;in++)
{
font[in]=font[in+1];
}
font[d-1]=tg;
}
///////////////////
void hienthi(unsigned char x)
{
unsigned int i,temp;
for(i=0;i<8;i++)
{
temp=x;
temp=temp&0x80; //lay ra bit dau tien (bit 7)
if(temp==0x80)//so sanh bit
DATA1=1; // = 1 thi xuat data vao chip =1
else
DATA1=0; // nguoc lai thi data =0 dc xuat vao chip
x*=2; // dich bit lay bit trong so thap
SCK1=0; // tao xung tren chan 11
SCK1=1; // 1 xung dc dua vao 1 bit
}
}
///////////////////////
void hienthi1(unsigned char x)
{
unsigned int i,temp;
for(i=0;i<8;i++)
{
temp=x;
temp=temp&0x80; //lay ra bit dau tien (bit 7)
if(temp==0x80) //so sanh bit
DATA2=1; // bang 1 thi xuat data vao chip =1
else
DATA2=0; // nguoc lai thi data =0 dc xuat vao chip
x*=2; // dich bit lay bit trong so thap
SCK2=0; // tao xung tren chan 11
SCK2=1; // 1 xung dc dua vao 1 bit
}
}
void matrix()
{
for(k=0;k<5;k++)
{
for(j=0;j<8;j++)
{
delay1(30);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
hienthi(0x00);
LACH1=0;
LACH1=1;
hienthi1(ma[j]);
LACH2=0;
LACH2=1;
hienthi(font[(j+32)]);
hienthi(font[(j+24)]);
hienthi(font[(j+16)]);
hienthi(font[(j+8)]);
hienthi(font[j]);
LACH1=0;
LACH1=1;
}
}
dich_hien_thi();
}
void main()
{
xuly();
while(1)
{
matrix();
}
}
mong mọi người chỉ mình cách sửa !
Comment