使用四塊8×8的點陣拼成16×16的點陣,用了兩個譯碼器,只設置了三個字(改字可以用字模轉換器)按鍵控制左移、右移、暫停、啟動
單片機源程序如下:
/************************************************
16x16點陣漢字滾動顯示
************************************************/
#include #define uchar unsigned char #define uint unsigned int sbit LA=P1^0; //138譯碼器地址選擇引腳 sbit LB=P1^1; sbit LC=P1^2; sbit LD=P1^3; sbit k1=P3^6; //啟動或暫停按鍵 sbit k2=P3^7; //改變方向按鍵 bit fx=0; //滾動方向 uint index=0; //列掃描索引 uchar code hztab[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空格 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08,0x04,0x10,0x04,0x20,0x24,0x40,0x24,0xfc,0x24,0xa2,0x24,0x22,0xfd,0x22,0x26, //老 0x42,0x24,0x42,0x2c,0x42,0x14,0x82,0x24,0x1e,0x44,0x00,0x04,0x00,0x04,0x00,0x00, 0x00,0x00,0xe1,0x3f,0x02,0x00,0x0c,0x00,0xf0,0xff,0x00,0x00,0x00,0x40,0xf8,0x47, //師 0x00,0x44,0x00,0x44,0xff,0x7f,0x10,0x44,0x08,0x44,0xf0,0x47,0x00,0x40,0x00,0x00, 0x02,0x08,0x44,0x08,0xa8,0x0f,0x10,0xf8,0x68,0x08,0x86,0x0f,0x00,0x00,0x00,0x01, //好 0x02,0x41,0x01,0x41,0xfe,0x47,0x00,0x49,0x00,0x51,0x00,0x61,0x00,0x01,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空格 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, }; //===================函數聲明==================== void T0_Init(); //定時器0初始化 void delayus(uint us); //延時函數 void keyscan(); //按鍵掃描函數 //====================主程序===================== void main() { uchar i,j; T0_Init(); //定時器0初始化 while(1) { keyscan(); //按鍵掃描 for(i=0;i<16;i++) //點陣16列 { LA=i&0x01; //用級聯138進行列選 LB=i&0x02; LC=i&0x04; LD=i&0x08; j=index+i; //定位當前要顯示的列 P0=hztab[j*2+1]; //發送點陣數據 P2=hztab[j*2]; //共兩個字節 delayus(100); //延時 P0=P2=0x00; //消影 } delayus(100); //延時 } } //=================定時器0初始化================= void T0_Init() { TMOD=0x01; //定時器0,工作方式1 TH0=(65536-10000)/256; //定數器初值 TL0=(65536-10000)%256; //10ms定時 ET0=1; //打開定時器0中斷允許 EA=1; //打開總中斷允許 TR0=0; //暫不啟動定時器0 } //===============定時中斷0服務程序=============== void timer0() interrupt 1 { static uchar tick=0; //嘀嗒計時 TH0=(65536-10000)/256; //重裝裝初值 TL0=(65536-10000)%256; //10ms定時 tick++; //計數 if(tick==5) //5次 { tick=0; //清0 if(fx==0)index=(index+1)%64; //若方向為左移,則掃描線加1 else index=(index-1+64)%64; //否則掃描線減1 } } //===================延時函數==================== void delayus(uint us) { while(us--); } //=================按鍵掃描函數================== void keyscan() { if(k1==0) //檢測k1是否按下 { delayus(100); //延時消抖 if(k1==0) //確認k1被按下 { TR0=~TR0; //定時器啟停反轉 while(k1==0); //等待按鍵松開 } } if(k2==0) //檢測k2是否按下 { delayus(100); //延時消抖 if(k2==0) //確認k2被按下 { fx=~fx; //方向反轉 while(k2==0); //等待按鍵松開 } } }
上一篇:51單片機+74LS160頻率計,最高可測頻10M
下一篇:單片機溫度測控系統+精度為0.1℃+4位共陽數碼管顯示
推薦閱讀
史海拾趣
在20世紀90年代初,Frequency Sources公司(或類似名稱的公司)憑借其在頻率源技術領域的深厚積累,成功研發出了一種新型高精度晶體振蕩器。這種振蕩器在穩定性、相位噪聲和溫度特性等方面均達到了當時業界的頂尖水平,為無線通信、衛星導航等領域提供了關鍵的技術支持。這一技術創新不僅鞏固了公司在頻率源技術領域的領先地位,還為公司贏得了廣泛的市場認可和大量訂單。
隨著技術的不斷積累和發展,BEL逐漸擺脫了對外部技術的依賴,開始自主研發和生產電子產品。公司不僅成功開發出一系列具有自主知識產權的產品,還打造了知名的BEL品牌。這些產品以其高性能、高可靠性在市場中贏得了廣泛認可,使BEL成為印度乃至全球電子行業中的佼佼者。
隨著企業規模的不斷擴大和影響力的提升,Astro Tool Corp公司逐漸認識到企業社會責任的重要性。公司積極參與社會公益事業,為當地社區和弱勢群體提供幫助和支持。同時,公司還注重環境保護和可持續發展,通過引進環保技術和設備,降低生產過程中的能耗和排放,實現綠色生產。這些舉措不僅提升了公司的社會形象,也為公司的長遠發展奠定了堅實基礎。
請注意,這些故事是虛構的,旨在展示一個電子行業企業可能經歷的一些典型發展階段和策略,并不代表任何真實公司的具體情況。如果需要更貼近真實情況的故事,建議進一步調研和了解Astro Tool Corp公司的實際發展歷程。
Bkc Semiconductors Inc最初是一家專注于半導體技術研發的小型創業公司。在公司成立的初期,團隊通過不懈的努力,成功研發出了一款具有高性價比的功率半導體芯片,該芯片在能效和穩定性上均達到了行業領先水平。這一技術突破使得Bkc的產品迅速獲得了市場的認可,公司開始逐漸在電子行業中嶄露頭角。
創立不久,愛普特微電子便迎來了一次重大的技術突破。公司成功研發出了全國產、全自主可控、高可靠性的32位微處理器芯片。這一產品的推出,不僅填補了國內市場的空白,更以其卓越的性能和穩定性,贏得了市場的廣泛認可。隨后,公司又基于自研IP庫及RISC架構內核,量產了一系列全國產高可靠性32位MCU產品,廣泛應用于工業控制、物聯網、智能家電等領域。
隨著電子行業的快速發展,馳興電感緊跟市場趨勢,不斷拓展產品應用領域。除了傳統的消費電子和通訊領域外,馳興電感還成功將產品應用于汽車電子、網絡通訊、智能家居等新興領域。這些領域的拓展不僅為公司帶來了更廣闊的市場空間,也進一步提升了馳興電感在電子行業中的地位。
摘要:介紹了一個實用IGBT驅動信號轉換電路的CPLD設計?并給出了該設計的仿真波形。 關鍵詞:PWM CPLD IGBT VHDL 自頂向下 隨著國民經 ...… 查看全部問答∨ |
|
我們是c8051f單片機專業代理,國內最低價處理c8051f單片機系列產品!! c8051f330 9元/片 c8051f330st 125元/套 原裝EC3 390元/套(配套下載線+光盤+運費) c8051f單片機仿真器 90元/套(配套下載線+光盤+運費) c8051f120 55元/片 c8051f33 ...… 查看全部問答∨ |
如題, 不太明白這個等級4,6的劃分有什么不同,我聽說是寫速度上會有提高,讀速度沒有明顯增強, 情況是這樣的嗎? 現在的SD卡就CLASS6而言,其讀寫速度分別能達到多少呢? 請懂得兄弟們賜教。… 查看全部問答∨ |
請教流驅動***_Init(ULONG Identifier)函數執行失敗問題 各位高人,我是個新手,在寫一個流驅動程序,代碼如下: HANDLE ghSerialHead = NULL; typedef HANDLE (WINAPI *PFNCOM_Init)(ULONG); PFNCOM_Init gpfnCOM_Init = NULL; ghLibInst = LoadLibrary(gchwLibName); ghSe ...… 查看全部問答∨ |
急需幫忙,昨天拿出來用原來論壇贊助的LPC1343的板子,發現連不上了,請高手們分析下原因,謝謝!! 還是我的板子壞了? 仿真器是用的板子上帶的! 軟件需要特殊設置嗎?? No emulator or board available.This could be because it is ...… 查看全部問答∨ |
堆棧作用的就是用來保存局部變量,從本質上講也就是將CPU寄存器的值保存到RAM中。在uCOS中,每一個任務都有一個獨立的任務堆棧。為了深入理解任務堆棧的作用,不妨分析任務從“出生”到“消亡”的整個過程,具體就是分析任務的建立,運行,掛起幾種 ...… 查看全部問答∨ |
昨天看了一個函數,這樣寫的: return HWREG(GPIO_PORTC_BASE+GPIO_O_DATA+(0xff<<2))&0x80;目的是為了讀PC7的值并且以unit8型返回,對他這個0xff <<2不太理解,我自己這樣寫了一個: return (GPIOPinRea ...… 查看全部問答∨ |