OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4745|回复: 6

求各位大神指教 小女子跪谢了

[复制链接]

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-3-17
在线时间
0 小时
发表于 2014-4-30 16:55:06 | 显示全部楼层 |阅读模式
我用1602作为显示屏进行计时,我打算按键按下时计时开始,可是为什么不行呢????求指教,

#include<reg52.h>
#include <intrins.h>
sbit LCD_RS = P2^6;             
sbit LCD_RW = P2^5;
sbit LCD_EN = P2^7;
sbit K1=P2^4;
unsigned char tt,miao,fen,shi;
unsigned char a[]="     Conter       ";
char b[]="    00:00:00       ";/**********延时函数**********/
void delay(int ms)
{                           
   int i;
   while(ms--)
   {
     for(i = 0; i< 250; i++)
     {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
   }
}

delay1( unsigned int z)

 unsigned char x,y;
 for( x=z;x>0;x--)
 for( y=110;y>0;y--);
}
/******测忙函数********/

bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     result = (bit)(P0&0x80);
    LCD_EN = 0;
    return result; 
}
/*****写指令数据******/
void write_com(unsigned char com)
{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_(); 
    P0 = com;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0;  
}
/*****写显示数据*****/
void write_date (unsigned char date) 
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = date;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0; 
}

void write_sfm(unsigned char add,unsigned char date)

  unsigned char shi,ge;
  shi=date/10;
  ge=date%10;
  write_com(0x80+0x40+add);
  write_date(0x30+shi);
  write_date(0x30+ge);
 
}

/****LCD初始化****/
void init()
{   
    unsigned int i;                     
    write_com(0x38);       
    delay(5);
    write_com(0x38);         
    delay(5);
    write_com(0x38);         
    delay(5);

     write_com(0x0c);         
    delay(5);
     write_com(0x06);          
    delay(5);
     write_com(0x01);      
    delay(5);
write_com(0x80);
  for( i=0;i<16 ;i++)
  { 
     write_date( a);
delay1(5);
  }
  write_com(0x80+0x40);
  for(i=0;i<12;i++)
  {
      write_date(b);
      delay1(5);
  }
  TMOD=0X01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}


void main()

 //unsigned char i;
 init();
 while(1)
 {
  ; 
}
}
void timer0() interrupt 1

TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    if(K1==0)
    {
         delay1(5);
if(K1==0)
{
 tt++;
          if(tt==20)
  { 
           tt=0;
    miao++;
if(miao==60)

        miao=0; 
fen++;
    if(fen==60)
    { 
                     fen=0;
     shi++;
     if(shi==24)
 { 
                             shi=0;
                           }
      write_sfm( 4,shi);
     }
      write_sfm(7,fen);
 }
      write_sfm(10,miao);
}
        }
     }

}

正在为生存奋斗的回族女孩。因为我有信仰,所以我相信以后的生活更加美好。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2014-3-16
在线时间
4 小时
发表于 2014-4-30 19:24:31 | 显示全部楼层
按键的判断怎么能放在定时器里....时间到了才判断按键........
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-4-30 20:58:58 | 显示全部楼层
按键扫描还是放到main里面吧
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-3-17
在线时间
0 小时
 楼主| 发表于 2014-5-1 08:43:41 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
我这样写他还是不对啊。。。你帮我看看有什么问题吗?谢谢
#include<reg52.h>
#include <intrins.h>
sbit LCD_RS = 2^6;             
sbit LCD_RW = 2^5;
sbit LCD_EN = 2^7;
sbit K1=P2^4;
unsigned char tt,miao,fen,shi;
unsigned char a[]="     Conter    ";
char b[]="    00:00:00";/**********延时函数**********/
void delay(int ms)
{                           
   int i;
   while(ms--)
   {
     for(i = 0; i< 250; i++)
     {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
   }
}

delay1( unsigned int z)

 unsigned char x,y;
 for( x=z;x>0;x--)
 for( y=110;y>0;y--);
}
/******测忙函数********/

bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     result = (bit)(P0&0x80);
    LCD_EN = 0;
    return result; 
}
/*****写指令数据******/
void write_com(unsigned char com)
{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_(); 
    0 = com;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0;  
}
/*****写显示数据*****/
void write_date (unsigned char date) 
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    0 = date;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0; 
}

void write_sfm(unsigned char add,unsigned char date)
{   
   unsigned char shi,ge;
  shi=date/10;
  ge=date%10;
  write_com(0x80+0x40+add);
  write_date(0x30+shi);
  write_date(0x30+ge);
 
}

