久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2204|回復(fù): 5
收起左側(cè)

LCD秒表 誰(shuí)能幫我看看這個(gè)程序有錯(cuò)誤 就差一點(diǎn)實(shí)現(xiàn)不了

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 15 黑幣 回復(fù)本帖可獲得 5 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
ID:433060 發(fā)表于 2018-12-6 20:32 | 顯示全部樓層 |閱讀模式
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
#define delaynop(){_nop_;_nop_;_nop_;_nop_;}
sbit LCD_RS = P2^0;  //寄存器選擇(RS=0,命令寄存器;RS=1,數(shù)據(jù)寄存器)            
sbit LCD_RW = P2^1;  //讀寫(xiě)端(RW=1,讀;RW=0,寫(xiě))
sbit LCD_EP = P2^2;

void delay(int ms)
  {                    //延時(shí)子程序
     int i;
      while(ms--)
       {
           for(i = 0; i< 120; i++) ;

          }
          }

/****************查忙函數(shù)************************/   
  bit lcd_bz()
    {                        
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EP = 1;
     _nop_();
     _nop_();                                                  
     _nop_();
     _nop_();
     result = (bit)(P0 & 0x80);  //檢測(cè)P0最高位是否為1
     LCD_EP = 0;
     return result;//返回查忙結(jié)果
    }

/****************寫(xiě)命令函數(shù)************************/  
void lcd_wcmd(uchar cmd)
{                          // 寫(xiě)入指令數(shù)據(jù)到LCD
         while(lcd_bz());
          LCD_RS = 0;
         LCD_RW = 0;
         LCD_EP = 0;
         _nop_();
         _nop_();
         P0 = cmd; //將8位指令通過(guò)P0口傳給1602
         _nop_();
         _nop_(); //用于產(chǎn)生一個(gè)脈沖寬度
         _nop_();
         _nop_();
         LCD_EP = 1;
        _nop_();
        _nop_();
        _nop_();
         _nop_();
         LCD_EP = 0;  
         }
/*****設(shè)定顯示位置***********/        
     void lcd_pos(uchar pos)
     {                        
       lcd_wcmd(pos | 0x80);
      }

/****************寫(xiě)數(shù)據(jù)函數(shù)************************/  
   void lcd_wdat(uchar dat)
     {                   //寫(xiě)入字符顯示數(shù)據(jù)到LCD
       while(lcd_bz());
       LCD_RS = 1;
       LCD_RW = 0;
       LCD_EP = 0;
       P0 = dat;  //將8位數(shù)據(jù)通過(guò)P0口傳給1602
       _nop_();
       _nop_();   //用于產(chǎn)生一個(gè)脈沖寬度
        _nop_();
       _nop_();
        LCD_EP = 1;
       _nop_();
       _nop_();
        _nop_();
        _nop_();
       LCD_EP = 0;
        }
  /*******LCD初始化設(shè)定*********/         
      void lcd_init()
      {                  
        lcd_wcmd(0x38);     //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
        delay(1);
        lcd_wcmd(0x0c);     //顯示開(kāi),關(guān)光標(biāo)
        delay(1);
        lcd_wcmd(0x06);     //移動(dòng)光標(biāo)
        delay(1);                                                     
        lcd_wcmd(0x01);     //清除LCD的顯示內(nèi)容
        delay(1);
         }


sbit k1=P1^0;
sbit k2=P1^1;

uchar keycount=0;
uchar code msg1[]={"second watch 0"};
uchar code msg2[]={">>>>         "};
uchar code prompts[][16]={
{"::1---->      "},
{"::1---->::2"   },
{"::1->2::3-->  "},
{"::1->2::3-->4 "},
};
uchar time_buffer[]={0,0,0,0};
uchar LCD_display_buffer[]={"00:00:00:00"};


void show_second()
{
uchar i;
lcd_pos(0x45);
for(i=3;i!=0xff;i--)
{
LCD_display_buffer[2*i+1]=time_buffer[i]/10+'0';
LCD_display_buffer[2*i]=time_buffer[i]%10+'0';
lcd_wdat(LCD_display_buffer[2*i+1]);
lcd_wdat(LCD_display_buffer[2*i]);
lcd_wdat(":");
}
}

void time0() interrupt 1 using 0
{
TH0=-10000/256;
TL0=-10000%256;
time_buffer[0]++;
if (time_buffer[0]==100)
{
time_buffer[0]=0;
time_buffer[1]++;
}

if (time_buffer[1]==60)
{
time_buffer[1]=0;
time_buffer[2]++;
}

if (time_buffer[2]==60)
{
time_buffer[2]=0;
time_buffer[3]++;
}

if (time_buffer[3]==24)
{
time_buffer[3]=0;
}
}


  void display_string(uchar * str,uchar lineno)       
{
uchar k;
lcd_pos(lineno);
for(k=0;k<16;k++)
lcd_wdat(str[k]);
}

