国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STC15單片機(jī)】動態(tài)數(shù)碼管

這篇具有很好參考價(jià)值的文章主要介紹了【STC15單片機(jī)】動態(tài)數(shù)碼管。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

點(diǎn)亮一位數(shù)碼管

動態(tài)數(shù)碼管

100s倒計(jì)時(shí)

動態(tài)數(shù)碼管封裝代碼



點(diǎn)亮一位數(shù)碼管

段選:選中哪一位數(shù)碼管

位選:選中的數(shù)碼管要顯示的內(nèi)容

這是我對段選位選的理解,就是選中某個(gè)位置,賦值字形碼,顯示想要的圖形

數(shù)碼管動態(tài)顯示代碼,藍(lán)橋杯單片機(jī)組~STC15,單片機(jī),嵌入式硬件

如果只想讓第一個(gè)數(shù)碼管顯示,就只需要讓com1 = 1即可,其他comx都=0

如果想讓8個(gè)數(shù)碼管都亮,就讓com1~com8都賦值1,此時(shí)對數(shù)碼管賦值,8個(gè)數(shù)碼管都會顯示一致的內(nèi)容

如果想讓不同數(shù)碼管顯示不同的內(nèi)容且互不干擾,就需要不斷的段選、位選,段選、位選,段選、位選。

數(shù)碼管動態(tài)顯示代碼,藍(lán)橋杯單片機(jī)組~STC15,單片機(jī),嵌入式硬件

先打開段選的鎖存器(U8),用來選擇哪個(gè)數(shù)碼管亮,U8的Y6C = 1來控制

數(shù)碼管動態(tài)顯示代碼,藍(lán)橋杯單片機(jī)組~STC15,單片機(jī),嵌入式硬件

往前推導(dǎo)就是Y6 = 0;WR = 0(跳線帽鏈接)

Y6又由138譯碼器控制

P27 = 1; P26 = 1; P25 = 0;? ? ? ? //段選

?選中第一個(gè)數(shù)碼管 P00 = 1;

P27 = 1; P26 = 1; P25 = 1;? ? ? ? //位選

?第一個(gè)LED顯示個(gè)0? P0 = 0xC0;

代碼如下:

#include <STC15F2K60S2.H>
#include "smg.h"

void main()
{
	P2 = 0xA0;	P0 = 0x00;	//初始化,關(guān)閉蜂鳴器繼電器
//	P2 = 0x80;	P0 = 0xFF;	//Y4=0;選中LED,使其滅
	
	//數(shù)碼管段選
	P27 = 1; P26 = 1; P25 = 0;	//Y6=0;Y6C=1; 使能鎖存器U8
	P00 = 1; 					//選中第一個(gè)數(shù)碼管
	//數(shù)碼管位選
	P27 = 1; P26 = 1; P25 = 1;	//Y7=0;Y7C=1; 使能鎖存器U7
	P0 = 0xC0;					//顯示0
	
	while(1)
	{	}
}

如果想讓第5個(gè)數(shù)碼管也顯示相同的內(nèi)容,就在段選的第二行代碼,將P04也選中

#include <STC15F2K60S2.H>
#include "smg.h"

void main()
{
	P2 = 0xA0;	P0 = 0x00;	//初始化,關(guān)閉蜂鳴器繼電器
//	P2 = 0x80;	P0 = 0xFF;	//Y4=0;選中LED,使其滅
	
	//數(shù)碼管段選
	P27 = 1; P26 = 1; P25 = 0;	//Y6=0;Y6C=1; 使能鎖存器U8
	P00 = 1; P04 = 1;			//選中第一個(gè)數(shù)碼管
	//數(shù)碼管位選
	P27 = 1; P26 = 1; P25 = 1;	//Y7=0;Y7C=1; 使能鎖存器U7
	P0 = 0xC0;					//顯示0
	
	while(1)
	{	}
}

動態(tài)數(shù)碼管

動態(tài)數(shù)碼管的工作原理及使用

動態(tài)顯示的特點(diǎn)是將所有位數(shù)碼管的段選線并聯(lián)在一起,由位選線控制是哪一個(gè)數(shù)碼管有效。這樣一來,就沒有必要每一位數(shù)碼管分配一個(gè)鎖存器,從而大大簡化硬件電路。選亮數(shù)碼管采用動態(tài)掃描顯示。所謂動態(tài)掃描顯示即輪流向各位數(shù)碼掛送出字形碼和相應(yīng)的位選,利用發(fā)光二極管的余暉和人眼視覺暫留作用,使人肉眼感覺各位數(shù)碼管同時(shí)都在顯示。動態(tài)顯示的兩幅比靜態(tài)顯示要差一些,所以在選擇限流電阻時(shí)應(yīng)略小于靜態(tài)顯示電路中的電阻。