/****LCD初始化****/
void init()
{   
    unsigned int i;                     
    write_com(0x38);       
    delay(5);
    write_com(0x38);         
    delay(5);
    write_com(0x38);         
    delay(5);

     write_com(0x0c);         
    delay(5);
     write_com(0x06);          
    delay(5);
     write_com(0x01);      
    delay(5);
write_com(0x80);
  for( i=0;i<16 ;i++)
  { 
     write_date( a);
 delay1(5);
  }
  write_com(0x80+0x40);
  for(i=0;i<12;i++)
  {
      write_date(b);
      delay1(5);
  }
  TMOD=0X01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
/*void disply()
{
  
}*/

void main()

  //unsigned char i;
  init();
  while(1)
  {
      
     if(K1==0)
        {
          delay1(10);
       
          while(K1==0)

         {
                   delay1(5);
             if(tt==20)
          { 
            tt=0;
     miao++;
 if(miao==60)
 { 
         miao=0; 
 fen++;
     if(fen==60)
     { 
                      fen=0;
      shi++;
       if(shi==24)
  { 
                             shi=0;
                           }
       write_sfm( 4,shi);
      }
       write_sfm(7,fen);
  }
       write_sfm(10,miao);

      }
          } 
    }
}
void timer0() interrupt 1

  
     

    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    tt++;
}
正在为生存奋斗的回族女孩。因为我有信仰,所以我相信以后的生活更加美好。
回复 支持 反对

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-3-17
在线时间
0 小时
 楼主| 发表于 2014-5-1 08:44:43 | 显示全部楼层
回复【3楼】Badu_Space:
---------------------------------
我这样写他还是不对啊。。。你帮我看看有什么问题吗?谢谢
#include<reg52.h>
#include <intrins.h>
sbit LCD_RS = 2^6;             
sbit LCD_RW = 2^5;
sbit LCD_EN = 2^7;
sbit K1=P2^4;
unsigned char tt,miao,fen,shi;
unsigned char a[]="     Conter    ";
char b[]="    00:00:00";/**********延时函数**********/
void delay(int ms)
{                           
   int i;
   while(ms--)
   {
     for(i = 0; i< 250; i++)
     {
      _nop_();
      _nop_();
      _nop_();
      _nop_();
     }
   }
}

delay1( unsigned int z)

 unsigned char x,y;
 for( x=z;x>0;x--)
 for( y=110;y>0;y--);
}
/******测忙函数********/

bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
     result = (bit)(P0&0x80);
    LCD_EN = 0;
    return result; 
}
/*****写指令数据******/
void write_com(unsigned char com)
{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_(); 
    0 = com;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0;  
}
/*****写显示数据*****/
void write_date (unsigned char date) 
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    0 = date;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 1;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    LCD_EN = 0; 
}

void write_sfm(unsigned char add,unsigned char date)
{   
   unsigned char shi,ge;
  shi=date/10;
  ge=date%10;
  write_com(0x80+0x40+add);
  write_date(0x30+shi);
  write_date(0x30+ge);
 
}

/****LCD初始化****/
void init()
{   
    unsigned int i;                     
    write_com(0x38);       
    delay(5);
    write_com(0x38);         
    delay(5);
    write_com(0x38);         
    delay(5);

     write_com(0x0c);         
    delay(5);
     write_com(0x06);          
    delay(5);
     write_com(0x01);      
    delay(5);
write_com(0x80);
  for( i=0;i<16 ;i++)
  { 
     write_date( a);
 delay1(5);
  }
  write_com(0x80+0x40);
  for(i=0;i<12;i++)
  {
      write_date(b);
      delay1(5);
  }
  TMOD=0X01;
  TH0=(65536-50000)/256;
  TL0=(65536-50000)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
/*void disply()
{
  
}*/

void main()

  //unsigned char i;
  init();
  while(1)
  {
      
     if(K1==0)
        {
          delay1(10);
       
          while(K1==0)

         {
                   delay1(5);
             if(tt==20)
          { 
            tt=0;
     miao++;
 if(miao==60)
 { 
         miao=0; 
 fen++;
     if(fen==60)
     { 
                      fen=0;
      shi++;
       if(shi==24)
  { 
                             shi=0;
                           }
       write_sfm( 4,shi);
      }
       write_sfm(7,fen);
  }
       write_sfm(10,miao);

      }
          } 
    }
}
void timer0() interrupt 1

  
     

    TH0=(65536-50000)/256;
    TL0=(65536-50000)%256;
    tt++;
}
正在为生存奋斗的回族女孩。因为我有信仰,所以我相信以后的生活更加美好。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-5-1 13:17:45 | 显示全部楼层
下载验证一下,这样看着没问题
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

13

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2014-3-17
在线时间
0 小时
 楼主| 发表于 2014-6-6 16:45:26 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
谢谢
正在为生存奋斗的回族女孩。因为我有信仰,所以我相信以后的生活更加美好。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-23 17:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表