欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
小白再次幫友求助 “4位數據管,從0000到9999,每0.5s增加1”程序設計
[打印本頁]
作者:
lg0o0
時間:
2017-6-26 11:36
標題:
小白再次幫友求助 “4位數據管,從0000到9999,每0.5s增加1”程序設計
“4位數據管,從0000到9999,每0.5s增加1”程序設計
作者:
3213123s
時間:
2017-6-26 20:20
大概是這樣的,開定時器1,工作方式1,初值設置到50毫秒一中斷,if判斷十次中斷進行一次處理
斷選和位選分成兩個數組,這個具體就看你的硬件怎么連接的了,然后int個數,在每十次中斷里將它+1,分別取這個數的千百十個位,對應數組元素送入段選。
開定時器0,2毫秒一中斷,中斷中進行動態顯示
作者:
大黃蜂001
時間:
2017-6-26 22:17
不許用開定時器0了吧?
作者:
yzwzfyz
時間:
2017-6-26 22:36
本帖最后由 yzwzfyz 于 2017-6-26 22:58 編輯
開啟T0中斷,每4ms中斷一次。
設置一個變量R_9999(0-9999)做計數用。用法:每0.5秒R_9999+1。
設置一個掃描計數器R_SC(=0-3)。用法:每次T0中斷R_SC+1,當R_SC=4時回0。
設置一個0.5秒計時器R_05(=0-124)。用法:每次T0中斷,R_05+1,R_05=125時回0。
每次T0中斷依序做以下動作:
自動+1:
1、R_05+1,當R_05=125時做以下動作(否則不處理):
1.1、R_05=0;
1.2、R_9999+1。
掃描顯示:
2、R_SC+1(為切換顯示指明顯示位),如果R_SC=4則回0(只有4個LED),再做以下動作(無論R_SC=?):
2.1、根據R_SC的值,取R_9999之中的一個位(R_SC:0-3各對應個、十、百、千位)放入A中;
2.2、將A進行譯碼(事先做一個表10個字節:對應LED段碼顯示0-9的段表達明暗的字節形式);
2.3、關閉4個LED;(以下改變顯示內容時不會出現錯字閃動);
2.4、將譯碼后的A值通過IO口送到LED的8個段顯示上(只用七段就夠了,因為已關斷,所以這時無顯示,也就無所畏對錯);
2.5、接通顯示的這個LED(三個關閉一個開通,這時才正式顯示一個LED,完成掃描顯示一位)。
如果自己還不會寫,也不想自己寫,就改行吧。
作者:
HC6800-ES-V2.0
時間:
2017-6-27 07:24
看看我編的程序對不對。對應的電路如圖。
#include<reg51.h>
#define smg P0
sbit a=P2^2;
sbit b=P2^3;
sbit c=P2^4;
unsigned char code xs[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char i=0,t=0;
unsigned int j=0;
void Delay(unsigned char c);
void play(void);
void TimeConfig();
void main(void)
{
TimeConfig();
t=10;
smg=0x00;
while(1)
{
if (i>=10)
{
j++;
}
if (j==9999)
{
j=0;
}
play();
}
}
void play(void)
{
c=1;b=0;a=0;
smg=xs[j/1000];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=1;a=1;
smg=xs[(j%1000)/100];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=1;a=0;
smg=xs[(j%100)/10];
Delay(t);
smg=0x00;
Delay(t);
c=0;b=0;a=1;
smg=xs[(j%10)/1];
Delay(t);
smg=0x00;
Delay(t);
}
void Delay(unsigned char c)
{
unsigned char b;
for(c;c>0;c--)
for(b=10;b>0;b--);
}
void TimeConfig()
{
TMOD = 0x01;
TH0 = 0x3c; //設置初始值,定時50ms
TL0 = 0xb0;
EA = 1; //總中斷開啟
ET0 = 1; //定時器0中斷開啟
TR0 = 1; //啟動定時器0
}
void Time0() interrupt 1//定時器0中斷服務函數
{
TH0 = 0x3c; //重裝初值
TL0 = 0xb0;
i++;
}
1.jpg
(60.96 KB, 下載次數: 48)
下載附件
2017-6-27 07:24 上傳
2.jpg
(17.4 KB, 下載次數: 44)
下載附件
2017-6-27 07:24 上傳
作者:
HC6800-ES-V2.0
時間:
2017-6-27 11:11
剛才發的程序,有一點錯誤!抱歉!
就是這里:
if (i>=10)
{
j++;
}
應該加一句:
if (i>=10)
{
j++;
i=0;
}
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1