明白了一位數(shù)碼管是怎么顯示的,就可以操作8個(gè)數(shù)碼管了

下面是一次操作8個(gè)數(shù)碼管動態(tài)顯示的代碼

第一個(gè)數(shù)碼管顯示1,第二個(gè)數(shù)碼管顯示2……第八個(gè)數(shù)碼管顯示8

#include "smg.h"
#include "intrins.h"


void Delay_ms(int xms)		//15單片機(jī)延時(shí)函數(shù)@11.0592MHz
{
	unsigned char i, j;		
	while(xms--)
	{
		_nop_();
		_nop_();
		_nop_();
		i = 11;
		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}	
}

/*共陽極碼表 ABCDEF都是大寫*/
unsigned char wei[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x80, 0xC6, 0xC0, 0x86, 0x8E, 0xBF, 0xFF};
					   //0     1     2     3     4     5     6     7     8     9     A     B     C     D     E     F     -    滅

	
void SMG_Diaplay(void)
{
	//第1個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x01;	//選中第1個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[1];
	Delay_ms(1);
	
	//第2個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x02;	//選中第2個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[2];
	Delay_ms(1);
	
	//第3個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x04;	//選中第3個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[3];
	Delay_ms(1);
	
	//第4個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x08;	//選中第4個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[4];
	Delay_ms(1);
	
	//第5個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x10;	//選中第5個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[5];
	Delay_ms(1);
	
	//第6個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x20;	//選中第6個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[6];
	Delay_ms(1);
	
	//第7個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x40;	//選中第7個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[7];
	Delay_ms(1);
	
	//第8個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x80;	//選中第8個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[8];
	Delay_ms(1);
}

在while(1)里調(diào)用SMG_Diaplay即可

偷偷懶,用stc給的延時(shí)1ms代碼,延時(shí)1ms的目的是消影,即將本次的段選位選上一次的段選位選分隔開,互不影響,否則數(shù)碼管會重影看不清,莎普愛思也沒用

數(shù)碼管動態(tài)顯示代碼,藍(lán)橋杯單片機(jī)組~STC15,單片機(jī),嵌入式硬件

函數(shù)中有_nop_();? ? 需要調(diào)用#include "intrins.h"頭文件


100s倒計(jì)時(shí)

后三位數(shù)碼管依次顯示百十個(gè)位上的數(shù)字

我的思路是定義一個(gè)時(shí)間變量Time,初始化=100

在1s中斷的程序里讓Time--,這樣就實(shí)現(xiàn)了100s倒計(jì)時(shí)

如何讓這每一位都顯示在數(shù)碼管上呢?

我采用數(shù)位分離的方法,即將一個(gè)數(shù)的百位、十位、個(gè)位都分離出來,分別顯示

三位數(shù)數(shù)位分離方法

bai =?Time/100

shi =?Time/10%10

ge =?Time%10

?數(shù)碼管動態(tài)顯示代碼,藍(lán)橋杯單片機(jī)組~STC15,單片機(jī),嵌入式硬件

?數(shù)碼管部分代碼

#include "smg.h"
#include "intrins.h"


void Delay_ms(int xms)		//15單片機(jī)延時(shí)函數(shù)@11.0592MHz
{
	unsigned char i, j;		
	while(xms--)
	{
		_nop_();
		_nop_();
		_nop_();
		i = 11;
		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}	
}

/*共陽極碼表 ABCDEF都是大寫*/
unsigned char wei[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x80, 0xC6, 0xC0, 0x86, 0x8E, 0xBF, 0xFF};
					   //0     1     2     3     4     5     6     7     8     9     A     B     C     D     E     F     -    滅

		
void DJS_Show(unsigned char bai, unsigned char shi, unsigned char ge)
{
	//第6個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x20;	//選中第6個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[bai];	//顯示百位
	Delay_ms(1);
	
	//第7個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x40;	//選中第7個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[shi];	//顯示十位
	Delay_ms(1);
	
	//第8個(gè)數(shù)碼管
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	P0 = 0x80;	//選中第8個(gè)數(shù)碼管
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0 = wei[ge];	//顯示個(gè)位
	Delay_ms(1);
}	
#ifndef __SMG_H__
#define __SMG_H__

#include <STC15F2K60S2.H>

extern unsigned char wei[];

void SMG_Diaplay(void);
void DJS_Show(unsigned char bai, unsigned char shi, unsigned char ge);

#endif

主程序代碼

#include <STC15F2K60S2.H>
#include "smg.h"
#include "Timer0.h"

