欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
簡易單片機頻率的相關問題 無法顯示頻率值
[打印本頁]
作者:
我要變得卓越
時間:
2020-6-23 17:26
標題:
簡易單片機頻率的相關問題 無法顯示頻率值
下面這個程序我編譯的時候沒問題,但仿真時頻率值(仿真結果在下面)無法顯示出來,希望有哪位大佬能幫我解答一下。
#include <AT89X51.H>
unsigned char code dispbit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //P2的掃描位
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //數碼管的字形編碼
unsigned char dispbuf[8]={0,0,0,0,0,0,10,10}; //初始化顯示值
unsigned char temp[8]; //存放顯示的數據
unsigned char dispcount; //顯示計數器值
unsigned char T0count; //T0的計數器值
unsigned char timecount; //計時計數器值
unsigned int ge,shi,bai,qian,wan,sw,bw,qw;//聲明數碼管個位變量、數碼管十位變量、數碼管百位變量、數碼管千位變量...
bit flag; //標志位
unsigned long x; //頻率值
//頻率計算函數
void HzCal(void)
{
unsigned char i;
x=T0count*65536+TH0*256+TL0; //得到T0的16位計數器值
for(i=0;i<8;i++)
{
temp[i]=0;
}
i=0;
while(x/10) //拆分
{
temp[i]=x%10;
x=x/10;
i++;
}
temp[i]=x;
for(i=0;i<6;i++) //換算為顯示數據
{
dispbuf[i]=temp[i];
}
T0count=0;
}
void main(void)
{
TMOD=0x15; //設置定時器工作方式
TH0=0;
TL0=0;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256; //初始化T1
TR1=1;
TR0=1;
ET0=1;
ET1=1;
EA=1; //開中斷
while(1)
{
if(flag==1)
{
flag=0;
HzCal(); //頻率計算函數
TH0=0;
TL0=0;
TR0=0;
}
if(timecount>=1000)//判斷定時器1中斷次數變量是否大于等于1000,即1s。
{
TR0=1;
timecount=0;//定時器1中斷次數變量置0
flag=1;//數碼管初始化標志位變量置1
ge=dispcode[dispbuf[0]];//數碼管個位變量
shi=dispcode[dispbuf[1]];//數碼管十位變量
bai=dispcode[dispbuf[2]];//數碼管百位變量
qian=dispcode[dispbuf[3]];//數碼管千位變量
wan=dispcode[dispbuf[4]];
sw=dispcode[dispbuf[5]];
bw=dispcode[dispbuf[6]];
qw=dispcode[dispbuf[7]];
}
if(timecount<1000&&flag==0)//判斷定時器1中斷次數變量是否小于1000和數碼管初始化標志位變量是否等于0
{
ge=dispcode[0];//數碼管個位變量為0
shi=dispcode[0];//數碼管十位變量為0
bai=dispcode[0];//數碼管百位變量為0
qian=dispcode[0];//數碼管千位變量為0
wan=dispcode[0];
sw=dispcode[0];
bw=dispcode[0];
qw=dispcode[0];
}
}
}
//定時器T0中斷服務子函數
void t0(void) interrupt 1 using 0
{
T0count++;
}
//定時器T1中斷服務子函數
void t1(void) interrupt 3 using 0
{
unsigned char i;
TH1=(65536-1000)/256;
TL1=(65536-1000)%256; //初始化T1預裝值,1ms定時
timecount++; //掃描
P2=0xff;
switch(i)//讓8位數碼管以1ms間隔輪流刷新
{
case 0:
P0=ge;//數碼管個位數值顯示
P2=0xfe;//數碼管個位顯示位
i++;//選位變量先賦值再加加
break;
case 1:
P0=shi;//數碼管十位數值顯示
P2=0xfd;//數碼管十位顯示位
i++;//選位變量先賦值再加加
break;
case 2:
P0=bai;//數碼管百位數值顯示
P2=0xfb;//數碼管百位顯示位
i++;//選位變量先賦值再加加
break;
case 3:
P0=qian;//數碼管千位數值顯示
P2=0xf7;//數碼管千位變量顯示位
i++;//選位變量置0
break;
case 4:
P0=wan;//數碼管千位數值顯示
P2=0xef;//數碼管千位變量顯示位
i++;//選位變量置0
break;
case 5:
P0=sw;//數碼管千位數值顯示
P2=0xdf;//數碼管千位變量顯示位
i++;//選位變量置0
break;
case 6:
P0=bw;//數碼管千位數值顯示
P2=0xdf;//數碼管千位變量顯示位
i++;//選位變量置0
break;
case 7:
P0=qw;//數碼管千位數值顯示
P2=0xdf;//數碼管千位變量顯示位
i=0;//選位變量置0
break;
default : break;//自定義
}
}
復制代碼
仿真結果.jpg
(550.53 KB, 下載次數: 79)
下載附件
2020-6-23 17:24 上傳
作者:
xianfajushi
時間:
2020-6-27 10:34
可參
https://ask.csdn.net/questions/1078610#answer_1287444
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1