本文目錄一覽:
- 1、使用Python,實現程序運行計時的數碼管表示
- 2、用for語句使數碼管動態顯示
- 3、怎麼實現數碼管動態動態掃描顯示(同時顯示不同的數字)?以下程序只能一次顯示一個數字。
- 4、Python七段數碼管繪製的文字步驟,請問哪位大佬能簡單說一下。是要文字版的,不需要寫代碼的?
- 5、數碼管的動態顯示問題,是共陽極的,在模擬的時候只有一個正常顯示
使用Python,實現程序運行計時的數碼管表示
用python實現計時器功能,代碼如下:
”’ Simple Timing Function.
This function prints out a message with the elapsed time from the
previous call. It works with most Python 2.x platforms. The function
uses a simple trick to store a persistent variable (clock) without
using a global variable.
”’
import time
def dur( op=None, clock=[time.time()] ):
if op != None:
duration = time.time() – clock[0]
print ‘%s finished. Duration %.6f seconds.’ % (op, duration)
clock[0] = time.time()
# Example
if __name__ == ‘__main__’:
import array
dur() # Initialise the timing clock
opt1 = array.array(‘H’)
for i in range(1000):
for n in range(1000):
opt1.append(n)
dur(‘Array from append’)
opt2 = array.array(‘H’)
seq = range(1000)
for i in range(1000):
opt2.extend(seq)
dur(‘Array from list extend’)
opt3 = array.array(‘H’)
seq = array.array(‘H’, range(1000))
for i in range(1000):
opt3.extend(seq)
dur(‘Array from array extend’)
# Output:
# Array from append finished. Duration 0.175320 seconds.
# Array from list extend finished. Duration 0.068974 seconds.
# Array from array extend finished. Duration 0.001394 seconds.
用for語句使數碼管動態顯示
數碼管動態顯示程序,本就應該用for循環語句寫,那些一位一位地顯示的程序,太不規範啦,程序顯得很長,很亂的。
如下的模擬圖,是8位數碼管,就得用for循環語句寫,程序很簡單,很簡潔。
程序如下
#includereg52.h
#includeintrins.h
unsigned char code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};//共陰數碼管段碼錶
unsigned char buffer[]={1,2,3,4,5,6,7,8};
void delay()
{
unsigned int j;
for(j=400;j0;j–);
}
void display()
{
unsigned char i,ledbit=0xfe;
for(i=0;i8;i++)
{
P2=ledbit; //先輸出位碼
P0=ledtab[buffer[i]];//後輸出段碼
ledbit=_crol_(ledbit,1);
delay();
}
}
void main()
{
while(1)
{
display();
}
}
怎麼實現數碼管動態動態掃描顯示(同時顯示不同的數字)?以下程序只能一次顯示一個數字。
很容易,首先假如我們有6位數碼管,每位數碼管需要8個段選1個公共選通端, 那麼6位數碼管自然是8位端選信號 6位選通信號(分別選通1-6其中的一個數碼管)
#define SMG_WEI P0 //P1.0 -P1.5 分別驅動數碼管選通
#define SMG_DUAN P1 //P1.0 -P1.7接數碼管8個段選
unsigned char smgcode[]={x,x,x,x,x,x,x,x,x,x} //對應數碼管0-9的值,實際根據段信號確定
void Delay(unsigned long w)
{
while(w–);
}
void DisPlay(unsigned char s1,unsigned char s2,unsigned char s3,unsigned char s4,unsigned char s5,unsigned char s6) //s1 -s6表示1-6的數碼管需要顯示的數字
{
SMG_WEI =0x01 //第1個數碼管選通 000001
SMG_DUAN =smgcode[s1]; //如s1傳入1表示要顯示1,那麼直接調用數組偏移量為1的值,顯示1
Delay(100); //延時一段時間消影
SMG_WEI =0x02 //第2個數碼管選通 000010
SMG_DUAN =smgcode[s2]; //如s2傳入2表示要顯示2,那麼直接調用數組偏移量為2的值,顯示2
Delay(100); //延時一段時間消影
S3 /////
S4 /////
S5 //////
SMG_WEI =0x20 //第6個數碼管選通 100000
SMG_DUAN =smgcode[s6]; //如s6傳入6表示要顯示6,那麼直接調用數組偏移量為6的值,顯示6
Delay(100); //延時一段時間消影
SMG_WEI =0;
SMG_DUAN =0; //清除顯示,保證每位數碼管亮度一致
}
void main()
{
while(1)
{
DisPlay(1,2,3,4,5,6);//數碼管顯示 1 2 3 4 5 6
}
}
Python七段數碼管繪製的文字步驟,請問哪位大佬能簡單說一下。是要文字版的,不需要寫代碼的?
繪製七段數碼管需要用到turtle繪圖體系。
基本思路是:1、繪製單個數字對應的數碼管。2、獲得一串數字繪製對應的數碼管。
具體操作:步驟1、繪製單個數碼管:顧名思義,七段數碼管是由7段基本線條組成的,不同的數字顯示不同的線條,並且數碼管可以有固定的順序;編寫程序時,可以先定義畫單段數碼管的函數,再定義根據數字繪製七段數碼管的函數,利用if語句,根據數字調用單段數碼管函數進行繪製。步驟2,獲得要輸出的數字,利用eval()函數將數字變為整數,調用根據數字繪製七段數碼管的函數進行繪製。
總結:1、對七段數碼進行分析,整理思路。根據數字繪製七段數碼管時,用到哪一段基本線條就把哪一段繪製出來。
七段數碼管
2、利用到的知識點:turtle庫、函數、if語句、eval()函數
數碼管的動態顯示問題,是共陽極的,在模擬的時候只有一個正常顯示
中斷里動態點亮數碼管的程序有錯誤,如下:
P1_0=0;P1_1=1;
P0=dispcode[second/10];
P1_0=1;P1_1=0;
P0=dispcode[second%10];
點亮第一位後接著滅掉第一位、點亮第二位,由於時間太快,而且中斷時間太長,所以第一位點亮就看不到了,而只能看到第二位的數字了,也就是dispcode[second%10]對應的數碼管。修改一下程序應該是這樣的:
#include reg51.h
sbit P1_0=P1^0;
sbit P1_1=P1^1;
unsigned char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
volatile unsigned char second; //告訴編譯器不要優化變數,具體用法百度一下
unsigned char tcount;
//短暫延時
void delay(char x)
{
char i,j;
for(i=0;ix;i++)
for(j=0;j200;j++);
}
void main(void)
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
tcount=0;
second=0;
while(1)
{
P1_0=0;P1_1=1;
P0=dispcode[second/10];
delay(2); //x的值自己試試,只要能正常顯示就行
P1_0=1;P1_1=0;
P0=dispcode[second%10];
delay(2);
}
}
void t0(void) interrupt 1 using 0
{
tcount++;
if(tcount==20)
{
tcount=0;
second++;
if(second==60)
{
second=0;
}
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/291680.html