在本課中,我們要用一個(gè)按鍵來實(shí)現(xiàn)跑馬燈的 10 級調(diào)速。這又會(huì)涉及到鍵的去抖的問 題。 本課的試驗(yàn)結(jié)果是,每按一次按鍵,跑馬速度就降低一級,共 10 級。 這里我們又增加了一個(gè)變量 speedlever,來保存當(dāng)前的速度檔次。 在按鍵里的處理中,多了當(dāng)前檔次的延時(shí)值的設(shè)置。 請看程序: ―――――――――――――――― #define uchar unsigned char //定義一下方便使用 #define uint unsigned int #define ulong unsigned long #include <reg52.h> //包括一個(gè) 52 標(biāo)準(zhǔn)內(nèi)核的頭文件 sbit P10 = P1^0; //頭文件中沒有定義的 IO 就要自己來定義了 sbit P11 = P1^1; sbit P12 = P1^2; sbit P13 = P1^3; sbit K1= P3^2; bit ldelay=0; //長定時(shí)溢出標(biāo)記,預(yù)置是 0 uchar speed=10; //設(shè)置一個(gè)變量保存默認(rèn)的跑馬燈的移動(dòng)速度 uchar speedlever=0; //保存當(dāng)前的速度檔次 char code dx516[3] _at_ 0x003b;//這是為了仿真設(shè)置的 //一個(gè)按鍵控制的 10 級變速跑馬燈試驗(yàn) void main(void) // 主程序 { uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//預(yù)定的寫入 P1 的值 uchar ledi; //用來指示顯示順序 uint n; RCAP2H =0x10; //賦 T2 的預(yù)置值 0x1000,溢出 30 次就是 1 秒鐘 RCAP2L =0x00; TR2=1; //啟動(dòng)定時(shí)器 ET2=1; //打開定時(shí)器 2 中斷 EA=1; //打開總中斷 while(1) //主程序循環(huán) { if(ldelay) //發(fā)現(xiàn)有時(shí)間溢出標(biāo)記,進(jìn)入處理 { ldelay=0; //清除標(biāo)記 P1=ledp[ledi]; //讀出一個(gè)值送到 P1 口 ledi++; //指向下一個(gè) if(ledi==4) { ledi=0; //到了最后一個(gè)燈就換到第一個(gè) } } if(!K1) //如果讀到 K1 為 0 { for(n=0;n<1000;n++); //等待按鍵穩(wěn)定 while(!K1); //等待按鍵松開 for(n=0;n<1000;n++); //等待按鍵穩(wěn)定松開 speedlever++; if(speedlever==10)speedlever=0; speed=speedlever*3; //檔次和延時(shí)之間的預(yù)算法則,也可以用查表方法,做出 不規(guī)則的法則 } } } //定時(shí)器 2 中斷 timer2() interrupt 5 { static uchar t; TF2=0; t++; if((t==speed)||(t>30)) //比較一個(gè)變化的數(shù)值,以實(shí)現(xiàn)變化的時(shí)間溢出,同時(shí)限制了最慢速 度為 1 秒 { t=0; ldelay=1;//每次長時(shí)間的溢出,就置一個(gè)標(biāo)記,以便主程序處理 } } ―――――――――――――――――――――― 請打開 lesson11 目錄的工程,編譯,運(yùn)行,看結(jié)果: 按 K1,速度則降低一次,總共 10 個(gè)檔次。
上傳時(shí)間: 2017-11-06
上傳用戶:szcyclone
#include<stdio.h> #define TREEMAX 100 typedef struct BT { char data; BT *lchild; BT *rchild; }BT; BT *CreateTree(); void Preorder(BT *T); void Postorder(BT *T); void Inorder(BT *T); void Leafnum(BT *T); void Nodenum(BT *T); int TreeDepth(BT *T); int count=0; void main() { BT *T=NULL; char ch1,ch2,a; ch1='y'; while(ch1=='y'||ch1=='y') { printf("\n"); printf("\n\t\t 二叉樹子系統(tǒng)"); printf("\n\t\t*****************************************"); printf("\n\t\t 1---------建二叉樹 "); printf("\n\t\t 2---------先序遍歷 "); printf("\n\t\t 3---------中序遍歷 "); printf("\n\t\t 4---------后序遍歷 "); printf("\n\t\t 5---------求葉子數(shù) "); printf("\n\t\t 6---------求結(jié)點(diǎn)數(shù) "); printf("\n\t\t 7---------求樹深度 "); printf("\n\t\t 0---------返 回 "); printf("\n\t\t*****************************************"); printf("\n\t\t 請選擇菜單號 (0--7)"); scanf("%c",&ch2); getchar(); printf("\n"); switch(ch2) { case'1': printf("\n\t\t請按先序序列輸入二叉樹的結(jié)點(diǎn):\n"); printf("\n\t\t說明:輸入結(jié)點(diǎn)(‘0’代表后繼結(jié)點(diǎn)為空)后按回車。\n"); printf("\n\t\t請輸入根結(jié)點(diǎn):"); T=CreateTree(); printf("\n\t\t二叉樹成功建立!\n");break; case'2': printf("\n\t\t該二叉樹的先序遍歷序列為:"); Preorder(T);break; case'3': printf("\n\t\t該二叉樹的中序遍歷序列為:"); Inorder(T);break; case'4': printf("\n\t\t該二叉樹的后序遍歷序列為:"); Postorder(T);break; case'5': count=0;Leafnum(T); printf("\n\t\t該二叉樹有%d個(gè)葉子。\n",count);break; case'6': count=0;Nodenum(T); printf("\n\t\t該二叉樹總共有%d個(gè)結(jié)點(diǎn)。\n",count);break; case'7': printf("\n\t\t該樹的深度為:%d",TreeDepth(T)); break; case'0': ch1='n';break; default: printf("\n\t\t***請注意:輸入有誤!***"); } if(ch2!='0') { printf("\n\n\t\t按【Enter】鍵繼續(xù),按任意鍵返回主菜單!\n"); a=getchar(); if(a!='\xA') { getchar(); ch1='n'; } } } } BT *CreateTree() { BT *t; char x; scanf("%c",&x); getchar(); if(x=='0') t=NULL; else { t=new BT; t->data=x; printf("\n\t\t請輸入%c結(jié)點(diǎn)的左子結(jié)點(diǎn):",t->data); t->lchild=CreateTree(); printf("\n\t\t請輸入%c結(jié)點(diǎn)的右子結(jié)點(diǎn):",t->data); t->rchild=CreateTree(); } return t; } void Preorder(BT *T) { if(T) { printf("%3c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } void Inorder(BT *T) { if(T) { Inorder(T->lchild); printf("%3c",T->data); Inorder(T->rchild); } } void Postorder(BT *T) { if(T) { Postorder(T->lchild); Postorder(T->rchild); printf("%3c",T->data); } } void Leafnum(BT *T) { if(T) { if(T->lchild==NULL&&T->rchild==NULL) count++; Leafnum(T->lchild); Leafnum(T->rchild); } } void Nodenum(BT *T) { if(T) { count++; Nodenum(T->lchild); Nodenum(T->rchild); } } int TreeDepth(BT *T) { int ldep,rdep; if(T==NULL) return 0; else { ldep=TreeDepth(T->lchild); rdep=TreeDepth(T->rchild); if(ldep>rdep) return ldep+1; else return rdep+1; } }
上傳時(shí)間: 2020-06-11
上傳用戶:ccccy
1.2 源代碼表示不考慮主題,列舉 15 000行源代碼本身就是一件難事。下面是所有源代碼都使用的文本格式:1.2.1 將擁塞窗口設(shè)置為13 8 7 - 3 8 8 這是文件t c p _ s u b r . c中的函數(shù)t c p _ q u e n c h。這些源文件名引用4 . 4 B S D - L i t e發(fā)布的文件。4 . 4 B S D在1 . 1 3節(jié)中討論。每個(gè)非空白行都有編號。正文所描述的代碼的起始和結(jié)束位置的行號記于行開始處,如本段所示。有時(shí)在段前有一個(gè)簡短的描述性題頭,對所描述的代碼提供一個(gè)概述。這些源代碼同4 . 4 B S D - L i t e發(fā)行版一樣,偶爾也包含一些錯(cuò)誤,在遇到時(shí)我們會(huì)提出來并加以討論,偶爾還包括一些原作者的編者評論。這些代碼已通過了 G N U縮進(jìn)程序的運(yùn)行,使它們從版面上看起來具有一致性。制表符的位置被設(shè)置成 4個(gè)欄的界線使得這些行在一個(gè)頁面中顯示得很合適。在定義常量時(shí),有些 # i f d e f語句和它們的對應(yīng)語句 # e n d i f被刪去(如:G A T E W A Y和M R O U T I N G,因?yàn)槲覀兗僭O(shè)系統(tǒng)被作為一個(gè)路由器或多播路由器 )。所有r e g i s t e r說明符被刪去。有些地方加了一些注釋,并且一些注釋中的印刷錯(cuò)誤被修改了,但代碼的其他部分被保留下來。這些函數(shù)大小不一,從幾行 (如前面的t c p _ q u e n c h)到最大11 0 0行(t c p _ i n p u t)。超過大約4 0行的函數(shù)一般被分成段,一段一段地顯示。雖然盡量使代碼和相應(yīng)的描述文字放在同一頁或?qū)﹂_的兩頁上,但為了節(jié)約版面,不可能完全做到。本書中有很多對其他函數(shù)的交叉引用。為了避免給每個(gè)引用都添加一個(gè)圖號和頁碼,書封底內(nèi)頁中有一個(gè)本書中描述的所有函數(shù)和宏的字母交叉引用表和描述的起始頁碼。因?yàn)楸緯脑创a來自公開的 4 . 4 B S D _ L i t e版,因此很容易獲得它的一個(gè)拷貝:附錄 B詳細(xì)說明了各種方法。當(dāng)你閱讀文章時(shí),有時(shí)它會(huì)幫助你搜索一個(gè)在線拷貝 [例如U n i x程序grep ( 1 )]。描述一個(gè)源代碼模塊的各章通常以所討論的源文件的列表開始,接著是全局變量、代碼維護(hù)的相關(guān)統(tǒng)計(jì)以及一個(gè)實(shí)際系統(tǒng)的一些例子統(tǒng)計(jì),最后是與所描述協(xié)議相關(guān)的 S N M P變量。全局變量的定義通??缭礁鞣N源文件和頭文件,因此我們將它們集中到的一個(gè)表中以便于參考。這樣顯示所有的統(tǒng)計(jì),簡化了后面當(dāng)統(tǒng)計(jì)更新時(shí)對代碼的討論。卷 1的第2 5章提供了S N M P的所有細(xì)節(jié)。我們在本文中關(guān)心的是由內(nèi)核中的 T C P / I P例程維護(hù)的、支持在系統(tǒng)上運(yùn)行的S N M P代理的信息。TCP IP詳解 卷1協(xié)議 :http://dl.21ic.com/download/tcpip-288223.html TCP IP詳解 卷2實(shí)現(xiàn) :http://dl.21ic.com/download/tcpip-288224.html TCPIP詳解卷三:TCP事務(wù)協(xié)議,HTTP,NNTP和UNIX域協(xié)議 :http://dl.21ic.com/download/tcpip-288225.html
標(biāo)簽: tcp-ip 實(shí)現(xiàn)
上傳時(shí)間: 2022-07-27
上傳用戶:
TMS320 系列DSP 中斷矢量表的編寫及鏈接在DSP 編程中,若用戶用到中斷,需要編寫中斷服務(wù)程序和中斷向量表,并用鏈接命令來鏈接起來。中斷向量表是一些跳轉(zhuǎn)指令,每一個(gè)中斷源對應(yīng)一條跳轉(zhuǎn)指令(C54 可選多條跳轉(zhuǎn)指令),這些跳轉(zhuǎn)指令按順序排列,跳轉(zhuǎn)指向的地址就是中斷服務(wù)程序的起始地址。
上傳時(shí)間: 2013-06-15
上傳用戶:szchen2006
本文主要介紹了基于FPGA的無線信道盲均衡器的設(shè)計(jì)與實(shí)現(xiàn),在算法上選擇了比較成熟的DDLMS和CMA相結(jié)合的算法,結(jié)構(gòu)上采用四路正交FIR濾波器模型.在設(shè)計(jì)的過程中我們采取了用MATLAB進(jìn)行算法仿真,VerilogHDL語言進(jìn)行FPGA設(shè)計(jì)的策略.在硬件描述語言的設(shè)計(jì)流程中,信道盲均衡器運(yùn)用了Top-Down的模塊化設(shè)計(jì)方法,大大縮短了設(shè)計(jì)周期,提高了系統(tǒng)的穩(wěn)定性和可擴(kuò)展性.測試結(jié)果表明均衡器所有的性能指標(biāo)均達(dá)到預(yù)定目標(biāo),且工作性能良好,均衡效果較為理想,能夠滿足指標(biāo)要求.本課題所設(shè)計(jì)和實(shí)現(xiàn)的信道盲均衡器,為FPGA芯片設(shè)計(jì)技術(shù)做了有益的探索性嘗試,對今后無線通信系統(tǒng)中的單芯片可編程系統(tǒng)(SOPC)的設(shè)計(jì)運(yùn)用有著積極的借鑒意義.
上傳時(shí)間: 2013-07-11
上傳用戶:lwwhust
T-Kernel作為一種嵌入式操作系統(tǒng),由于實(shí)時(shí)性和開源性,在嵌入式操作系統(tǒng)領(lǐng)域中的應(yīng)用越來越廣泛。ARM是一款比較好的微處理器,T-Kernel在ARM上的應(yīng)用研究基本上是空白,所以結(jié)合兩者進(jìn)行研究促進(jìn)T-Kernel在國內(nèi)嵌入式領(lǐng)域的發(fā)展。同時(shí),T-Kernel內(nèi)部調(diào)度機(jī)制存在著優(yōu)先級反轉(zhuǎn)缺陷,優(yōu)先級反向使得高優(yōu)先級任務(wù)的執(zhí)行時(shí)間無法預(yù)測,增加了實(shí)時(shí)系統(tǒng)的不確定性。早期的解決協(xié)議較好地解決了優(yōu)先級反轉(zhuǎn)問題,但同時(shí)也存在著自身不足之處。 針對T-Kernel存在的缺陷,在深入研究相關(guān)協(xié)議的基礎(chǔ)上,本論文提出了一種新的改進(jìn)的優(yōu)先級繼承協(xié)議。該協(xié)議設(shè)置超時(shí)保護(hù)機(jī)制,避免任務(wù)在獲取信號量時(shí)長時(shí)間的阻塞,結(jié)合Havender提出的“有序資源使用法”防止死鎖發(fā)生,給出該協(xié)議的分析過程,并把該協(xié)議結(jié)合到T-Kernel中。在這個(gè)基礎(chǔ)之上,建立研究開發(fā)平臺;針對硬件設(shè)備,研究引導(dǎo)程序的執(zhí)行原理,實(shí)現(xiàn)系統(tǒng)的引導(dǎo)程序;構(gòu)建T-Kennel內(nèi)核;移植內(nèi)核到開發(fā)板;最后對T-Kernel的啟動(dòng)過程進(jìn)行了詳細(xì)的分析。 T-Kernel在ARM上的移植研究,為嵌入式系統(tǒng)開發(fā)的提供了一種開發(fā)流程,同時(shí)對于T-Kernel的啟動(dòng)過程的分析,為以后的應(yīng)用程序開發(fā)提供了一個(gè)接口;對于T-Kernel存在的優(yōu)先級反轉(zhuǎn)問題的解決,可以改進(jìn)T-Kernel的實(shí)時(shí)性和靈活性,同時(shí)為實(shí)時(shí)系統(tǒng)的性能改進(jìn)提供了參考。
上傳時(shí)間: 2013-04-24
上傳用戶:shangdafreya
漢字顯示是在只有西文操作系統(tǒng)的情況下, 以及一些無操作系統(tǒng)的小應(yīng)用系統(tǒng)中, 需要經(jīng)常用到的技術(shù)。如何得到漢字的字模是漢字顯示技術(shù)中首先必須解決的問題。本文利用VC++實(shí)現(xiàn)一種漢字字模的提取和小漢字庫的
上傳時(shí)間: 2013-06-08
上傳用戶:yuying4000
本文主要介紹了基于FPGA的無線信道盲均衡器的設(shè)計(jì)與實(shí)現(xiàn),在算法上選擇了比較成熟的DDLMS和CMA相結(jié)合的算法,結(jié)構(gòu)上采用四路正交FIR濾波器模型.在設(shè)計(jì)的過程中我們采取了用MATLAB進(jìn)行算法仿真,VerilogHDL語言進(jìn)行FPGA設(shè)計(jì)的策略.在硬件描述語言的設(shè)計(jì)流程中,信道盲均衡器運(yùn)用了Top-Down的模塊化設(shè)計(jì)方法,大大縮短了設(shè)計(jì)周期,提高了系統(tǒng)的穩(wěn)定性和可擴(kuò)展性.測試結(jié)果表明均衡器所有的性能指標(biāo)均達(dá)到預(yù)定目標(biāo),且工作性能良好,均衡效果較為理想,能夠滿足指標(biāo)要求.本課題所設(shè)計(jì)和實(shí)現(xiàn)的信道盲均衡器,為FPGA芯片設(shè)計(jì)技術(shù)做了有益的探索性嘗試,對今后無線通信系統(tǒng)中的單芯片可編程系統(tǒng)(SOPC)的設(shè)計(jì)運(yùn)用有著積極的借鑒意義.
上傳時(shí)間: 2013-05-28
上傳用戶:huyiming139
現(xiàn)代IC設(shè)計(jì)中,隨著設(shè)計(jì)規(guī)模的擴(kuò)大和復(fù)雜度的增長,驗(yàn)證成為最嚴(yán)峻的挑戰(zhàn)之一。在現(xiàn)代ASIC設(shè)計(jì)中,很難用單一的驗(yàn)證方法來對復(fù)雜芯片進(jìn)行有效的驗(yàn)證,為了將設(shè)計(jì)錯(cuò)誤減少到可接受的最小量,需要將一系列的驗(yàn)證方法和工具結(jié)合起來。 在64位全定制嵌入式CPU設(shè)計(jì)過程中,使用了多種驗(yàn)證技術(shù)和方法,并將FPGA驗(yàn)證作為ASIC驗(yàn)證的重要補(bǔ)充,加強(qiáng)了設(shè)計(jì)正確的可靠性。 論文首先介紹了64位CPU的結(jié)構(gòu),結(jié)合選用的Xilinx的Virtex
上傳時(shí)間: 2013-04-24
上傳用戶:003030
指紋識別作為生物特征識別的一種,在身份識別上有著其他手段不可比擬的優(yōu)越性:人的指紋具有唯一性和穩(wěn)定性;隨著指紋傳感器性能的提高和價(jià)格的降低.指紋的采集相對容易;指紋識別算法已經(jīng)比較成熟
標(biāo)簽: 指紋識別 算法 硬件實(shí)現(xiàn)
上傳時(shí)間: 2013-07-28
上傳用戶:chongcongying
蟲蟲下載站版權(quán)所有 京ICP備2021023401號-1