unsigned char Time = 100;

void main()
{
	P2 = 0xA0;	P0 = 0x00;	//初始化,關(guān)閉蜂鳴器繼電器
	P2 = 0x80;	P0 = 0xFF;	//Y4=0;選中LED,使其滅
	Timer0_Init();	
	
	while(1)
	{
		DJS_Show(Time/100, Time/10%10, Time%10);
	}
}

void Timer0_Rountine(void) interrupt 1
{	//5ms定時(shí)
	static unsigned int Count0;

	Count0++;
	if(Count0 >= 200)	//1s
	{
		Time--;
		Count0 = 0;	//軟件復(fù)位
	}
}

這個(gè)100s是不精確的,因?yàn)榭刂茢?shù)碼管程序里時(shí)鐘有1ms延時(shí)


動態(tài)數(shù)碼管封裝代碼

改用一位一位單獨(dú)控制的數(shù)碼管,操作方便?

和51單片機(jī)數(shù)碼管程序差不多文章來源地址http://www.zghlxwxcb.cn/news/detail-547720.html

void Delay_ms(int xms)		//15單片機(jī)延時(shí)函數(shù)@11.0592MHz
{
	unsigned char i, j;		
	while(xms--)
	{
		_nop_();		_nop_();		_nop_();
		i = 11;		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}	
}

/*共陽極碼表 ABCDEF都是大寫*/
unsigned char NixieTable[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x80, 0xC6, 0xC0, 0x86, 0x8E, 0xBF, 0xFF};
					   //0     1     2     3     4     5     6     7     8     9     A     B     C     D     E     F     -    滅

void Nixie(unsigned char location, unsigned char number)
{
	P2 = 0xC0;	//Y6=0;Y6C=1; 使能鎖存器U8     P27 = 1; P26 = 1; P25 = 0;
	switch(location)//選中LED位置,位選
	{
		case 1:P0 = 0x01;break;
		case 2:P0 = 0x02;break;
		case 3:P0 = 0x04;break;
		case 4:P0 = 0x08;break;
		case 5:P0 = 0x10;break;
		case 6:P0 = 0x20;break;
		case 7:P0 = 0x40;break;
		case 8:P0 = 0x80;break;
	}
	P2 = 0xFF;	//Y7=0;Y7C=1; 使能鎖存器U7     P27 = 1; P26 = 1; P25 = 1;
	P0=NixieTable[number];//數(shù)字
	Delay_ms(1);
	P0=0xFF;//消影清零,否則重影
}

