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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4971|回復: 1
打印 上一主題 下一主題
收起左側

51單片機計數與數碼管顯示問題

[復制鏈接]
跳轉到指定樓層
樓主
這個程序的目的是通過P1.0口產生周期為兩秒的方波,由外部中斷0口輸入方波并計數,從數碼管中輸出數字,外部中斷1接開關,按第一下開始產生方波,計數并顯示,按第二下停止計數,顯示學號。我的程序的問題是按下開關,方波在產生了幾下之后就不產生了,而且顯示有問題,顯示的時間變長(動態顯示),不知道怎么回事,誰能解決一下?(共陰極數碼管,六位)
#include<reg51.h>
#define uchar unsigned char
uchar number[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極斷碼0到9
uchar student[6]={0x6f,0x7f,0x4f,0x4f,0x7d,0x06};//學號163389
uchar number_1[6]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//要顯示的數字,他是計的數
uchar i=0,k=6;//k是數字的位數,先默認為六位,在后面的程序中再判斷
unsigned long j=0;//j作為方波計數的數字
sbit P1_0=P1^0;//P1.0產生方波
void delay(uchar m);//聲明延時函數
void main()
{
uchar m;//m作為循環的變量使用
TMOD=0x01;//使用定時器T0,方式一
TH0=0x3c;//
TL0=0xaf;//初值,50毫秒一中斷
TR0=0;//先不啟動T0,按下鍵在啟動
EA=1;//總中斷允許
ET0=1;//T0中斷允許
EX0=1;//T1允許
IT0=1;//外部中斷1觸發方式跳沿
EX1=1;
IT1=1;//外部中斷1,觸發方式跳沿
while(1)
{
  P2=0xfe;//P2最低位選中
  if(TR0)//如果定時器開啟
   for(m=0;m<k;m++)
   {
    P0=number_1[m];//顯示計的數字
   delay(5);//動態顯示,延時
   P2=P2<<1|0x01;//下一位選通
   }
  else
   for(m=0;m<6;m++)
   {
    P0=student[m];//如果不開啟,就顯示學號
delay(5);//延時一會
P2=P2<<1|0x01;//下一位選通
   }
  }
}
void timer_0() interrupt 1//定時器T0中斷函數
{
TH0=0x3c;//重載
TL0=0xaf;
i++;
if(i==20)//如果計到1秒

{
  i=0;//清零
  P1_0=~P1_0;//P1.0取反產生方波
}
}
void int_1() interrupt 2//外部中斷一中斷函數
{
  TR0=~TR0;//進入一次中斷函數,一次開啟,再一次不開啟
}
void int_0() interrupt 0//外部中斷0中斷程序
{
unsigned long m=1000000,n=100000,c=10,d=1;//為了獲得j的位數,先從最高位開始找,因為j最大是六位,所以m取七位,n取六位
uchar t,r;//t的目的是記錄j相應位的數字
j++;//進入一次中斷,及來一次下降沿,j加一
if(j==999999)//記到最大清零
  j=0;
while(1)
{
  t=j%m/n;//檢查每一位,從高處檢查,如果是零,就跳出,記錄位數k
  if(t!=0)
   break;//跳出語句
   k--;
    m=m/10;
    n=n/10;
  }
for(r=0;r<k;r++)//現在確定了j的位數,計為k
{
  t=j%c/d;//從低位開始記錄各位數字
  number_1[r]=number[t];//根據找到的數字,從number數組里拿出數字給到number1數組
  c=c*10;//
  d=d*10;//乘10,準備檢查下一位
}
}
void delay(uchar m)//延時函數
{
uchar t;
while(m--)
{
  for(t=0;t<120;t++);
}
}
不正常的顯示如圖所示


5LBWE3MG0KLBDQ{I5S8F3~V.png (268.11 KB, 下載次數: 58)

5LBWE3MG0KLBDQ{I5S8F3~V.png

F`M{{92F4KCH42JPL_7SX%H.png (269.33 KB, 下載次數: 78)

F`M{{92F4KCH42JPL_7SX%H.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:301728 發表于 2018-5-31 21:15 | 只看該作者
改好了,原來是在外部中斷0每次記錄j的位數時,忘了在中斷服務程序的開頭處寫上k=6,不然若第一次記錄了k=1,下一次就會繼續減,成了別的數了,不再可以記錄位數了。

評分

參與人數 1黑幣 +70 收起 理由
admin + 70 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区在线看 | 亚洲一区中文字幕 | 亚洲最大看片网站 | 日韩黄a| 久久国产精品一区二区 | 成人精品一区二区三区四区 | 日韩精品久久久久久 | 亚洲精选一区 | 中文字幕亚洲欧美日韩在线不卡 | 久久久久久久久久久久久久av | 色www精品视频在线观看 | 狠狠的干 | 91精品国产91久久久久久最新 | 欧美日韩不卡 | 欧美日韩精品一区二区天天拍 | 国产精品美女久久久久久久久久久 | 精品欧美一区免费观看α√ | 中文一区二区 | 在线中文字幕亚洲 | 中文字幕在线一区二区三区 | 国产片侵犯亲女视频播放 | 日本黄色影片在线观看 | 91精品国产91久久久久游泳池 | 久久久久久国产精品 | 一区二区三区国产精品 | 欧美日韩国产高清视频 | 国产一区二区在线播放 | 成人国产精品久久久 | 狠狠干2020 | 欧美自拍第一页 | 国产福利在线免费观看 | 国产精品一区一区 | 欧美视频一级 | 99热在线免费 | 伊人春色成人网 | 在线观看中文视频 | 久色网| 亚洲国产69 | 91av在线视频观看 | 欧美国产在线一区 | 91在线视频国产 |