1. 程式人生 > >51微控制器資料管移位殘影解決

51微控制器資料管移位殘影解決

最近開始玩微控制器,用資料管的時候發現是陽極管,所以陰極管的消影方法就不是很適用了.

於是直接利用消影抽象方法:消去上階段的資料來去除這階段出現的上階段殘影.

以下是程式碼及消影解釋:

/*
中斷計時器及資料管(陽極管)消影
*/
#include <reg52.h>

sbit LATCH1 = P2^2;//段碼
sbit LATCH2 = P2^3;//位碼

unsigned char code LedChar[]=
{
 0xC0,0xF9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e
};
unsigned char ADDNum[8]=
{
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
};
unsigned char flag1s = 0;
unsigned int  cnt    = 0;
unsigned char i      = 0;

void main()
{						
	unsigned int sec = 0;
	unsigned char k  = 0;
    EA |= 1;
    ET0 = 1;
	TMOD= 0x01;
	TH0 = 0xfc;
	TL0 = 0x67;
	TR0 = 1;
	while(1)
	{
	if (flag1s==1)
	{
	unsigned char sgn = 0;
	flag1s = 0;
	sec++;
	if (sec/10==0)
	sgn = 0;
	else if (sec/100==0)
	sgn = 1;
	else if (sec/1000==0)
	sgn = 2;
	else if (sec/10000==0)
	sgn = 3;
	else sgn =4;
	for(k=0;k<=sgn;k++)
	switch(k)
	{
		case 0:ADDNum[k]=LedChar[sec%10];break;
		case 1:ADDNum[k]=LedChar[sec/10%10];break;
		case 2:ADDNum[k]=LedChar[sec/100%10];break;
		case 3:ADDNum[k]=LedChar[sec/1000%10];break;
		case 4:ADDNum[k]=LedChar[sec/10000%10];break;
		case 5:ADDNum[k]=LedChar[sec/10^5%10];break;
		case 6:ADDNum[k]=LedChar[sec/10^6%10];break;
		case 7:ADDNum[k]=LedChar[sec/10^7%10];break;
		default:break;
	}
	}
	}

}

void InterruptTimer0() interrupt 1
{

	TH0 = 0xFC;
	TL0 = 0x67;
	TF0 = 0;
	cnt++;

	if(i>=8)
	i=0;

	if (cnt >= 1000)
	{
	 	cnt    = 0;
		flag1s = 1;
	}
	
	P0     = ~0xff;     //重置段碼消除上階段顯示的資料   消隱完成:)
	LATCH1 = 1;         //該段程式碼不能寫在 輸入段碼 之後  其本身就是輸入顯示為空的段碼來消去上一階段的剩餘輸入
	LATCH1 = 0;
	
	P0     = ~(0x80>>i);//用位操作確定位碼
	LATCH2 = 1;
	LATCH2 = 0;
	P0     = ~ADDNum[i];//輸入段碼(該階段要顯示的資料)
	LATCH1 = 1;
	LATCH1 = 0;
	i++;
}


相關推薦

51微控制器資料移位解決

最近開始玩微控制器,用資料管的時候發現是陽極管,所以陰極管的消影方法就不是很適用了. 於是直接利用消影抽象方法:消去上階段的資料來去除這階段出現的上階段殘影. 以下是程式碼及消影解釋: /* 中斷計

51微控制器資料的消問題

數碼管的消影 未消影 程式碼 #include<reg52.h> sbit wela=P2^7; //位選 sbit dula=P2^6; //段

基於51 微控制器的串列埠收發資料

在進行串列埠的收發資料過程中一定要注意波特率的問題。 大多數51微控制器用的都是11m晶振而只有少部分用的是奇葩的12m(樓主的就是),在12m晶振進行串列埠通訊時切忌要將波特率設定為4800以下,應為12m晶振的波特率在9600以上誤差很大容易丟失資料,動手能力強的可以折騰一下用定時器輸出96

51微控制器_數碼

1 /**************************************************************************************

KST-51微控制器:c語言程式設計實現數碼動態顯示秒錶的倒計時

/*60S倒計時*/ /*個位每1S變一次,從0~9*/ /*十位,個位為0的下一秒十位發生變化*/ #include<reg52.h> sbit ADDR0=P1^0; sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3

(學習筆記)手把手教你學51微控制器:中斷與數碼動態顯示

一、c語言的陣列 1.1陣列的基本概念 陣列是具有相同資料型別的有序資料的組合,一般來講陣列定義後滿足以下三個條件: (1)具有相同的資料型別 (2)具有相同的名字 (3)在儲存器中是被連續存放的 1.2陣列的宣告 資料型別 陣列名【陣列長度】; (1)同一個

51微控制器實現數碼滾動顯示

