久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
初學者8只7段數碼管當秒表用的實例問題
[打印本頁]
作者:
紅塵有你
時間:
2015-12-1 09:21
標題:
初學者8只7段數碼管當秒表用的實例問題
//***8只7段數碼管,想實現在末位數碼管每秒跳變一次,滿10進一位,倒數第二位滿10也進1,依次類推(不要取商取余,那樣運算慢有卡頓)*****///
***k的值一直沒變,總是0,返回的tmp只到1就沒了。這是為什么??
硬件有,74HC138譯碼器,74HC573移位器 ******/
#include<reg51.h>#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO P0sbit LE=P1^0; //74HC573移位器 段選使能
sbit LSA=P2^2; //此三腳接138譯碼器,用來選擇哪個管顯示
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//,0x77,0x7c,//0x39,0x5e,0x79,0x71//顯示0~F的值 取0-9
uint time=0,n[8]; //0-7代表8位數碼管,數組里裝數碼管的值
void Delay10ms(uint c);
void Display_Arr(uint x);//選擇顯示第幾位
void InitTimer0(void); //定時器初始化void Display(uint *x);
uint ScanNumber(uint);//掃描8管是否有等于10,返回i,否則返回0//
void FillOneTube(uint x,uint y);
void main()
{
uint i, k=0,tmp=0; //n用來表示要顯示的數字,i表示要顯示第幾位,前面有幾個顯0的
InitTimer0();
for(i=0;i<8;i++)
n[i]=0;
while(1)
{
if(time==100) //1秒才跳數
{
time=0;
n[0]++; //末位管進1
if(n[0]==10)
n[0]=0;
if(ScanNumber(k)==8)//沒有進位到10的管子
{
Display(n);
}
else
{
tmp=ScanNumber(k); //有管子=10,賦給臨時變量T
n[tmp]=0; ;
n[++tmp]+=1;//前位進1
Display(n);
}
}//end while
}
void testTen()
{
int i;
for(i=0;i<8;i++)
if(n[i]==10)
{
n[i]=0;
n[i++]+=1;
}
}
void Display(uint * x)
{
uint i;uint y[8];
for(i=0;i<8;i++)
{
y[i]=*x;
x++;
}
for(i=0;i<8;i++)
{
Display_Arr(i);
LE=1;
GPIO=table[y[i]];
LE=0;
Delay10ms(1);
}
}
uint ScanNumber(uint k)
{
uint i=0;
for(;i<8;i++)
{
if(n[i]==10)
{
k=i;
return k;
}
}
return 8; //沒有等于10的數組
}
void Display_Arr(uint x) //選擇8個數碼管的哪個亮
{
switch(x) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
case(7):
LSA=1;LSB=1;LSC=1; break;
}
}
void Tiner_Int() interrupt 1
{
TH0 = 0xD8; //定時10MS
TL0 = 0xF0;
time++;
}
void InitTimer0(void)// 定時器0初始化
{
TMOD = 0x01; //方式1
TH0 = 0xD8; //定時10MS
TL0 = 0xF0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Delay10ms(uint c) //誤差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=10;b>0;b--) //原為38
for(a=130;a>0;a--);
}
作者:
紅塵有你
時間:
2015-12-1 09:38
在線跪求大神啊
作者:
紅塵有你
時間:
2015-12-1 11:55
附上138譯碼器真值表
138譯碼器真表.png
(25.08 KB, 下載次數: 112)
下載附件
2015-12-1 11:54 上傳
作者:
紅塵有你
時間:
2015-12-1 19:34
終于搞定了,哈哈:-)
作者:
admin
時間:
2015-12-2 00:37
樓主能分享一下 怎么搞定的嗎
作者:
紅塵有你
時間:
2015-12-2 12:36
//***8只7段數碼管,想實現在末位數碼管每秒跳變一次,滿10進一位,倒數第二位滿10也進1,依次類推*****///
硬件有,74HC138譯碼器,74HC573移位器 ******/
#include<reg51.h>#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define GPIO P0sbit LE=P1^0; //74HC573移位器使能
sbit LSA=P2^2; //此三腳接138譯碼器,用來選擇哪個管顯示
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f
};//,0x77,0x7c,//0x39,0x5e,0x79,0x71//顯示0~F的值 取0-9
uint time=0,n[8]; //0-7代表8位數碼管,數組里裝數碼管的值
void Delay10ms(uint c);
void Display_Arr(uint x);//選擇顯示第幾位
void InitTimer0(void); //定時器初始化void Display(uint *x);
uint ScanNumber(uint);//掃描8管是否有等于10,返回i,否則返回0//
void FillOneTube(uint x,uint y);
void main()
{
uint i, k=0,tmp=0; //n用來表示要顯示的數字,i表示要顯示第幾位,前面有幾個顯0的
InitTimer0();
for(i=0;i<8;i++)
n[i]=0;
while(1)
{
if(time==100) //1秒才跳數
{
time=0;
n[0]++; //末位管進1
ScanNumber(k);
Display(n);
}
}//end while
}
void Display(uint * x)
{
uint i;uint y[8];
for(i=0;i<8;i++)
{
y[i]=*x;
x++;
}
for(i=0;i<8;i++)
{
Display_Arr(i);
LE=1;
GPIO=table[y[i]];
LE=0;
Delay10ms(1);
}
}
uint ScanNumber(uint k)
{
uint i=0,j;
for(;i<8;i++)
{
if(n[i]==10)
{
j=k;
n[j]=0; ;
n[++j]+=1;//前位進1
ScanNumber(j);
}
}
return 8; //沒有等于10的數組
}
void Display_Arr(uint x) //選擇8個數碼管的哪個亮
{
switch(x) //位選,選擇點亮的數碼管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;
case(1):
LSA=1;LSB=0;LSC=0; break;
case(2):
LSA=0;LSB=1;LSC=0; break;
case(3):
LSA=1;LSB=1;LSC=0; break;
case(4):
LSA=0;LSB=0;LSC=1; break;
case(5):
LSA=1;LSB=0;LSC=1; break;
case(6):
LSA=0;LSB=1;LSC=1; break;
case(7):
LSA=1;LSB=1;LSC=1; break;
}
}
void Tiner_Int() interrupt 1
{
TH0 = 0xD8; //定時10MS
TL0 = 0xF0;
time++;
}
void InitTimer0(void)// 定時器0初始化
{
TMOD = 0x01; //方式1
TH0 = 0xD8; //定時10MS
TL0 = 0xF0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void Delay10ms(uint c) //誤差 0us
{
unsigned char a,b;
for(;c>0;c--)
for(b=10;b>0;b--) //38
for(a=130;a>0;a--);
}
顯示效果不是很理想,功能已經達到
作者:
紅塵有你
時間:
2015-12-2 12:41
弄了半天啊,原來是問題在于到9時沒有進1,兩個9或更多9時沒有往后SCAN
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
色资源站
|
日韩欧美专区
|
国内精品久久久久久影视8 最新黄色在线观看
|
日本欧美大片
|
欧美午夜一区二区三区免费大片
|
在线免费视频一区
|
天天看天天爽
|
在线视频一区二区
|
视频在线一区二区
|
亚洲毛片在线
|
一区二区三区精品在线
|
在线日韩视频
|
免费一区二区三区
|
久久国产精品久久久久久
|
久久综合九九
|
成人免费一区二区三区视频网站
|
国产精品亚洲精品
|
日本爱爱
|
欧美第一区
|
亚洲va欧美va人人爽午夜
|
精品国产乱码久久久久久88av
|
一级黄色生活视频
|
日韩午夜激情
|
一级毛片网
|
国产高清毛片
|
欧美在线a
|
久久久久久国产精品免费免费
|
日韩电影在线
|
成人av免费在线观看
|
国产日韩一区二区三免费
|
精品视频一二区
|
天堂色
|
九九色综合
|
国产成人精品一区二区三区在线
|
黄色在线免费观看
|
国产在线精品一区二区三区
|
国产精品久久久久久久久久免费看
|
午夜一区二区三区
|
欧美激情久久久久久
|
亚洲精品电影在线观看
|
欧美视频日韩
|