单片机检测方波频率显示到液晶屏有问题,求指教
时间:10-02
整理:3721RD
点击:
/**************************************************/
/* ía2??D??2a·?2¨?μ?ê */
/*************************************************/
#include<reg52.h>
#include <intrins.h>
#include <MATH.H>
#define uint unsigned int //?¨ò?uint′úì?unsigned int
#define uchar unsigned char //?¨ò?uchar′úì?unsigned char
#define ulong unsigned long //?¨ò?ulong′úì?unsigned long
uchar code count[]="0123456789";
uint counter=0; //???????μ??μ???êy
uint ge,shi,bai,qian,wan,calsp,f,a; // ?D??ê±??
ulong Fre;
sbit rs=P3^5;
sbit rw=P3^6;
sbit en=P3^4;
sbit LCD_PSB = P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
void delay(uint z);
void lcd_init();
void timer_Fre_init();
bit lcd_busy() ;
void write_cmd(uchar);
void write_data(uchar);
void display_num();
void lcd_pos(uchar X,uchar Y);
void read_frequency();
void display_ceshi();
void display();
/**************************************************/
/* ?÷oˉêy */
/*************************************************/
void main()
{
EA=1;//?a??×ü?D??
lcd_init();
//read_frequency();
timer_Fre_init(); //?¨ê±?÷oíía2??D??3?ê??ˉ
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/**************************************************/
/* ?óê±oˉêy 1ms */
/*************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************************/
/* 128643?ê??ˉ */
/*************************************************/
void lcd_init()
{
wela=0;
dula=0;
LCD_PSB = 1;
write_cmd(0x34); //à?3???á?2ù×÷
delay(5);
write_cmd(0x30); //?ù±???á?2ù×÷
delay(5);
write_cmd(0x0c); //??ê??a£?1?1a±ê
delay(5);
write_cmd(0x01); //??3yLCDμ???ê??úèY
delay(5);
}
/*******************************************************************/
/* */
/*?ì2éLCD?|×′ì? */
/*lcd_busy?a1ê±£??|£?μè′y?£lcd-busy?a0ê±,?D£??éD′??á?ó?êy?Y?£ */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
rs = 0;
rw = 1;
en = 1;
delay(5);
result = (bit)(P0&0x80);
en = 0;
return(result);
}
/*******************************************************************/
/* */
/*D′??á?êy?Yμ?LCD */
/*RS=L£?RW=L£?E=????3?£?D0-D7=??á????£ */
/* */
/*******************************************************************/
void write_cmd(uchar cmd)
{
while(lcd_busy());
rs = 0; //?üá?
rw = 0; // ?á
en = 0;
P0 = cmd;
delay(5);
en = 1;
delay(5);
en = 0;
}
/*******************************************************************/
/* */
/*D′??ê?êy?Yμ?LCD */
/*RS=H£?RW=L£?E=????3?£?D0-D7=êy?Y?£ */
/* */
/*******************************************************************/
void write_data(uchar dat)
{
while(lcd_busy());
rs = 1;
rw = 0;
en = 0;
P0 = dat;
delay(5);
en = 1;
delay(5);
en = 0;
}
/**************************************************/
/* ?D??3?ê??ˉ */
/*************************************************/
void timer_Fre_init() //?¨ê±?÷oíía2??D??3?ê??ˉ
{
EX0=1;//?aía2??D??0
IT0=1; //éè??3é???μ??′¥·¢·?ê?
TMOD=0x01; //éè???¨ê±?÷0?a?£ê?1£??′16????êy?£ê?
TH0=(65536-50000)/256; //??êyê±???a50ms
TL0=(65536-50000)%256;
ET0=1;//?a???¨ê±?÷0?D??
TR0=1;//???ˉ?¨ê±?÷0
}
/**************************************************/
/* ?¨ê±?÷0?D?? */
/*************************************************/
void timer0() interrupt 1
{
TH0=(65536-50000)/256; ;//??D?×°è?3??μ£???êyê±???a50ms
TL0=(65536-50000)%256 ;
calsp++;
if(calsp==20)
{
calsp=0;
f=1;
//EX1=0;
//IT1=0;
//ET0=0;
// TR0=0;
}
}
/**************************************************/
/* ía2??D??0 */
/*************************************************/
void IN_T0() interrupt 0
{
counter++;
}
/*******************************************************************/
/* */
/*?á?μ?ê */
/*?a?¨ê±?÷?D??0£??áè??μ?ê */
/* */
/*******************************************************************/
void read_frequency()
{
timer_Fre_init(); //?¨ê±?÷oíía2??D??3?ê??ˉ
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/*********************************************************/
/* */
/* ??ê?3ìDò */
/* */
/*********************************************************/
void display(uchar x,uchar y,uchar dat) //òo?§DDoíáD??ê?£?X£oDD Y£oáD dat:òa??ê?μ?êy?Y
{
lcd_pos(x,y);
write_data(dat);
}
void display_num()
{
//EX1=0;
// ET0=0;
// TR0=0;
//IT1=0;
Fre=counter;
counter=0;
ge=Fre%10000%1000%100%10;
shi=Fre%10000%1000%100/10;
bai=Fre%10000%1000/100;
qian=Fre%10000/1000;
wan=Fre/10000;
display(0,4,count[ge]);
delay(5);
display(0,3,count[shi]);
delay(5);
display(0,2,count[bai]);
delay(5);
display(0,1,count[qian]);
delay(5);
display(0,0,count[wan]);
delay(5);
//EX1=1;
// IT1=1;
// ET0=1;
// TR0=1;
}
/*********************************************************/
/* */
/* 2aê???ê? */
/* */
/*********************************************************/
void display_ceshi()
{
a++;
display(0,1,count[a]);
}
/*********************************************************/
/* */
/* éè?¨??ê????? */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_cmd(pos); //??ê?μ??·
}
/* ía2??D??2a·?2¨?μ?ê */
/*************************************************/
#include<reg52.h>
#include <intrins.h>
#include <MATH.H>
#define uint unsigned int //?¨ò?uint′úì?unsigned int
#define uchar unsigned char //?¨ò?uchar′úì?unsigned char
#define ulong unsigned long //?¨ò?ulong′úì?unsigned long
uchar code count[]="0123456789";
uint counter=0; //???????μ??μ???êy
uint ge,shi,bai,qian,wan,calsp,f,a; // ?D??ê±??
ulong Fre;
sbit rs=P3^5;
sbit rw=P3^6;
sbit en=P3^4;
sbit LCD_PSB = P3^7;
sbit wela = P2^6;
sbit dula = P2^7;
void delay(uint z);
void lcd_init();
void timer_Fre_init();
bit lcd_busy() ;
void write_cmd(uchar);
void write_data(uchar);
void display_num();
void lcd_pos(uchar X,uchar Y);
void read_frequency();
void display_ceshi();
void display();
/**************************************************/
/* ?÷oˉêy */
/*************************************************/
void main()
{
EA=1;//?a??×ü?D??
lcd_init();
//read_frequency();
timer_Fre_init(); //?¨ê±?÷oíía2??D??3?ê??ˉ
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/**************************************************/
/* ?óê±oˉêy 1ms */
/*************************************************/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/**************************************************/
/* 128643?ê??ˉ */
/*************************************************/
void lcd_init()
{
wela=0;
dula=0;
LCD_PSB = 1;
write_cmd(0x34); //à?3???á?2ù×÷
delay(5);
write_cmd(0x30); //?ù±???á?2ù×÷
delay(5);
write_cmd(0x0c); //??ê??a£?1?1a±ê
delay(5);
write_cmd(0x01); //??3yLCDμ???ê??úèY
delay(5);
}
/*******************************************************************/
/* */
/*?ì2éLCD?|×′ì? */
/*lcd_busy?a1ê±£??|£?μè′y?£lcd-busy?a0ê±,?D£??éD′??á?ó?êy?Y?£ */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
rs = 0;
rw = 1;
en = 1;
delay(5);
result = (bit)(P0&0x80);
en = 0;
return(result);
}
/*******************************************************************/
/* */
/*D′??á?êy?Yμ?LCD */
/*RS=L£?RW=L£?E=????3?£?D0-D7=??á????£ */
/* */
/*******************************************************************/
void write_cmd(uchar cmd)
{
while(lcd_busy());
rs = 0; //?üá?
rw = 0; // ?á
en = 0;
P0 = cmd;
delay(5);
en = 1;
delay(5);
en = 0;
}
/*******************************************************************/
/* */
/*D′??ê?êy?Yμ?LCD */
/*RS=H£?RW=L£?E=????3?£?D0-D7=êy?Y?£ */
/* */
/*******************************************************************/
void write_data(uchar dat)
{
while(lcd_busy());
rs = 1;
rw = 0;
en = 0;
P0 = dat;
delay(5);
en = 1;
delay(5);
en = 0;
}
/**************************************************/
/* ?D??3?ê??ˉ */
/*************************************************/
void timer_Fre_init() //?¨ê±?÷oíía2??D??3?ê??ˉ
{
EX0=1;//?aía2??D??0
IT0=1; //éè??3é???μ??′¥·¢·?ê?
TMOD=0x01; //éè???¨ê±?÷0?a?£ê?1£??′16????êy?£ê?
TH0=(65536-50000)/256; //??êyê±???a50ms
TL0=(65536-50000)%256;
ET0=1;//?a???¨ê±?÷0?D??
TR0=1;//???ˉ?¨ê±?÷0
}
/**************************************************/
/* ?¨ê±?÷0?D?? */
/*************************************************/
void timer0() interrupt 1
{
TH0=(65536-50000)/256; ;//??D?×°è?3??μ£???êyê±???a50ms
TL0=(65536-50000)%256 ;
calsp++;
if(calsp==20)
{
calsp=0;
f=1;
//EX1=0;
//IT1=0;
//ET0=0;
// TR0=0;
}
}
/**************************************************/
/* ía2??D??0 */
/*************************************************/
void IN_T0() interrupt 0
{
counter++;
}
/*******************************************************************/
/* */
/*?á?μ?ê */
/*?a?¨ê±?÷?D??0£??áè??μ?ê */
/* */
/*******************************************************************/
void read_frequency()
{
timer_Fre_init(); //?¨ê±?÷oíía2??D??3?ê??ˉ
while(1)
{
if(f==1)
{
f=0;
display_num();
}
}
}
/*********************************************************/
/* */
/* ??ê?3ìDò */
/* */
/*********************************************************/
void display(uchar x,uchar y,uchar dat) //òo?§DDoíáD??ê?£?X£oDD Y£oáD dat:òa??ê?μ?êy?Y
{
lcd_pos(x,y);
write_data(dat);
}
void display_num()
{
//EX1=0;
// ET0=0;
// TR0=0;
//IT1=0;
Fre=counter;
counter=0;
ge=Fre%10000%1000%100%10;
shi=Fre%10000%1000%100/10;
bai=Fre%10000%1000/100;
qian=Fre%10000/1000;
wan=Fre/10000;
display(0,4,count[ge]);
delay(5);
display(0,3,count[shi]);
delay(5);
display(0,2,count[bai]);
delay(5);
display(0,1,count[qian]);
delay(5);
display(0,0,count[wan]);
delay(5);
//EX1=1;
// IT1=1;
// ET0=1;
// TR0=1;
}
/*********************************************************/
/* */
/* 2aê???ê? */
/* */
/*********************************************************/
void display_ceshi()
{
a++;
display(0,1,count[a]);
}
/*********************************************************/
/* */
/* éè?¨??ê????? */
/* */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{
uchar pos;
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
pos = X+Y ;
write_cmd(pos); //??ê?μ??·
}
说清楚,什么问题,帖个程序怎么找?
你这粘一大段程序,又问了一个如此笼统的问题,谁能知道你问题出来哪里了呀
程序注释都是乱码,注释写清楚了,我们看了也方便,节约时间
您好,我做的是读方波频率显示到液晶屏上,贴出来不知道为什么是乱码,问题已经解决了,谢谢你哦~
嗯嗯,我知道问题了,谢谢你~
嘿嘿,发出来才知道是乱码,问题解决了,不过还是非常感谢你啊~
您好,能加一下你好友吗
然而我并未帮到你,不用谢