亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 5132|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)的萬(wàn)年歷 機(jī)課程設(shè)計(jì)論文下載 已做出實(shí)物

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是一個(gè)萬(wàn)年歷的小制作,包含有完整的論文,大家可以多多提供意見(jiàn)呀!!
里面有仿真圖以及源代碼提供下載
還有實(shí)物圖喲!
洛陽(yáng)理工學(xué)院?jiǎn)纹瑱C(jī)課程設(shè)計(jì)


課程名稱:基于單片機(jī)的萬(wàn)年歷
別:計(jì)算機(jī)與信息工程學(xué)院
級(jí):B140509
學(xué)號(hào):B14050918
名:伍華
人:李威 楊宇      
指導(dǎo)老師:

【目錄】
1              諸論
1.1              摘要
1.2              單片機(jī)發(fā)展概況
1.3              單片機(jī)原理及應(yīng)用簡(jiǎn)介
2              系統(tǒng)方案
2.1              系統(tǒng)功能
2.2              系統(tǒng)總體方案
2.2              芯片簡(jiǎn)介
2.2.1              80C52芯片
2.2.2              實(shí)時(shí)時(shí)鐘芯片DS1302
2.2.3              DS18B20單總線數(shù)字溫度計(jì)
2.2.4              Lcd1602液晶顯示器
3              系統(tǒng)軟件設(shè)計(jì)
4              PROTUES軟件仿真
4.1              仿真過(guò)程
4.2              仿真結(jié)果
5              開(kāi)發(fā)板調(diào)試結(jié)果
6              心得體會(huì)
7              待解決問(wèn)題
8              附錄

1        諸論1.1摘要
本設(shè)計(jì)是一個(gè)基于MCS-51單片機(jī)實(shí)現(xiàn)的萬(wàn)年歷。
單片機(jī)中央處理系統(tǒng)的方案設(shè)計(jì),選用80C52單片機(jī)作為中央處理器,如圖所示。該單片機(jī)除了擁有MCS-51系列單片機(jī)的所有優(yōu)點(diǎn)外,內(nèi)部還具有8K的在系統(tǒng)可編程FLASH存儲(chǔ)器,低功耗的空閑和掉電模式,極大的降低了電路的功耗,還包含了定時(shí)器、程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器等硬件,其硬件能符合整個(gè)控制系統(tǒng)的要求,不需要外接其他存儲(chǔ)器芯片和定時(shí)器件,方便地構(gòu)成一個(gè)最小系統(tǒng)。整個(gè)系統(tǒng)結(jié)構(gòu)緊湊,抗干擾能力強(qiáng),性價(jià)比高。
1.2單片機(jī)發(fā)展概況
單片機(jī)的發(fā)展歷史可大致分為4個(gè)階段。
  第一階段(1974年-1976年):?jiǎn)纹瑱C(jī)初級(jí)階段。因工藝限制,單片機(jī)采用雙片的形式而且功能比較簡(jiǎn)單。1974年12月,仙童公司推出了8位的F8單片機(jī),實(shí)際上只包括了8位CPU、64B RAM和2個(gè)并行口。
  第二階段(1976年-1978年):低性能單片機(jī)階段。1976年,Intel公司推出的MCS-48單片機(jī)(8位單片機(jī))極大地促進(jìn)了單片機(jī)的變革和發(fā)展;1977年,GI公司推出了PIC1650,但這個(gè)階段的單片機(jī)仍然處于低性能階段。
  第三階段(1978年-1983年):高性能單片機(jī)階段。1978年,Zilog公司推出了28單片機(jī);1980年,Intel公司在MCS-48單片機(jī)的基礎(chǔ)上推出了MCS-51系列,Mortorola公司推出了6801單片機(jī);這些產(chǎn)品使單片機(jī)的性能及應(yīng)用躍上了一個(gè)新的臺(tái)階。此后,各公司的8位單片機(jī)迅速發(fā)展起來(lái)。這個(gè)階段推出的單片機(jī)普遍帶有串行I/O口、多級(jí)中斷系統(tǒng)、16位定時(shí)器/計(jì)數(shù)器,片內(nèi)ROM、RAM容量加大,且尋址范圍可達(dá)64 KB,有的片內(nèi)還帶有A/D轉(zhuǎn)換器。由于這類單片機(jī)的性能價(jià)格比高,所以被廣泛應(yīng)用,是目前應(yīng)用數(shù)量最多的單片機(jī)。
  第四階段(1983年-現(xiàn)在):8位單片機(jī)鞏固、發(fā)展及16位單片機(jī)、32位單片機(jī)推出階段。16位單片機(jī)的典型產(chǎn)品為Intel公司生產(chǎn)的MCS-96系列單片機(jī)。而32位單片機(jī)除了具有更高的集成度外,其數(shù)據(jù)處理速度比16位單片機(jī)提高許多,性能比8位、16位單片機(jī)更加優(yōu)越。20世紀(jì)90年代是單片機(jī)制造業(yè)大發(fā)展的時(shí)期,這個(gè)時(shí)期的Mortorola、Intel、ATMEL、德州儀器(TI)、三菱、日立、Philips、LG等公司也開(kāi)發(fā)了一大批性能優(yōu)越的單片機(jī),極大地推動(dòng)了單片機(jī)的應(yīng)用。近年來(lái),又有不少新型的高集成度單片機(jī)產(chǎn)品涌現(xiàn)出來(lái),出現(xiàn)了單片機(jī)產(chǎn)品豐富多彩的局面。目前,除了8位單片機(jī)得到廣泛應(yīng)用之外,16位單片機(jī)、32位單片機(jī)也得到廣大用戶的青睞。

