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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1569|回復: 5
打印 上一主題 下一主題
收起左側(cè)

這個單片機程序按鍵3不能清零,哪里邏輯出問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:689459 發(fā)表于 2020-2-2 15:34 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit wela=P2^7;
sbit dula=P2^6;
sbit key1=P3^4;
sbit key2=P3^5;
sbit key3=P3^2;
sbit key4=P3^3;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar t0,bai,shi,ge;
uint num;
void display(uchar bai,uchar shi,uchar ge);
void keyscan();
void init();
void delayms(uint xms)
{
  uint i,j;
  for(i=xms;i>0;i--)
  for(j=110;j>0;j--);
}
void main()         
{
  
   init();
while(1)
{
     keyscan();
   display(bai,shi,ge);     
}
}
void init()
{
    TMOD=0x11;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=0;
   
}
void display(uchar bai,uchar shi,uchar ge)
{

      
      dula=1;
   P0=table[bai];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfe;
  wela=0;
  delayms(5);
      dula=1;
  P0=table[shi];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfd;
  wela=0;
  delayms(5);
      dula=1;
  P0=table[ge];
  dula=0;
  P0=0xff;
  wela=1;
  P0=0xfb;
  wela=0;
  delayms(5);      
}
void timer0() interrupt 1  
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
if(t0==5)
{
     t0=0;
     num++;
     bai=num/100;
   shi=num%100/10;
   ge=num%10;
     if(num==999)
      num=0;
   }
  }
void keyscan()
{
  if(key1==0)
  {
   delayms(10);
   if(key1==0)
   {
     while(!key1);
     TR0=1;
          }
          }
    if(key2==0)
  {
   delayms(10);
   if(key2==0)
   {
     while(!key2);
     TR0=0;
          }
          }
if(key3==0)
  {
   delayms(10);
   if(key3==0)
   {
     while(!key3);
     num=0;
          }
          }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2020-2-2 18:04 | 只看該作者
由于數(shù)據(jù)分解語句在定時器中斷里,如果按下key2就關(guān)閉了定時器,再按key3時num雖然為0,但bai、shi、ge沒有變,顯示數(shù)值當然不變。把數(shù)據(jù)分解語句放到顯示程序中可以解決。
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit wela=P2^7;
  5. sbit dula=P2^6;
  6. sbit key1=P3^4;
  7. sbit key2=P3^5;
  8. sbit key3=P3^2;
  9. sbit key4=P3^3;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71};
  15. uchar t0,bai,shi,ge;
  16. uint num;
  17. void display();
  18. void keyscan();
  19. void init();
  20. void delayms(uint xms)
  21. {
  22.   uint i,j;
  23.   for(i=xms;i>0;i--)
  24.   for(j=110;j>0;j--);
  25. }
  26. void main()         
  27. {  
  28.         init();
  29.         while(1)
  30.         {
  31.                 keyscan();
  32.                 display();
  33.         }
  34. }
  35. void init()
  36. {
  37.         TMOD=0x11;
  38.         TH0=(65536-50000)/256;
  39.         TL0=(65536-50000)%256;
  40.         EA=1;
  41.         ET0=1;
  42.         TR0=0;  
  43. }
  44. void display()
  45. {
  46.         P0=0xff;//消隱
  47.         wela=1;
  48.         wela=0;
  49.         P0=table[num/100];
  50.         dula=1;
  51.         dula=0;
  52.         P0=0xfe;
  53.         wela=1;
  54.         wela=0;
  55.         delayms(5);

  56.         P0=0xff;//消隱
  57.         wela=1;
  58.         wela=0;
  59.         P0=table[num%100/10];
  60.         dula=1;
  61.         dula=0;
  62.         P0=0xfd;
  63.         wela=1;
  64.         wela=0;
  65.         delayms(5);

  66.         P0=0xff;//消隱
  67.         wela=1;
  68.         wela=0;
  69.         P0=table[num%10];
  70.         dula=1;
  71.         dula=0;
  72.         P0=0xfb;
  73.         wela=1;
  74.         wela=0;
  75.         delayms(5);
  76. }
  77. void timer0() interrupt 1  
  78. {
  79.         TH0=(65536-50000)/256;
  80.         TL0=(65536-50000)%256;
  81.         t0++;
  82.         if(t0==5)
  83.         {
  84.                 t0=0;
  85.                 num++;
  86.                 if(num==999)
  87.                         num=0;
  88.         }
  89. }
  90. void keyscan()
  91. {
  92.         if(key1==0)
  93.         {
  94.                 delayms(10);
  95.                 if(key1==0)
  96.                 {
  97.                         while(!key1);
  98.                         TR0=1;
  99.                 }
  100.         }
  101.         if(key2==0)
  102.         {
  103.                 delayms(10);
  104.                 if(key2==0)
  105.                 {
  106.                         while(!key2);
  107.                         TR0=0;
  108.                 }
  109.         }
  110.         if(key3==0)
  111.         {
  112.                 delayms(10);
  113.                 if(key3==0)
  114.                 {
  115.                         while(!key3);
  116.                         num=0;
  117.                 }
  118.         }
  119. }
復制代碼

回復

使用道具 舉報

板凳
ID:168996 發(fā)表于 2020-2-2 18:47 | 只看該作者
實測可以對num清零
測試方法:按k1(程序功能啟動TR0,過幾秒鐘按k2(程序功能停止TR0),再按K3,停留在圖示斷點,執(zhí)行num=0則清零(見左側(cè)變量窗口)

回復

使用道具 舉報

地板
ID:689459 發(fā)表于 2020-2-2 20:44 | 只看該作者
謝謝,明白了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本精品一区二区三区在线观看 | 理论片免费在线观看 | 亚洲精品福利在线 | 欧美日韩一区在线 | 成人av网站在线观看 | 成人国产综合 | 亚洲精品久久久久久久久久久 | 久久人人网 | 黄色大片视频 | 久久久精品一区二区三区 | 中文字幕精品一区久久久久 | 天天色天天色 | 国产成人精品一区二区三区四区 | 欧美5区| 国产亚洲精品精品国产亚洲综合 | www.色综合 | 成年人免费看 | 国产午夜视频 | 国产精品揄拍一区二区 | 老牛影视av一区二区在线观看 | 一区二区视频免费观看 | 神马久久久久久久久久 | 国产日韩精品一区二区 | 成年人在线视频 | 亚洲在线免费观看 | 亚洲一区二区免费视频 | 久久精品亚洲精品国产欧美 | 国产免费福利在线 | 久久一区二区三区四区 | 婷婷五月色综合香五月 | 一级黄色夫妻生活 | 欧美亚洲日本 | 三级视频在线观看电影 | 国产一二三视频在线观看 | 麻豆一区 | av网址在线 | 久久欧美高清二区三区 | 欧美日韩在线综合 | 91久久国产综合久久 | 一区二区三区四区国产 | 久久久国产亚洲精品 |