void main()
{
uchar i;
IE=0X82;
TMOD=0X01;
TH0=-10000/256;
TL0=-10000%256;
lcd_init();
display_string(msg1,0x00);
display_string(msg2,0x40);
EA=1;
ET0=1;
while(1)
{
if(k1==0)
{
delay(100);
i=++keycount;
switch(i)
{
case1:
case3:TR0=1;
       display_string(prompts[i-1],0);
           break;
case2:
case4:TR0=0;
       display_string(prompts[i-1],0);
           break;
           default:TR0=0;
           break;
}
while(k1==0);
}
else
if(k2==0)
{
TR0=0;
keycount=0;
for(i=0;i<4;i++)
time_buffer[i]=0;
display_string(msg1,0);
delay(100);
while(k2==0);
}
show_second();
}               
}

回復(fù)

使用道具 舉報(bào)

ID:441271 發(fā)表于 2018-12-6 21:49 | 顯示全部樓層
我只是來(lái)賺黑幣而已,這個(gè)程序好長(zhǎng),沒(méi)時(shí)間看完,不過(guò)感覺(jué)TH0=-10000/256;這個(gè)怪怪的,為什么是負(fù)的。。
回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 2018-12-6 23:05 | 顯示全部樓層
給你改了,對(duì)比一下就知道哪里錯(cuò)了。



  1. #include<reg51.h>
  2. #include<intrins.h>

  3. #define uchar unsigned char
  4. #define uint  unsigned int

  5. #define delaynop() {_nop_;_nop_;_nop_;_nop_;}

  6. sbit LCD_RS = P2^0;  //寄存器選擇(RS=0,命令寄存器;RS=1,數(shù)據(jù)寄存器)            
  7. sbit LCD_RW = P2^1;  //讀寫(xiě)端(RW=1,讀;RW=0,寫(xiě))
  8. sbit LCD_EP = P2^2;

  9. void delay(int ms)
  10. {                    //延時(shí)子程序
  11.         int i;
  12.         while(ms--)
  13.         {
  14.                 for(i = 0; i< 120; i++) ;

  15.         }
  16. }

  17. /****************查忙函數(shù)************************/   
  18. bit lcd_bz()
  19. {                        
  20.         bit result;
  21.         LCD_RS = 0;
  22.         LCD_RW = 1;
  23.         LCD_EP = 1;
  24.         _nop_();
  25.         _nop_();                                                  
  26.         _nop_();
  27.         _nop_();
  28.         result = (bit)(P0 & 0x80);  //檢測(cè)P0最高位是否為1
  29.         LCD_EP = 0;
  30.         return result;//返回查忙結(jié)果
  31. }

  32. /****************寫(xiě)命令函數(shù)************************/  
  33. void lcd_wcmd(uchar cmd)
  34. {                          // 寫(xiě)入指令數(shù)據(jù)到LCD
  35.         while(lcd_bz());
  36.         LCD_RS = 0;
  37.         LCD_RW = 0;
  38.         LCD_EP = 0;
  39.         _nop_();
  40.         _nop_();
  41.         P0 = cmd; //將8位指令通過(guò)P0口傳給1602
  42.         _nop_();
  43.         _nop_(); //用于產(chǎn)生一個(gè)脈沖寬度
  44.         _nop_();
  45.         _nop_();
  46.         LCD_EP = 1;
  47.         _nop_();
  48.         _nop_();
  49.         _nop_();
  50.         _nop_();
  51.         LCD_EP = 0;  
  52. }
  53. /*****設(shè)定顯示位置***********/        
  54. void lcd_pos(uchar pos)
  55. {                        
  56.         lcd_wcmd(pos | 0x80);
  57. }

  58. /****************寫(xiě)數(shù)據(jù)函數(shù)************************/  
  59. void lcd_wdat(uchar dat)
  60. {                   //寫(xiě)入字符顯示數(shù)據(jù)到LCD
  61.         while(lcd_bz());
  62.         LCD_RS = 1;
  63.         LCD_RW = 0;
  64.         LCD_EP = 0;
  65.         P0 = dat;  //將8位數(shù)據(jù)通過(guò)P0口傳給1602
  66.         _nop_();
  67.         _nop_();   //用于產(chǎn)生一個(gè)脈沖寬度
  68.         _nop_();
  69.         _nop_();
  70.         LCD_EP = 1;
  71.         _nop_();
  72.         _nop_();
  73.         _nop_();
  74.         _nop_();
  75.         LCD_EP = 0;
  76. }
  77. /*******LCD初始化設(shè)定*********/         
  78. void lcd_init()
  79. {                  
  80.         lcd_wcmd(0x38);     //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)
  81.         delay(1);
  82.         lcd_wcmd(0x0c);     //顯示開(kāi),關(guān)光標(biāo)
  83.         delay(1);
  84.         lcd_wcmd(0x06);     //移動(dòng)光標(biāo)
  85.         delay(1);                                                     
  86.         lcd_wcmd(0x01);     //清除LCD的顯示內(nèi)容
  87.         delay(1);
  88. }


  89. sbit k1=P1^0;
  90. sbit k2=P1^1;

  91. uchar keycount=0;
  92. uchar code msg1[]={"second watch 0"};
  93. uchar code msg2[]={">>>>         "};
  94. uchar code prompts[][16]={
  95.         {"::1---->      "},
  96.         {"::1---->::2"   },
  97.         {"::1->2::3-->  "},
  98.         {"::1->2::3-->4 "},
  99. };
  100. uchar time_buffer[]={0,0,0,0};
  101. uchar LCD_display_buffer[]={"00:00:00:00"};


  102. void show_second()
  103. {
  104.         uchar i;
  105.         lcd_pos(0x45);
  106.         for(i=3;i!=0xff;i--)
  107.         {
  108.                 LCD_display_buffer[2*i+1]=time_buffer[i]/10+'0';
  109.                 LCD_display_buffer[2*i]=time_buffer[i]%10+'0';
  110.                 lcd_wdat(LCD_display_buffer[2*i+1]);
  111.                 lcd_wdat(LCD_display_buffer[2*i]);
  112.                 lcd_wdat(':');
  113.         }
  114. }

  115. void time0() interrupt 1 using 0
  116. {
  117.         TH0=-10000/256;
  118.         TL0=-10000%256;
  119.         time_buffer[0]++;
  120.         if (time_buffer[0]==100)
  121.         {
  122.                 time_buffer[0]=0;
  123.                 time_buffer[1]++;
  124.         }

  125.         if (time_buffer[1]==60)
  126.         {
  127.                 time_buffer[1]=0;
  128.                 time_buffer[2]++;
  129.         }

  130.         if (time_buffer[2]==60)
  131.         {
  132.                 time_buffer[2]=0;
  133.                 time_buffer[3]++;
  134.         }

  135.         if (time_buffer[3]==24)
  136.         {
  137.                 time_buffer[3]=0;
  138.         }
  139. }


  140. void display_string(uchar * str,uchar lineno)        
  141. {
  142.         uchar k;
  143.         lcd_pos(lineno);
  144.         for(k=0;k<16;k++)
  145.         lcd_wdat(str[k]);
  146. }

  147. void main()
  148. {
  149.         uchar i;
  150.        
  151.         IE=0x82;
  152.         TMOD=0x01;
  153.         TH0=-10000/256;
  154.         TL0=-10000%256;
  155.         lcd_init();
  156.         display_string(msg1,0x00);
  157.         display_string(msg2,0x40);
  158.         EA=1;
  159.         ET0=1;
  160.         while(1)
  161.         {
  162.                 if(k1==0)
  163.                 {
  164.                         delay(100);
  165.                         i=++keycount;
  166.                         switch(i)
  167.                         {
  168.                         case 1:
  169.                         case 3: TR0=1;
  170.                                 display_string(prompts[i-1],0);
  171.                                 break;
  172.                         case 2:
  173.                         case 4: TR0=0;
  174.                                 display_string(prompts[i-1],0);
  175.                                 break;
  176.                         default:TR0=0;
  177.                                 break;
  178.                         }
  179.                         while(k1==0);
  180.                 }
  181.                 else
  182.                 if(k2==0)
  183.                 {
  184.                         TR0=0;
  185.                         keycount=0;
  186.                         for(i=0;i<4;i++)
  187.                         time_buffer[i]=0;
  188.                         display_string(msg1,0);
  189.                         delay(100);
  190.                         while(k2==0);
  191.                 }
  192.                 show_second();
  193.         }               
  194. }


