1850|0

18

帖子

0

资源

一粒金砂(中级)

问一下我这个外部中断定时50ms测频率怎么没显示啊?呜呜。。

#include
#include


sbit RS=P2^0;    //寄存器选择位,将RS位定义为P2.0引脚
sbit RW=P2^1;    //读写选择位,将RW位定义为P2.1引脚
sbit E=P2^2;     //使能信号位,将E位定义为P2.2引脚
sbit BF=P0^7;
sbit fmq=P3^6;
sbit P10=P1^0;
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
unsigned int num1;
unsigned int num2;
unsigned int count1;
unsigned int count2;
unsigned char  result1[15]={0};
//unsigned int i;

unsigned int i;
  void delay1ms(uint i)
{

uchar j;
while(i--)
{
for(j=0;j<115;j++)          //1ms基准延时程序
{
  ;
}


}

}
  void delay1ms1()
{
                   unsigned char i,j;       
                 for(i=0;i<10;i++)
                  for(j=0;j<33;j++)
           ;                 
}

void delay500us()
{

unsigned char j;

for(j=0;j<57;j++)          //500us基准延时程序
{
  ;
}
}  
void beep()        //产生1KHZ频率声音的函数
{
        fmq=0;
        delay500us();
        fmq=1;
        delay500us();       

}
/*****************************************************
函数功能:延时若干毫秒
入口参数:n
***************************************************/
void delay(unsigned int n)
{
           unsigned int i;
        for(i=0;i         delay1ms1();
}
/*****************************************************
函数功能:判断液晶模块的忙碌状态
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
bit BusyTest(void)
  {
            bit result;
                RS=0;       //根据规定,RS为低电平,RW为高电平时,可以读状态
            RW=1;
            E=1;        //E=1,才允许读写
            _nop_();   //空操作
            _nop_();
            _nop_();
                   _nop_();   //空操作四个机器周期,给硬件反应时间       
            result=BF;  //将忙碌标志电平赋给result
                E=0;
            return result;
  }
/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:dictate
***************************************************/
void Write_com (unsigned char dictate)
{   
    while(BusyTest()==1); //如果忙就等待
         RS=0;                  //根据规定,RS和R/W同时为低电平时,可以写入指令
         RW=0;   
         E=0;                   //E置低电平(写指令时,
                             // 就是让E从0到1发生正跳变,所以应先置"0"
         _nop_();
         _nop_();             //空操作两个机器周期,给硬件反应时间
         P0=dictate;            //将数据送入P0口,即写入指令或地址
         _nop_();
         _nop_();
         _nop_();
         _nop_();               //空操作四个机器周期,给硬件反应时间
         E=1;                   //E置高电平
         _nop_();
         _nop_();
         _nop_();
         _nop_();               //空操作四个机器周期,给硬件反应时间
          E=0;                  //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
/*****************************************************
函数功能:指定字符显示的实际地址
入口参数:x
***************************************************/
void WriteAddress(unsigned char x)
{
     Write_com(x|0x80); //显示位置的确定方法规定为"80H+地址码x"       
}
/*****************************************************
函数功能:将数据(字符的标准ASCII码)写入液晶模块
入口参数:y(为字符常量)
***************************************************/
void WriteData(unsigned char y)
{
    while(BusyTest()==1);  
          RS=1;           //RS为高电平,RW为低电平时,可以写入数据
          RW=0;
          E=0;            //E置低电平(写指令时,,
                       // 就是让E从0到1发生正跳变,所以应先置"0"
          P0=y;           //将数据送入P0口,即将数据写入液晶模块
          _nop_();
          _nop_();
          _nop_();
              _nop_();       //空操作四个机器周期,给硬件反应时间
          E=1;          //E置高电平
          _nop_();
          _nop_();
          _nop_();
          _nop_();        //空操作四个机器周期,给硬件反应时间
          E=0;            //当E由高电平跳变成低电平时,液晶模块开始执行命令
}
/*****************************************************
函数功能:对LCD的显示模式进行初始化设置
***************************************************/
void LcdInt(void)
{
           delay(15);             //延时15ms,首次写指令时应给LCD一段较长的反应时间
           Write_com(0x38);  //显示模式设置:16×2显示,5×7点阵,8位数据接口
        delay(5);   //延时5ms 
        Write_com(0x38);
        delay(5);
        Write_com(0x38); //3次写 设置模式
        delay(5);
        Write_com(0x0F);  //显示模式设置:显示开,有光标,光标闪烁
        delay(5);
        Write_com(0x06);  //显示模式设置:光标右移,字符不移
        delay(5);                                                                                          
        Write_com(0x01);  //清屏幕指令,将以前的显示内容清除
        delay(5);
}


void f0_test(void)
{  
           count1=0;
        EA=1;                  //开总中断
        ET0=1;                                   //允许定时器T0
    EX0=1;
        IE0=1;       
    IT0=0;
       

        TMOD=0x01;             //使用定时器T0的模式1
        TH0=(65536-50000)/256; //定时器T0的高8位赋初值
        TL0=(65536-50000)%256; //定时器T0的高8位赋初值
                               //定时器中断溢出          

        TR0=1;                                   //启动定时器T0  
       
         TF0=1;  
                                
       
   }


    void display(void)
   {
                   
          int i;
               
               

                //result1[4]=       
                result1[3]=(num1%10)+'0';
        result1[2]=((num1/10)%10)+'0'   ;
                result1[1]=((num1/100)%10)+'0'        ;
                result1[0]=(num1/1000)+'0';
       

        delay(5);
                WriteAddress(0x02);  // 设置显示位置为第一行的第1个字
                delay(5);
                  i = 0;
                while(result1 != '\0')    //'\0'是数组结束标志
                        {                                                // 显示字符        WWW.RICHMCU.COM
                                        WriteData(result1);
                                        i++;
                                        delay(10);
                        }  
               
          
                                       
        }
       






void main()
{  
   count1=0;
   count2=0;
  while(1)
  {       
    //LcdInt();
         f0_test();
        display();
    // panduan();
//        Write_com(0x0c);
        // count1=0;
   }
}


           void int_count0(void) interrupt 0
{
   count1++;
}



  void Time0(void) interrupt 1  //“interrupt”声明函数为中断服务函数
                 //其后的1为定时器T0的中断编号;0表示使用第0组工作寄存器
{          
      TR0=0;
      //count2++;
          
          num1=count1;
          //count1=0;
         // TH0=(65536-50000)/256; //定时器T0的高8位赋初值
          //TL0=(65536-50000)%256; //定时器T0的高8位赋初值

}
此帖出自单片机论坛

回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/6 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表