1.3單片機(jī)原理及應(yīng)用簡(jiǎn)介
單片機(jī)是單片微型計(jì)算機(jī)的簡(jiǎn)稱,指在一塊大規(guī)模或超大規(guī)模集成電路芯片上制成的微型計(jì)算機(jī)。單片機(jī)具有體積小、功耗低、性價(jià)比高、應(yīng)用靈活等優(yōu)點(diǎn),可以作為一個(gè)部件嵌入到各種裝置和產(chǎn)品中。現(xiàn)代生活中,從通信設(shè)備、家用電器、辦公應(yīng)用到工業(yè)控制、儀器儀表、汽車電子、航空航天,幾乎每件電子和機(jī)械產(chǎn)品中都有單片機(jī)在工作,單片機(jī)的用量早已遠(yuǎn)遠(yuǎn)超過(guò)包括個(gè)人計(jì)算機(jī)在內(nèi)的其他計(jì)算機(jī)的總和。以其嵌入到實(shí)際產(chǎn)品中發(fā)揮的控制作用或所處的地位,單片機(jī)又被稱為微控制器或嵌入式微控制器。
  單片機(jī)的種類繁多、功能各異。Intel公司的MCS-51系列8位單片機(jī),以其完善的結(jié)構(gòu)、豐富的功能、開(kāi)放的體系,盛行30多年而不衰。眾多半導(dǎo)體廠商(如Atmel、Dallas Semi、Infineon、Philips/Signetics等)獲得Intel公司的授權(quán)后,在保持代碼兼容性的前提下,融合各自先進(jìn)技術(shù),針對(duì)不同市場(chǎng)需求,在時(shí)鐘、存儲(chǔ)器、定時(shí)器/計(jì)數(shù)器、I/O接口、串行總線控制等方面進(jìn)行了改進(jìn)、裁剪,使得在任何實(shí)際產(chǎn)品的設(shè)計(jì)中都有最恰當(dāng)?shù)男酒晒┻x擇,也給這一單片機(jī)家族提供了旺盛的生命力。本書選擇MCS-51系列單片機(jī)作為主講機(jī)型,系統(tǒng)全面地介紹MCS-51單片機(jī)內(nèi)部的功能結(jié)構(gòu)、軟硬件資源的原理與應(yīng)用,以及使用外部電路進(jìn)行功能擴(kuò)展的方法。 單片機(jī)是單片微型計(jì)算機(jī)的簡(jiǎn)稱,指在一塊大規(guī)模或超大規(guī)模集成電路芯片上制成的微型計(jì)算機(jī)。單片機(jī)具有體積小、功耗低、性價(jià)比高、應(yīng)用靈活等優(yōu)點(diǎn),可以作為一個(gè)部件嵌入到各種裝置和產(chǎn)品中。現(xiàn)代生活中,從通信設(shè)備、家用電器、辦公應(yīng)用到工業(yè)控制、儀器儀表、汽車電子、航空航天,幾乎每件電子和機(jī)械產(chǎn)品中都有單片機(jī)在工作,單片機(jī)的用量早已遠(yuǎn)遠(yuǎn)超過(guò)包括個(gè)人計(jì)算機(jī)在內(nèi)的其他計(jì)算機(jī)的總和。以其嵌入到實(shí)際產(chǎn)品中發(fā)揮的控制作用或所處的地位,單片機(jī)又被稱為微控制器或嵌入式微控制器。
  單片機(jī)的種類繁多、功能各異。Intel公司的MCS-51系列8位單片機(jī),以其完善的結(jié)構(gòu)、豐富的功能、開(kāi)放的體系,盛行30多年而不衰。眾多半導(dǎo)體廠商(如Atmel、Dallas Semi、Infineon、Philips/Signetics等)獲得Intel公司的授權(quán)后,在保持代碼兼容性的前提下,融合各自先進(jìn)技術(shù),針對(duì)不同市場(chǎng)需求,在時(shí)鐘、存儲(chǔ)器、定時(shí)器/計(jì)數(shù)器、I/O接口、串行總線控制等方面進(jìn)行了改進(jìn)、裁剪,使得在任何實(shí)際產(chǎn)品的設(shè)計(jì)中都有最恰當(dāng)?shù)男酒晒┻x擇,也給這一單片機(jī)家族提供了旺盛的生命力。本書選擇MCS-51系列單片機(jī)作為主講機(jī)型,系統(tǒng)全面地介紹MCS-51單片機(jī)內(nèi)部的功能結(jié)構(gòu)、軟硬件資源的原理與應(yīng)用,以及使用外部電路進(jìn)行功能擴(kuò)展的方法。