#include <REGX51.H> void main() { const unsigned char design[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x82,0xf8,0x80,0x90};//0x3f,0x06,

零基礎入門學習51微控制器教程,教材書籍+視訊教程+例程程式碼+學習資料+掃碼應用

[本書特色: 本書巧妙地將對微控制器原理的講述與硬體實驗裝置結合起來,列舉了大量有趣易懂的小例子,深入淺出地用實操案例來講述微控制器的工作原理、擴充套件知識、程式設計技巧,講授微控制器專案開發的流程及方法。綜合王老師多年專案經驗及教研成果,內容細緻、風格突出、是一本全面講述51微控制器

51微控制器【三】靜態驅動數碼

void DigDisplay(void) { unsigned char i = 0; // 首先確定位碼,選中最左側數碼管,注意查38譯碼器的真值表,gagbgc為38譯碼器的ABC埠 gA = 0; gB = 0; gC = 0; // 依次顯示0-F

51微控制器按鍵控制數碼加減和秒錶

#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit k1=P3^4; sbit k2=P3^5; sbit k3=P3^6; sbit k4=P3^7; sbit du=P

51微控制器:每次按S1鍵,流水燈移位演示

原理圖 //原始碼 #include <reg52.h> #include <intrins.h> //包含移位函式 #define uint unsigned

利用51微控制器,矩陣鍵盤按鍵顯示0--F在數碼

程式碼如下:       #include <reg52.h> #define uchar unsigned char #define uint  unsigned int sbit we = P2^7; sbit du = P2^

51微控制器無法燒錄程式的N種解決辦法

51微控制器無法燒錄程式的N種解決辦法 有沒有掉電!!!如果沒有自動掉電的電路時,需要手動掉電; 微控制器的晶振有沒有安裝好,是否有缺失,晶振的負載電容是否合適; CH340的TXD,RXD要與微控制器的TXD,RXD反接,CH340的地線有沒有和微控制器接好;

基於51微控制器的電子時鐘(數碼顯示)

     此次對於數碼管進行一個簡單的應用,同時可以設計一個電子小時鐘,增加趣味性。 首先我們先進行原理圖的講解,這裡我們直接使用的開發板,其原理連線圖如下: 其中D(0~1)是連線在微控制器的P0口上的。    從圖中,我們可

基於proteus的51微控制器模擬例項六十、8位數碼顯示例項

1、本例實現在8位數碼管上同時顯示多個不同字元。 2、本例使用了8只整合式7段共陽數碼管(pruteus中元件標識為7seg-mpx8-ca-blu,共陽為ca,共陰為cc),所有8個數碼管的段碼引腳a,b,c,d,e,f,g,dp都是分別並聯在一起,任何時候傳送的段碼

51微控制器:獨立按鍵與矩陣按鍵控制數碼

一,獨立按鍵注意一下幾點 >按下的時候,電壓被拉低,所以IO口要傳低電平( 0x0 ) >按下的時候要消除抖動 ( 延時10ms ),在判斷,是否還是低電平,再做業務處理 下面這段程式,就是通過一個獨立按鍵連線到p1口,控制靜態數碼管的 一段 進行亮和滅的切換。 #include &l

一天:51微控制器從入門到一個動態數碼顯示數字控制

最近進的公司是一個做路由器的。。很多嵌入式工程師。有個專案( 智慧空調控制)是跟嵌入式工程師對接,我做APP+PHP。。他做伺服器。我們用MQTT(由於emqtt是用erlang寫的,所以我也學了點erlang,後期有時間分享一下,這個語言很好,很強大。特別抽象)。這個專案激發了我對嵌入式的興趣,於是乎。開始

51微控制器之外設——玩轉數碼

這篇博文,將對數碼管進行介紹和驅動,與之所關聯的晶片,亦是前面所講的74HC138譯碼器、74HC02或非門、74HC573鎖存器,所用的 I/O 口,依然是11個——P2.5P.6P2.7以及P0~P7。 首先,什麼是數碼管? 數碼管是由多個發光二極體封裝

基於proteus的51微控制器模擬例項七十九、8位數碼驅動晶片max7221應用例項

1、MAX7221是整合式共陰極數碼管驅動晶片。可以用來驅動8位7段式數碼管,也可以驅動條形LED或者8*8LED點陣 微控制器僅僅需要3個IO口就可以控制MAX7221驅動8位數碼管。注意這裡的

51微控制器bit資料型別

bit是C51編譯器的一種擴充資料型別,利用它可定義一個位標量,但不能定義位指標,也不能定義位陣列。它的值是一個二進位制位,不是0就是1,類似一些高階語言中的Boolean型別中的True和False。事實上,bit和資料型別為int,char等具有許多相同特性。 1. 值域: 以char為例。Char為8位