微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 单片机检测方波频率显示到液晶屏有问题,求指教

单片机检测方波频率显示到液晶屏有问题,求指教

时间: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);     //??ê?μ??·
    }

说清楚,什么问题,帖个程序怎么找?

你这粘一大段程序,又问了一个如此笼统的问题,谁能知道你问题出来哪里了呀

程序注释都是乱码,注释写清楚了,我们看了也方便,节约时间

您好,我做的是读方波频率显示到液晶屏上,贴出来不知道为什么是乱码,问题已经解决了,谢谢你哦~

嗯嗯,我知道问题了,谢谢你~

嘿嘿,发出来才知道是乱码,问题解决了,不过还是非常感谢你啊~

您好,能加一下你好友吗

然而我并未帮到你,不用谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top