2        系統(tǒng)方案2.1系統(tǒng)功能
1:LCD顯示年、月、日、時(shí)、分、秒、星期、溫度信息;
2:用按鍵可以調(diào)整日期和時(shí)間、星期;
3:可以設(shè)置鬧鈴時(shí)間,到鬧鈴響起;
2.2系統(tǒng)總體方案
本設(shè)計(jì)分為編程,仿真,調(diào)試開(kāi)發(fā)板等步驟。以單片機(jī)為主體,利用單片機(jī)的諸多功能來(lái)控制外部設(shè)備的正常運(yùn)行。
顯示器為L(zhǎng)M016L,通過(guò)PO口將數(shù)據(jù)傳輸?shù)斤@示器上。時(shí)鐘信號(hào)的發(fā)生靠的是DS1302,將時(shí)鐘信號(hào)傳到單片機(jī)用于顯示時(shí)間以及定時(shí)的功能。利用DS18B20檢測(cè)外部環(huán)境溫度,實(shí)時(shí)檢測(cè),將溫度數(shù)據(jù)及時(shí)的傳輸?shù)絾纹瑱C(jī)。
2芯片簡(jiǎn)介2.2.180C52芯片
80C52芯片結(jié)合了HMOS的高速和高密度技術(shù)及CHMOS的低功耗特征,它基于標(biāo)準(zhǔn)的MCS-51單片機(jī)體系結(jié)構(gòu)和指令系統(tǒng),屬于80C51增強(qiáng)型單片機(jī)版本,集成了時(shí)鐘輸出和向上或向下計(jì)數(shù)器等更多的功能,適合于類似馬達(dá)控制等應(yīng)用場(chǎng)合。
80C52內(nèi)置8位中央處理單元、256字節(jié)內(nèi)部數(shù)據(jù)存儲(chǔ)器RAM、8k片內(nèi)程序存儲(chǔ)器(ROM)32個(gè)雙向輸入/輸出(I/O)口、3個(gè)16位定時(shí)/計(jì)數(shù)器和5個(gè)兩級(jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)時(shí)鐘振蕩電路。
此外,80C52還可工作于低功耗模式,可通過(guò)兩種軟件選擇空閑和掉電模式。在空閑模式下凍結(jié)CPU而RAM定時(shí)器、串行口和中斷系統(tǒng)維持其功能。掉電模式下,保存RAM數(shù)據(jù),時(shí)鐘振蕩停止,同時(shí)停止芯片內(nèi)其它功能。80C52有PDIP(40pin)和PLCC(44pin)兩種封裝形式。
8051片內(nèi)有 ROM,無(wú)須外接外存儲(chǔ)器和373,更能體現(xiàn)“單片”的簡(jiǎn)練。但是你編的程序你無(wú)法燒寫到其ROM中,只有將程序交芯片廠代你燒寫,并是一次性的,今后你和芯片廠都不能改寫其內(nèi)容。


2.2.2實(shí)時(shí)時(shí)鐘芯片DS1302
美國(guó)DALLAS公司推出的具有涓細(xì)電流充電能力的低功耗實(shí)時(shí)時(shí)鐘電路DS1302的結(jié)構(gòu)、工作原理及其在實(shí)時(shí)顯示時(shí)間中的應(yīng)用。它可以對(duì)年、月、日、周日、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏年補(bǔ)償?shù)榷喾N功能。
DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。
X1和X2是振蕩源,外接32.768kHz晶振。RST是復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),所有的數(shù)據(jù)傳送被初始化,允許對(duì)DS1302進(jìn)行操作。如果在傳送過(guò)程中RST置為低電平,則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。
I/O為串行數(shù)據(jù)輸入輸出端(雙向),后面有詳細(xì)說(shuō)明。
SCLK為時(shí)鐘輸入端。
2.2.3DS18B20單總線數(shù)字溫度計(jì)
DS18B20是常用的溫度傳感器,具有體積小,硬件開(kāi)銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。[
DS18B20的讀寫時(shí)序和測(cè)溫原理與DS1820相同,只是得到的溫度值的位數(shù)因分辨率不同而不同,且溫度轉(zhuǎn)換時(shí)的延時(shí)時(shí)間由2s減為750ms。 DS18B20測(cè)溫原理如圖3所示。圖中低溫度系數(shù)晶振的振蕩頻率受溫度影響很小,用于產(chǎn)生固定頻率的脈沖信號(hào)送給計(jì)數(shù)器1。高溫度系數(shù)晶振隨溫度變化其振蕩率明顯改變,所產(chǎn)生的信號(hào)作為計(jì)數(shù)器2的脈沖輸入。計(jì)數(shù)器1和溫度寄存器被預(yù)置在-55℃所對(duì)應(yīng)的一個(gè)基數(shù)值。計(jì)數(shù)器1對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行減法計(jì)數(shù),當(dāng)計(jì)數(shù)器1的預(yù)置值減到0時(shí),溫度寄存器的值將加1,計(jì)數(shù)器1的預(yù)置將重新被裝入,計(jì)數(shù)器1重新開(kāi)始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測(cè)溫度。斜率累加器用于補(bǔ)償和修正測(cè)溫過(guò)程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。[

2.2.4Lcd1602液晶顯示器
1602液晶也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。
1602LCD是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個(gè)字符液晶模塊(顯示字符和數(shù)字)。
1602采用標(biāo)準(zhǔn)的16腳接口,其中:
第1腳:GND為電源地
第2腳:VCC接5V電源正極
第3腳:V0為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì) 產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。
第4腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。
第5腳:RW為讀寫信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,
低電平(0)時(shí)進(jìn)行寫操作。
第6腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳
變時(shí)執(zhí)行指令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電
源。15腳背光正極,16腳背光負(fù)極。+


3        系統(tǒng)軟件設(shè)計(jì)


在多功能模塊化程序設(shè)計(jì)中,主程序的作用時(shí)設(shè)置系統(tǒng)運(yùn)行的一些初始狀態(tài)及系統(tǒng)運(yùn)行的環(huán)境,并將各種功能子程序按要求連接起來(lái)組成一個(gè)功能強(qiáng)大的系統(tǒng)。本系統(tǒng)主程序的流程圖如圖。在本程序中,LCD1602初始化:8位數(shù)據(jù)接口,兩行顯示,5*7點(diǎn)陣字符,顯示開(kāi),關(guān)光標(biāo),光標(biāo)移動(dòng)為增量式。
LCD1602的初始化已被寫成一個(gè)函數(shù)LCD——INITIAL(),直接調(diào)用就可完成LCD1602的初始化。


4        PROTUES軟件仿真4.1    仿真過(guò)程
  •          仿真:打開(kāi)keil uVision2,建立工程,輸入所編寫的源程序并對(duì)程序進(jìn)行編譯,在軟件的幫助下檢查其中的錯(cuò)誤并進(jìn)行反復(fù)修改,知道編譯正確侯運(yùn)行,生成相應(yīng)的HEX文件,并進(jìn)行保存,保存時(shí)給其命名,以便將來(lái)載入程序時(shí)容易找到。
  •          打開(kāi)PROTUES軟件,并出畫單片機(jī)電子萬(wàn)年歷具體運(yùn)行電路圖。
  •          檢查所畫電路運(yùn)行圖,確保沒(méi)有錯(cuò)誤以后,在PROTUES下對(duì)原理圖進(jìn)行加載keil uVision下的源程序。


4.2    仿真結(jié)果
5        開(kāi)發(fā)板調(diào)試結(jié)果

6        程序流程圖
7        心得體會(huì)
課程設(shè)計(jì)是培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn)、提出、分析和解決實(shí)際問(wèn)題,鍛煉實(shí)踐能力的重要環(huán)節(jié),回顧此次單片機(jī)課程設(shè)計(jì),我感覺(jué)受益良多,其中編程,仿真,調(diào)試開(kāi)發(fā)板等步驟。這次課程設(shè)計(jì)是我懂得理論與實(shí)際相結(jié)合是很重要的,只有理論知識(shí)是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)知識(shí)和實(shí)踐相結(jié)合起來(lái),從理論中得出結(jié)論,才能真正讓所學(xué)的知識(shí)服務(wù)于我們的生活,服務(wù)于我們的社會(huì),從而提高我們的實(shí)際動(dòng)手能力和獨(dú)立思考的能力,同時(shí)加強(qiáng)了與同學(xué)的合作和與老師的溝通,收獲很多大!這次課程設(shè)計(jì)也讓我發(fā)現(xiàn)了自己的不足之處,對(duì)以前學(xué)過(guò)的理論知識(shí)理解得不夠深刻,掌握得不夠牢固,對(duì)單片機(jī)匯編語(yǔ)言掌握得不好,一定要把以前的知識(shí)溫故而知新。