到了這里,關(guān)于【STC15單片機(jī)】動態(tài)數(shù)碼管的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【51單片機(jī)】動態(tài)數(shù)碼管

    【51單片機(jī)】動態(tài)數(shù)碼管

    0、前言 參考: 普中51單片機(jī)開發(fā)攻略–A2.pdf 上一章我們主要是介紹一位數(shù)碼管的內(nèi)部結(jié)構(gòu)及控制原理。下面我們再來介 紹下多位數(shù)碼管及動態(tài)顯示原理的相關(guān)知識。 本章所要實(shí)現(xiàn)的功能是:控制動態(tài)數(shù)碼管從左至右顯示數(shù)字 0-7。 為了正規(guī)點(diǎn),工程弄個(gè)正規(guī)文件夾: http

    2024年01月21日
    瀏覽(43)
  • 單片機(jī)——數(shù)碼管動態(tài)顯示

    單片機(jī)——數(shù)碼管動態(tài)顯示

    1.頭文件和定義,代碼還使用了 sbit 定義來聲明了兩個(gè)變量 duan 和 wei,它們實(shí)際上是 P2.6 和 P2.7 端口的別名,用于控制數(shù)碼管的段選和位選信號。這種方法可以使代碼更具可讀性,并提高代碼的可維護(hù)性。定義無符號整數(shù)便于后面應(yīng)用。 2.使用一個(gè) 16 個(gè)元素的數(shù)組 table,該數(shù)

    2024年02月11日
    瀏覽(21)
  • 單片機(jī)-如何讓數(shù)碼管動態(tài)顯示

    單片機(jī)-如何讓數(shù)碼管動態(tài)顯示

    單片機(jī)IO口輸出難穩(wěn)定,需要數(shù)碼管與單片機(jī)連接需要增加驅(qū)動電路, 使用 74HC245 abcdefgDP并聯(lián)導(dǎo)出??74HC245 對數(shù)碼管進(jìn)行驅(qū)動,P0 是輸出電流 來驅(qū)動各個(gè)段的 驅(qū)動芯片 增加電阻 是為了防止電流過大燒壞數(shù)碼管 。P0輸出段選的 共陰 就是所有陰極 連接 在一起,連接在公共端

    2024年02月09日
    瀏覽(22)
  • 單片機(jī)實(shí)驗(yàn)六 動態(tài)數(shù)碼管實(shí)驗(yàn)

    單片機(jī)實(shí)驗(yàn)六 動態(tài)數(shù)碼管實(shí)驗(yàn)

    1.熟悉實(shí)驗(yàn)軟件和硬件,進(jìn)行正確的接線; 2.編程使得數(shù)碼管排依次顯示01234567 1.Keil uVision4 2.PZISP自動下載軟件 3.HC6800S開發(fā)板 動態(tài)數(shù)碼管實(shí)驗(yàn)整體圖 通過P22、P23、P24控制3-8譯碼器來對數(shù)碼管進(jìn)行位選,通過P0口經(jīng)過573的驅(qū)動控制數(shù)碼管的段選,通過P13控制573的使能端,為低電

    2024年02月09日
    瀏覽(19)
  • 51單片機(jī)控制數(shù)碼管動態(tài)顯示

    51單片機(jī)控制數(shù)碼管動態(tài)顯示

    首先打開proteus,導(dǎo)入8位數(shù)碼管和89c51。 然后如圖連線,分清斷碼和位碼, 斷碼就是一個(gè)數(shù)碼管的7個(gè)LED燈。 位碼:就是第幾位顯示,由于是共陰極,所以哪位接地就顯示哪位。 下面通過改變位碼的接線就可以看出不同的效果 下面就編寫程序,從第1位到第8位顯示從0到7的八

    2023年04月21日
    瀏覽(16)
  • 51單片機(jī)動態(tài)數(shù)碼管顯示自己學(xué)號

    51單片機(jī)動態(tài)數(shù)碼管顯示自己學(xué)號

    實(shí)驗(yàn)題目:使用51單片機(jī)實(shí)現(xiàn)動態(tài)數(shù)碼管顯示自己8位學(xué)號,例如20220018 在此原理圖又分兩種連接方式: 第一種是8位數(shù)碼管接38譯碼器來減少端口使用。 第二種是,沒有端口要求接好就可以那就是,把位選端接P3口,段選端接P0口,這樣占用端口多,一般實(shí)驗(yàn)都是使用第一種接

    2024年02月13日
    瀏覽(17)
  • 基于串口通信技術(shù)——讓數(shù)碼管顯示的數(shù)據(jù)發(fā)送給電腦,電腦控制單片機(jī)外設(shè)——15單片機(jī)

    基于串口通信技術(shù)——讓數(shù)碼管顯示的數(shù)據(jù)發(fā)送給電腦,電腦控制單片機(jī)外設(shè)——15單片機(jī)

    目錄 1.使用的單片機(jī)為IAPI15F2K61S2 2.使用的外設(shè) 3.各個(gè)外設(shè)的作用 1.數(shù)碼管功能 ?2.LED燈 3.蜂鳴器與繼電器 4.按鍵 5.串口通信 4.利用發(fā)送單個(gè)字符函數(shù) 發(fā)送字符型的數(shù)字值,為一個(gè)變量+\\\'0\\\',發(fā)送為字符型數(shù)字。 4.初始化 5.程序 1.main 2.iic.h 3.onewire.c 1.LED燈,繼電器與蜂鳴器。 2.數(shù)

    2024年02月10日
    瀏覽(24)
  • 【51單片機(jī)】數(shù)碼管的靜態(tài)與動態(tài)顯示(含消影)

    【51單片機(jī)】數(shù)碼管的靜態(tài)與動態(tài)顯示(含消影)

    數(shù)碼管在現(xiàn)實(shí)生活里是非常常見的設(shè)備,例如 這些數(shù)字的顯示都是數(shù)碼管的應(yīng)用。 注意 :數(shù)碼管有 共陰 和 共陽 的區(qū)分。 在自己設(shè)計(jì)電路時(shí),應(yīng)當(dāng)選用一種數(shù)碼管時(shí)需要選用相應(yīng)的譯碼器(共陰配共陰,共陽同理) 數(shù)碼管的使用: 數(shù)碼管其實(shí)就是一段一段LED構(gòu)成的,51單

    2024年01月19日
    瀏覽(20)
  • C51單片機(jī)-共陽極數(shù)碼管循環(huán)顯示數(shù)字0至9,共陰極數(shù)碼管循環(huán)顯示5201314(動態(tài))
  • 單片機(jī)C語言實(shí)例:3、數(shù)碼管累加與累減動態(tài)顯示

    程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?: 程序?qū)嵗?0: 程序?qū)嵗?1:

    2024年02月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包