復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:433060 發(fā)表于 2018-12-7 15:27 來(lái)自手機(jī) | 顯示全部樓層
一樣的呀
回復(fù)

使用道具 舉報(bào)

ID:433060 發(fā)表于 2018-12-7 16:01 | 顯示全部樓層

懂了 懂了 謝謝
回復(fù)

使用道具 舉報(bào)

ID:433060 發(fā)表于 2018-12-7 16:07 | 顯示全部樓層
管理員  刪了帖子吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本视频免费 | 最新黄色毛片 | 久久精品久久久久久 | 国产精品成人av | 福利成人 | 黄色av网站免费看 | 欧美精品网 | 久久久久欧美 | 午夜免费视频 | 亚洲电影成人 | 成人h动漫亚洲一区二区 | 亚洲高清av| 97久久国产| 成人在线不卡 | 欧美淫 | 午夜一区二区三区视频 | 九九国产在线观看 | 北条麻妃国产九九九精品小说 | 久久黄色精品视频 | 日韩一区在线观看视频 | 亚洲精品一区二区另类图片 | 黄色大片免费观看 | 免费福利视频一区二区三区 | 日韩播放 | 女人牲交视频一级毛片 | 天天爽夜夜骑 | 国产精品自产拍在线观看蜜 | 一区二区av在线 | a级毛片毛片免费观看久潮喷 | 天天操天天干天天爽 | 亚洲欧美在线视频 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 日本精品视频一区二区 | 国产欧美久久一区二区三区 | 欧美一区二区三区视频在线观看 | 国产视频一区二区 | 欧美日韩网站 | 久久久久久久综合色一本 | 精品国产乱码久久久久久闺蜜 | 99精品视频免费观看 | 精精国产xxxx视频在线播放 |