8        待解決問(wèn)題
1:仿真部件所屬的庫(kù)
2:程序中一則警告無(wú)法消除
9        附錄
  
單片機(jī)源程序如下:

  1. #include              //52單片機(jī)的頭文件,規(guī)定了52單片機(jī)的寄存器和IO口
  2. #include              //_nop_空指令及左右循環(huán)移位子函數(shù)庫(kù)
  3. #define uchar unsigned char              //宏定義
  4. #define uint unsigned int
  5. sbit lcden=P2^6;                 //定義下面通過(guò)lcden來(lái)操作P2^6口,1602液晶使能控制端
  6. sbit lcdwr=P2^5;                //定義下面通過(guò)lcdwr來(lái)操作P2^5口,1602讀寫選擇端
  7. sbit lcdrs=P2^4;                //定義下面選數(shù)據(jù)寄存器還是選指令寄存器控制端
  8. sbit sda=P3^6;                 //定義DS1302數(shù)據(jù)總線,DS1302設(shè)置時(shí)間
  9. sbit rst=P3^4;                            //定義DS1302復(fù)位
  10. sbit sck=P3^5;                            //定義時(shí)鐘總線
  11. sbit s1=P3^0;                            //定義設(shè)置按鈕
  12. sbit s2=P3^1;                            //定義調(diào)試按鈕
  13. sbit s3=P3^2;                            //定義確定按鈕
  14. sbit s4=P3^3;                                                                                                                                
  15. sbit DQ=P3^7;                            //定義DS18B20通信端口
  16. sbit ACC0=ACC^0;
  17. sbit ACC7=ACC^7;
  18. sbit BELL=P1^5;
  19. char fen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen;
  20. uchar code table[]={" 2016-  -       "};                                                        //要寫入1602液晶的數(shù)據(jù)
  21. uchar code alarm[]={" CLOCK SETTINGS"};                                                                      //要寫入1602液晶的數(shù)據(jù)
  22. uchar code alarm1[]={"            :   "};                                                        //要寫入1602液晶的數(shù)據(jù)
  23. uchar code table1[]={"   :  :      .  "};                                                        //字庫(kù)中的字可直接以外加""號(hào)的形式直接寫入
  24. uchar code table2[]={"   Wan Nian Li !"};                                                        //歡迎界面
  25. uchar code table3[]={"Wo Men Jie Zuo!!"};                                                        //歡迎界面


  26. //*****************星期編碼表**********************************
  27. uchar code Weeks[][3]={{"SUN"},{"MON"},{"TUE"},{"WED"},{"THU"},{"FRI"},{"SAT"},{"SUN"}};
  28. uchar i,j;               
  29. //*********************短暫延時(shí)********************************
  30. void delay0(uint z)
  31. {                     
  32.               while(z--);
  33. }
  34. //*********************毫秒延時(shí)********************************
  35. void delay(uint z)
  36. {
  37.               uint x,y;
  38.               for(x=z;x>0;x--)
  39.                             for(y=110;y>0;y--);
  40. }
  41. //DS18B20初始化函數(shù)
  42. void Init_DS18B20(void)
  43. {
  44.               unsigned char x=0;
  45.               DQ=1;                                                        //DQ復(fù)位,DQ一般是表示單總線的數(shù)據(jù)接口端                               //
  46.               delay0(8);                                           //稍做延時(shí)
  47.               DQ=0;                                                        //單片機(jī)將DQ拉低
  48.               delay0(80);                                          //精確延時(shí)
  49.               DQ=1;                                                        //拉高總線
  50.               delay0(14);
  51.               x=DQ;                                                        //稍做延時(shí)后?如果x=0則初始化成功?x=1則初始化失敗
  52.               delay0(20);
  53. }

  54. //DS18B20讀一個(gè)字節(jié)
  55. uchar ReadOneChar(void)
  56. {
  57.               unsigned char i=0;
  58.               unsigned char dat=0;
  59.               for(i=8;i>0;i--)
  60.               {
  61.                             DQ=0;                                            //給脈沖信號(hào)
  62.                             dat>>=1;                            //讓從總線上讀到的位數(shù)據(jù),依次從高位移動(dòng)到低位                                                                                                                                                          //
  63.                             DQ=1;                                          //給脈沖信號(hào)
  64.                             if(DQ)
  65.                                           dat|=0x80;
  66.                             delay0(4);
  67.               }
  68.               return(dat);
  69. }

  70. //DS18B20寫一個(gè)字節(jié)?
  71. void WriteOneChar(unsigned char dat)
  72. {
  73.               unsigned char i=0;
  74.               for(i=8;i>0;i--)
  75.               {
  76.                             DQ=0;
  77.                             DQ=dat&0x01;
  78.                             delay0(5);
  79.                             DQ=1;
  80.                             dat>>=1;
  81.               }
  82. }

  83. //DS18B20讀取溫度
  84. uint ReadTemperature(void)
  85. {
  86.               unsigned char a=0;
  87.               unsigned char b=0;
  88.               unsigned int t=0;
  89.               float tt=0;
  90.               Init_DS18B20();
  91.               WriteOneChar(0xCC);                                          //跳過(guò)讀序號(hào)列號(hào)的操作
  92.               WriteOneChar(0x44);                             //啟動(dòng)溫度轉(zhuǎn)換
  93.               Init_DS18B20();
  94.               WriteOneChar(0xCC);                                          //跳過(guò)讀序號(hào)列號(hào)的操作
  95.               WriteOneChar(0xBE);                                          //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
  96.               a=ReadOneChar();
  97.               b=ReadOneChar();
  98.               t=b;
  99.               t<<=8;
  100.               t=t|a;
  101.               tt=t*0.0625;                                                        //將溫度的高位與低位合并
  102.               t=tt*10+0.5;                                                        //對(duì)結(jié)果進(jìn)行4舍5入
  103.               return(t);
  104. }
  105. /*********************蜂鳴器函數(shù)************************************************/
  106. void didi()
  107. {
  108.               uchar i;
  109.               for(i=0;i<60;i++)
  110.               {
  111.                             BELL=0;
  112.                             delay(1);
  113.                             BELL=1;
  114.                             delay(1);
  115.               }
  116. }

  117. /*******************向1602液晶中寫一個(gè)指令**************************************/
  118. void write_com(uchar com)
  119. {
  120.               lcdwr=0;                            //lcdwr為讀寫控制端,
  121.               //lcdwr=0,
  122.               lcdrs=0;                            //液晶rs接口為0時(shí),寫指令,rs為1時(shí)寫數(shù)據(jù)
  123.               P0=com;                                          //將要寫的指令賦給P0口,
  124.               delay(5);                            //由1602讀寫操作時(shí)序圖,先將指令賦給P0口,延時(shí)后將使能
  125.               lcden=1;                            //端lcden置高,再延時(shí)一段時(shí)間,然后將lcden置低,這樣指令
  126.               delay(5);                            //就寫入到LCD了
  127.               lcden=0;
  128. }
  129. /****************************




  130. 數(shù)
  131. 據(jù)
  132. ***************************************/
  133. void write_data(uchar date)
  134. {
  135.               lcdrs=1;                             //與寫指令類似,這里lcdrs設(shè)為1
  136.               P0=date;
  137.               delay(5);
  138.               lcden=1;
  139.               delay(5);
  140.               lcden=0;
  141. }

  142. /*****************************初使化1602液晶************************************/
  143. void init_1602()
  144. {
  145.               lcdwr=0;
  146.               lcden=0;
  147.               write_com(0x38);                            //設(shè)置LCD為16*2顯示、5*7點(diǎn)陣、8位數(shù)據(jù)接口模式
  148.               write_com(0x0c);                            //開(kāi)顯示、不顯示光標(biāo)
  149.               write_com(0x06);                            //寫一個(gè)字符后,地址指針加1
  150.               write_com(0x01);                            //顯示清0
  151.               P0=0xff;
  152. }


  153. /*******************************************************************************/
  154. void gudingtime_1602()
  155. {
  156.               uchar num;
  157.               write_com(0x80);                                          //將指針指向初始位置
  158.               for(num=0;num<16;num++)                            //循環(huán)函數(shù),用于將"2012-  -     "寫入液晶
  159.                             write_data(table[num]);
  160.               write_com(0x80+0x40);                            //將指針指向1602液晶的第二行?
  161.               for(num=0;num<16;num++)                            //功能與上同,用于將"   :  :         "寫入
  162.                             write_data(table1[num]);
  163. }
  164. void gudingtime_1602_1()
  165. {
  166.               uchar num1;
  167.               write_com(0x80);                                          //將指針指向初始位置
  168.               for(num1=0;num1<16;num1++)              //循環(huán)函數(shù),用于將"?2012-  -      "寫入液晶
  169.                             write_data(alarm[num1]);
  170.               write_com(0x80+0x40);                            //將指針指向1602液晶的第二行
  171.               for(num1=0;num1<16;num1++)//功能與上同,用于將"   :  :      .  "寫入
  172.                             write_data(alarm1[num1]);
  173. }


  174. /**************************顯示初始化界面函數(shù)*************************************/
  175. void displaystar(void)
  176. {
  177.               uchar i;
  178.               write_com(0x80);
  179.               for(i=0;i<16;i++)
  180.               write_data(table2[i]);
  181.               write_com(0x80+0x40);
  182.               for(i=0;i<16;i++)
  183.               write_data(table3[i]);
  184. }

  185. /***************************顯示時(shí)間、日期子函數(shù)*********************************/
  186. void write_sfm(uchar add,uchar time)                            //用于在1602上顯示年、月、日、時(shí)、分、秒。Add為顯示位置,time為要顯示的內(nèi)容
  187. {
  188.               uchar shiwei,gewei;
  189.               shiwei=time/16;                                                                                                  //將從DS1302中讀取的BCD碼數(shù)據(jù)轉(zhuǎn)化成十六
  190.               gewei=time%16;                                                                                                  //十六進(jìn)制個(gè)位
  191.               write_com(add+0x80);                                                                      //定義顯示在液晶的什么位置
  192.               write_data(0x30+shiwei);                                                        //由1602液晶字庫(kù)可知,0~9的數(shù)據(jù)碼分別對(duì)應(yīng)0x30~0x39
  193.               write_data(0x30+gewei);                                                                      //初使化中設(shè)定了寫一個(gè)字符后,地址指針加1
  194. }                                                                                                                                                          //?不用重新光標(biāo)寫位?
  195. void write_temp(uchar add,uint temp)                            //用于在1602上顯示年、月、日、時(shí)、分、秒。Add為顯示位置,time為要顯示的內(nèi)容
  196. {
  197.               uchar shi,ge,xshu;
  198.               shi=temp/100;                                                                                                  //將從DS1302中讀取的BCD碼數(shù)據(jù)轉(zhuǎn)化成10進(jìn)制個(gè)位和10??
  199.               ge=temp%100/10;                                                                                                  //進(jìn)制十位?
  200.               xshu=temp%10;
  201.               write_com(add+0x80);                                                                      //定義顯示在液晶的什么位置??
  202.               write_data(0x30+shi);                                                                      //由1602液晶字庫(kù)可知,0~9的數(shù)據(jù)碼分別對(duì)應(yīng)0x30~0x39
  203.               write_data(0x30+ge);                                                                       //初使化中設(shè)定了寫一個(gè)字符后,地址指針加1,因此這里
  204.               write_com(0x80+0x40+14);
  205.               write_data(0x30+xshu);                                                                      //?不用重新光標(biāo)寫位?
  206. }

  207. /**************************顯示周子函數(shù)*****************************************/
  208. void write_zhou(uchar time1)                            //用于在1602上顯示周信息,與顯示
  209. {                                                                                                                //時(shí)間日期子函數(shù)類似?
  210.               uchar gewei;
  211.               gewei=time1%16;                                                        //一周七天,因此只需個(gè)位?
  212.               write_com(0x80+14);
  213.               write_data(0x30+gewei);
  214. }
  215. /***************************寫數(shù)據(jù)字節(jié)子函數(shù)************************************/
  216. void Input_1byte(uchar TD)                                          //寫一字節(jié)數(shù)據(jù)
  217. {
  218.               uchar i;
  219.               ACC=TD;
  220.               for(i=8;i>0;i--)
  221.               {
  222.                             sda=ACC0;
  223.                             sck=1;
  224.                             sck=0;
  225.                             ACC=ACC>>1;
  226.               }
  227. }

  228. /*************************
  229. 讀數(shù)據(jù)字節(jié)子函數(shù)**************************************/
  230. uchar Output_1byte(void)                            //讀一字節(jié)數(shù)據(jù)
  231. {
  232.               uchar i;
  233.               for(i=8;i>0;i--)
  234.               {
  235.                             ACC=ACC>>1;
  236.                             ACC7=sda;
  237.                             sck=1;
  238.                             sck=0;
  239.               }
  240.               return(ACC);
  241. }
  242. /***************************寫DS1302數(shù)據(jù)函數(shù)***********************************/
  243. void write_1302(uchar DS_ADD,uchar DS_DAT)                                          //寫操作
  244. {
  245.               rst=0;
  246.               sck=0;
  247.               rst=1;
  248.               Input_1byte(DS_ADD);
  249.               Input_1byte(DS_DAT);
  250.               sck=1;
  251.               rst=0;
  252. }
  253. /***************************讀DS1302數(shù)據(jù)函數(shù)***********************************/
  254. uchar read_1302(uchar DS_ADD)                                          //讀操作
  255. {
  256.               uchar DS_INF;
  257.               rst=0;
  258.               sck=0;
  259.               rst=1;
  260.               Input_1byte(DS_ADD);
  261.               DS_INF=Output_1byte();
  262.               sck=1;
  263.               rst=0;
  264.               return(DS_INF);
  265. }

  266. /*************************初始化DS1302子函數(shù)***********************************/
  267. void inital_1302()
  268. {
  269.               write_1302(0x8e,0x00);                                          //禁止寫保護(hù)
  270.               write_1302(0x90,0xaa);                                          //定義充電
  271.               write_1302(0x80,0x53);                                          //秒
  272.               write_1302(0x84,0x09);                                          //時(shí)
  273.               write_1302(0x82,0x56);                                          //分
  274.               write_1302(0x8c,0x13);                                          //年
  275.               write_1302(0x88,0x04);                                          //月
  276.               write_1302(0x86,0x14);                                          //日
  277.               write_1302(0x8a,0x07);                                          //星期?
  278.               write_1302(0xc0,0x08);                                          //鬧鐘小時(shí)初始化
  279.               write_1302(0xfc,0x00);                                          //鬧鐘分鐘初始化
  280.               write_1302(0x8e,0x80);                                          //開(kāi)保護(hù)?
  281. }

  282. /********************************************************************************掃描函數(shù)********************************************************************************/
  283. void keyscan()
  284. {
  285.               if(s1==0&&s4num==0)                                          //按鍵1按下且s4在此之前未曾按過(guò)?
  286.               {
  287.                             delay(5);
  288.                             if(s1==0&&s4num==0)
  289.                             {
  290.                                           flag1=1;
  291.                                           s1num++;
  292.                                           while(!s1);
  293.                                           didi();
  294.                                           if(s1num==1)
  295.                                           {
  296.                                                         write_com(0x80+0x40+8);                            //光標(biāo)移動(dòng)到**位置
  297.                                                         write_com(0x0f);                                          //顯示光標(biāo)?
  298.                                           }
  299.                                           if(s1num==2)
  300.                                           {
  301.                                                         write_1302(0x8e,0x00);                            //禁止寫保護(hù)
  302.                                                         write_1302(0x80,miao);                            //寫入秒信息
  303.                                                         write_1302(0x8e,0x80);                            //開(kāi)寫保護(hù)
  304.                                                         write_com(0x80+0x40+5);
  305.                                           }
  306.                                           if(s1num==3)
  307.                                           {
  308.                                                         write_1302(0x8e,0x00);
  309.                                                         write_1302(0x82,fen);
  310.                                                         write_1302(0x8e,0x80);
  311.                                                         write_com(0x80+0x40+2);
  312.                                           }
  313.                                           if(s1num==4)
  314.                                           {
  315.                                                         write_1302(0x8e,0x00);
  316.                                                         write_1302(0x88,yue);
  317.                                                         write_1302(0x8e,0x80);
  318.                                                         write_com(0x80+14);
  319.                                           }
  320.                                           if(s1num==5)
  321.                                           {
  322.                                                         write_1302(0x8e,0x00);
  323.                                                         write_1302(0x84,shi);
  324.                                                         write_1302(0x8e,0x80);
  325.                                                         write_com(0x80+10);
  326.                                           }
  327.                                           if(s1num==6)
  328.                                           {
  329.                                                         write_1302(0x8e,0x00);
  330.                                                         write_1302(0x86,ri);
  331.                                                         write_1302(0x8e,0x80);
  332.                                                         write_com(0x80+7);
  333.                                           }
  334.                                           if(s1num==7)
  335.                                           {
  336.                                                         write_1302(0x8e,0x00);
  337.                                                         write_1302(0x8c,nian);
  338.                                                         write_1302(0x8e,0x80);
  339.                                                         write_com(0x80+4);
  340.                                           }
  341.                                           if(s1num==8)
  342.                                           {
  343.                                           flag1=0;
  344.                                           s1num=0;
  345.                                           write_1302(0x8e,0x00);
  346.                                           write_1302(0x8a,zhou);
  347.                                           write_1302(0x8e,0x80);
  348.                                           write_com(0x0c);                            //不顯示光標(biāo)?
  349.                                           }
  350. }

  351. }



  352. /*******************************************************************************/

  353.   if(s1num!=0&&s4num==0)                            //按鍵1按下*次且s4再此之前未曾按過(guò)
  354. {
  355.   if(s2==0)
  356.     {
  357.                 delay(5);
  358.                 if(s2==0)
  359.                 {
  360.                   while(!s2);
  361.                             didi();
  362.                             if(s1num==1)
  363.                             {
  364.                      int x1,x2;
  365.                                x1=miao%16;
  366.                                x2=miao/16;
  367.                                x1++;
  368.            if(x1==10)
  369.                                {
  370.                                  x1=0;
  371.                                           x2++;
  372.                                           if(x2>=6)
  373.                  x2=0;
  374.            }
  375.             miao=x1+x2*16;
  376.             write_sfm(7+0x40,miao);//將修改的數(shù)送到1602顯示
  377.                                           write_com(0x80+0x40+8);//挪回光標(biāo)
  378.         }
  379.          if(s1num==2)
  380.                             {
  381.                                int x3,x4;
  382.                                x3=fen%16;
  383.                                x4=fen/16;
  384.                                x3++;
  385.                                if(x3==10)
  386.                                {
  387.                                   x3=0;
  388.                                             x4++;
  389.                                             if(x4>=6)
  390.                                             x4=0;
  391.                                }
  392.            fen=x3+x4*16;
  393.            write_sfm(4+0x40,fen);
  394.            write_com(0x80+0x40+5);
  395.          }
  396.          if(s1num==3)
  397.                             {
  398.                                int x5,x6;
  399.                                x5=shi%16;
  400.                                x6=shi/16;
  401.            x5++;
  402.                                 if(x6>=2&&x5>=4)
  403.                                           {
  404.                                             x5=0;
  405.                                             x6=0;
  406.             }
  407.             if(x5==10)
  408.                                           {
  409.                                             x5=0;
  410.                                             x6++;
  411.                                           }
  412.             shi=x5+x6*16;
  413.             write_sfm(1+0x40,shi);
  414.                                           write_com(0x80+0x40+2);
  415.          }
  416.          if(s1num==4)
  417.                             {
  418.                                 zhou++;
  419.                                           if(zhou==8)
  420.                                           zhou=1;
  421.             write_zhou(zhou);
  422.             write_com(0x80+14);
  423.          }
  424.                             if(s1num==5)
  425.                             {
  426.                                 int x5,x6;
  427.                                           x5=ri%16;
  428.             x6=ri/16;
  429.                                           x5++;
  430.             if(x6>=3&&x5>=1)
  431.                                           {
  432.                                              x5=1;
  433.                                              x6=0;
  434.             }
  435.             if(x5==10)
  436.                                           {
  437.                                              x5=0;
  438.                                              x6++;
  439.                                           }
  440.             ri=x5+x6*16;
  441.                                           write_sfm(9,ri);
  442.                                           write_com(0x80+10);
  443.          }
  444.          if(s1num==6)
  445.                             {
  446.                                 int x5,x6;
  447.                                           x5=yue%16;
  448.                                           x6=yue/16;
  449.                                           x5++;
  450.             if(x6>=1&&x5>=3)
  451.                                           {
  452.                                              x5=1;
  453.                                              x6=0;
  454.             }
  455.             if(x5==10)
  456.                                           {
  457.                                              x5=0;
  458.                x6++;
  459.             }
  460.             yue=x5+x6*16;
  461.                                           write_sfm(6,yue);
  462.             write_com(0x80+7);
  463.          }
  464.                             if(s1num==7)
  465.                             {
  466.                                 int x5,x6;
  467.                                           x5=nian%16;
  468.                                           x6=nian/16;
  469.                                           x5++;
  470.             if(x6>=2&&x5>=1)
  471.                                           {
  472.                                              x5=1;
  473.                                              x6=0;
  474.             }
  475.             if(x5==10)
  476.                                           {
  477.                                              x5=0;
  478.                                              x6++;
  479.                                           }
  480.             nian=x5+x6*16;
  481.                                           write_sfm(3,nian);
  482.             write_com(0x80+4);
  483.          }
  484.     }
  485.   }
  486. }







  487. if(s1num!=0||s4num!=0) // 在調(diào)整模式下
  488.     {   
  489.               if(s3==0)  //如果確定鍵按下  
  490.                 {   
  491.                  delay(5);   
  492.                   if(s3==0)  //延時(shí)并重新檢測(cè)S3是否按下,用于差小誤差
  493.                                {
  494.                                  if(s1num!=0)     
  495.                                  {            
  496.                                             while(!s3);
  497.                                             didi();//在松手時(shí)將調(diào)整后的時(shí)間、日期及周信息寫 入DS1302,退出調(diào)整模式并隱藏光標(biāo),按鍵次數(shù)清0
  498.                                             write_1302(0x8e,0x00);      
  499.                                             write_1302(0x80,miao);      
  500.                                             write_1302(0x84,shi);   
  501.                                             write_1302(0x82,fen);  
  502.                                             write_1302(0x8a,zhou);  
  503.                                             write_1302(0x8c,nian);   
  504.                                             write_1302(0x88,yue);   
  505.                                             write_1302(0x86,ri);   
  506.                                             write_1302(0x8e,0x80);
  507.                                             flag1=0;   
  508.                                             write_com(0x0c);
  509.                                             s1num=0;     
  510.                                             gudingtime_1602();
  511.                                           }
  512.                                                                       if(s4num!=0)
  513.                                                                       {
  514.                                                                       while(!s3);didi();//再松手是將調(diào)整后的時(shí)間、日期及周信息寫入DS1302,退出調(diào)整模式并隱藏光標(biāo),按鍵次數(shù)清0
  515.                                                  write_1302(0x8e,0x00);            
  516.                                                            write_1302(0xc0,lshi);                 
  517.                                                            write_1302(0xfc,lfen);   
  518.                                                            write_1302(0x8e,0x80);   
  519.                                                                       flag2=0;     
  520.                                                                       write_com(0x0c);   
  521.                                                                       s4num=0;         
  522.                                                                       gudingtime_1602();               
  523.                    }                                                                                                     
  524.                                 }      
  525.                                                         }         
  526.                                                                       }   
  527. if(s4==0&&s1num==0)          //按鍵4按下*次且s1再次之前未曾按 過(guò)        
  528. {                     
  529. delay(5);      
  530.               if(s4==0&&s1num==0)   
  531.   {                  
  532. s4num++;         
  533.               flag2=1;               
  534.                 while(!s4);didi();      
  535.               if(s4num==1)  
  536.   {      
  537.               gudingtime_1602_1();                  
  538.               lshi=read_1302(0xc1);//從ds1302里面的RAM讀取鬧鐘時(shí), 此處不放在while(1)大循環(huán)里面是因?yàn)閐s1302里面的RAM里的數(shù)據(jù)是不變的只需讀取一次      
  539.               lfen=read_1302(0xfd);//從ds1302里面的RAM讀取鬧鐘分      
  540.                 write_sfm(0x40+10,lshi);//將鬧鐘時(shí)送到1602顯示         
  541.                 write_com(0x80+0x40+12);//將鬧鐘:送到1602顯示
  542.               write_data(table1[3]);      
  543.               write_sfm(0x40+13,lfen);//將鬧鐘分送到1602?   
  544.                 write_com(0x80+0x40+14);     
  545. write_com(0x0f);      
  546. }                    
  547.                 if(s4num==2)   
  548. {         
  549.                 write_1302(0x8e,0x00);  //禁止寫保護(hù)   
  550.                 write_1302(0xfc,lfen); //鬧鐘初始化   
  551.                             write_1302(0x8e,0x80); //開(kāi)寫保護(hù)      
  552.                 lshi=read_1302(0xc1);  //從ds1302里面的RAM讀取鬧鐘 時(shí),此處不放在while(1)大循環(huán)里面是因?yàn)閐s1302里面的RAM里的數(shù)據(jù)是不變的只需讀取一次     
  553.                             lfen=read_1302(0xfd); //從ds1302里面的RAM讀取鬧鐘分     
  554.               write_sfm(0x40+10,lshi);//將鬧鐘時(shí)送到1602顯示      
  555.                 write_sfm(0x40+13,lfen);//將鬧鐘分送到1602顯示      
  556.                 write_com(0x80+0x40+11);      
  557.                 write_com(0x0f);  
  558. }   
  559.               if(s4num==3)  
  560.   {         
  561. s4num=0;     
  562. flag2=0;      
  563. write_1302(0x8e,0x00);//禁止寫保護(hù)   
  564. write_1302(0xc0,lshi);//鬧鐘初始化   
  565.    write_1302(0x8e,0x80);//開(kāi)寫保護(hù)     
  566.    write_com(0x0c);   //不顯示光標(biāo)      
  567.    write_com(0x01);   //顯示清0   
  568.    gudingtime_1602();
  569.   }
  570.     }   
  571. ……………………

  572. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
單片機(jī)課程設(shè)計(jì)伍錫華 - r9wm4.doc (1.43 MB, 下載次數(shù): 45)


評(píng)分

參與人數(shù) 1黑幣 +5 收起 理由
syl829416534 + 5

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2017-5-22 17:51 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:464863 發(fā)表于 2019-1-8 20:31 | 只看該作者
寫得非常好啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表