wwwxxx国产_337p日本欧洲亚洲大胆张筱雨_免费在线看成人av_日本黄色不卡视频_国产精品成熟老女人_99视频一区_亚洲精品97久久中文字幕_免费精品视频在线_亚洲色图欧美视频_欧美一区二三区

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

QQ登錄

只需一步,快速開始

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

基于51單片機(jī)的萬年歷設(shè)計(jì)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主



電子萬年歷是一種非常廣泛日常計(jì)時(shí)工具,給人們的帶來了很大的方便,在社會(huì)上越來越流行。 它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),采用直觀的數(shù)字顯示,可以同時(shí)顯示年月日時(shí)分秒和溫度等信息,還有時(shí)間校準(zhǔn)、鬧鐘等功能。該電子萬年歷主要采用STC89C52單片機(jī)作為主控核心,用DS1302時(shí)鐘芯片作為時(shí)鐘、液晶12864顯示屏顯示。STC89C52單片機(jī)是由宏晶公司推出的,功耗小,電壓可選用46V電壓供電;DS1302時(shí)鐘芯片是美國DALLAS公司推出的具有細(xì)電流充電功能的低功耗實(shí)時(shí)時(shí)鐘芯片,它可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS1302的使用壽命長,誤差小;數(shù)字顯示是采用的12864液晶顯示屏來顯示,可以同時(shí)顯示年、月、日、星期、時(shí)、分、秒和溫度等信息。此外,該電子萬年歷還具有時(shí)間校準(zhǔn)等功能。

2.1 功能要求


本萬年歷能動(dòng)態(tài)顯示年、月、日、星期、小時(shí)、分鐘、秒、溫度

2.2 方案論證
2.2.1技術(shù)可行性
方案一:采用傳統(tǒng)的51單片機(jī)作為整個(gè)電路的控制核心。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可用軟件編程實(shí)現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和成本低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛。

方案二:采用FTC10F04單片機(jī),還帶有非易失性Flash程序存儲(chǔ)器。它是一種高性能、低功耗的8CMOS微處理芯片,市場應(yīng)用最多。其主要特點(diǎn)如下:8KB Flash ROM,可以擦除1000次以上,數(shù)據(jù)保存10年。

由于方案一已能滿足設(shè)計(jì)要求,故選用方案一。

2.2.3顯示模塊的選擇                       
方案一:使用液晶顯示屏顯示時(shí)間數(shù)字。液晶顯示屏(LCD)具有輕薄短小、低耗電量、無輻射危險(xiǎn),平面直角顯示以及影象穩(wěn)定不閃爍等優(yōu)勢,可視面積大,畫面效果好,分辨率高,抗干擾能力強(qiáng)等特點(diǎn)。液晶顯示屏分兩種,一種是以點(diǎn)陣的模式顯示各種符號(hào),需要利用控制芯片創(chuàng)建字符庫,編程工作量大,控制器的資源占用較多,其成本也偏高。在使用時(shí),不能有靜電干擾,否則易燒壞液晶的顯示芯片,不易維護(hù),另外一種是帶字庫版本,省去了編程字符庫的過程操作簡單便捷便于使用。

方案二:使用傳統(tǒng)的LED數(shù)碼管顯示。 數(shù)碼管具有:低能耗、低損耗、低壓、壽命長、耐老化、防曬、防潮、防火、防高(低)溫,對(duì)外界環(huán)境要求低,易于維護(hù),同時(shí)其精度比較高,稱重輕,精確可靠,操作簡單。數(shù)碼管采用BCD編碼顯示數(shù)字,程序編譯容易,資源占用較少。  

根據(jù)以上的論述,雖然LED的各方面性能比較好,但是目前在已有的原件中有一塊帶字庫的LCD,省去了創(chuàng)建字庫符的編程且控制相對(duì)簡單,故采用方案

2.2.4鍵盤模塊的選擇
在對(duì)日期和時(shí)間進(jìn)行切換,對(duì)日期和時(shí)間進(jìn)行調(diào)節(jié)校準(zhǔn)過程中,系統(tǒng)需要,產(chǎn)生激勵(lì)電流,因此需要用按鍵。   

方案一:使用獨(dú)立式鍵盤。獨(dú)立式鍵盤是指直接用I/O口線構(gòu)成的單個(gè)按鍵電路。獨(dú)立式按鍵電路配置靈活,軟件結(jié)構(gòu)簡單。  

方案二:使用矩陣式鍵盤。矩陣式鍵盤是由行線和列線組成,按鍵位于行、列的交叉點(diǎn)上,行線、列線分別連接到按鍵開關(guān)的兩端。其特點(diǎn)是簡單且不增加成本,這種鍵盤適合按鍵數(shù)量較多的場合。  

根據(jù)以上的論述,因本系統(tǒng)需要的按鍵不多,上下左右調(diào)節(jié)四個(gè)按鍵、功能控制兩個(gè)按鍵,要求簡單。所以采用方案一獨(dú)立式鍵盤。

2.2.5 總體方案論證與選擇


3 硬件電路設(shè)計(jì)及概述
3.1 系統(tǒng)的結(jié)構(gòu)設(shè)計(jì)
本設(shè)計(jì)采用的是宏晶公司的STC89C52單片機(jī)為核心,通過單片機(jī)與時(shí)鐘芯片DS1302通信來對(duì)時(shí)間的讀寫,保證時(shí)鐘時(shí)間的穩(wěn)定性,并帶有內(nèi)部電源模塊,使系統(tǒng)斷電時(shí)時(shí)鐘數(shù)據(jù)不會(huì)丟失,以DS18B20溫度感應(yīng)芯片作為溫度電路的核心,向單片機(jī)發(fā)出獲取到的溫度數(shù)據(jù),并通過LCD12864將時(shí)間、顯示出來,并可以通過按鍵調(diào)整時(shí)間日期和鬧鐘時(shí)間。



3.1

3.2 單片機(jī)的系統(tǒng)結(jié)構(gòu)
3.2.1 單片機(jī)的內(nèi)部結(jié)構(gòu)
一個(gè)基本的MCS-51單片機(jī)通常包括:中央處理器、ROM

RAM、定時(shí)/計(jì)數(shù)器和I/O口等各功能部件,各個(gè)功能由內(nèi)部的總線連接起來,從而實(shí)現(xiàn)數(shù)據(jù)通信。其內(nèi)部框圖如圖3.2所示



3.2

3.2.2 單片機(jī)的引腳
常見的51單片機(jī)中一般采用雙列直插(DIP)封裝,共40個(gè)引腳。圖3.3為引腳排列圖。其中的40個(gè)引腳大致可以分為4類:電源、時(shí)鐘、控制和I/O引腳。






3.2.3 最小系統(tǒng)的介紹
單片機(jī)最小系統(tǒng)主要由電源、復(fù)位、振蕩電路以及擴(kuò)展部分等部分組成。最小系統(tǒng)原理圖如圖3.4所示。




3.4

3.3 按鍵開關(guān)去抖動(dòng)
鍵盤在單片機(jī)系統(tǒng)中是一個(gè)很重要的部件。為了輸入數(shù)據(jù)、查詢和控制系統(tǒng)的工作狀態(tài),都要用到鍵盤,鍵盤是人工干預(yù)計(jì)算機(jī)的主要手段。

鍵盤可分為編碼和非編碼鍵盤兩種。編碼鍵盤采用硬件線線路來實(shí)現(xiàn)鍵盤編碼,每按下一個(gè)鍵,鍵盤能自動(dòng)生成按鍵代碼,鍵數(shù)較多,而且還具有去抖動(dòng)功能。這種鍵盤使用方便,但硬件較復(fù)雜,PC機(jī)所用的鍵盤就屬于這種。非編碼鍵盤僅提供按鍵開關(guān)工作狀態(tài),其他工作由軟件完成,這種鍵盤鍵數(shù)較少,硬件簡單,一般在單片機(jī)應(yīng)用系統(tǒng)中廣泛使用。此處主要介紹該類非編碼鍵盤及其與單片機(jī)的接口。

按鍵開關(guān)在電路中的連接如圖3.5a)所示。按鍵未按下時(shí),A點(diǎn)電位為高電平5V;按鍵按下時(shí),A點(diǎn)電位為低電平。A點(diǎn)電位就用于向CPU傳遞按鍵的開關(guān)狀態(tài)。但是由于按鍵的結(jié)構(gòu)為機(jī)械彈性開關(guān),在按鍵按下和斷開時(shí),觸點(diǎn)在閉合和斷開瞬間還會(huì)接觸不穩(wěn)定,引起A點(diǎn)電平不穩(wěn)定,如圖3.5b)所示,鍵盤的抖動(dòng)時(shí)間一般為510ms,抖動(dòng)現(xiàn)象會(huì)引起CPU對(duì)一次鍵操作進(jìn)行多次處理,從而可能產(chǎn)生錯(cuò)誤。因此必須設(shè)法消除抖動(dòng)的不良后果。




消除抖動(dòng)的不良后果的方法有硬、軟件兩種。

為了節(jié)省硬件,通常在單片機(jī)系統(tǒng)中,一般不采用硬件方法消除鍵的抖動(dòng),而是用軟件消除抖動(dòng)的方法。根據(jù)抖動(dòng)特性,在第一次檢測到按鍵按下后,執(zhí)行一段延時(shí)5~10ms讓前延抖動(dòng)消失后再一次檢測鍵的狀態(tài),如果仍保持閉合狀態(tài)電平,則確認(rèn)真正有鍵按下。當(dāng)檢測到按鍵釋放后,也要給5~10ms的延時(shí),待后延抖動(dòng)消失后才轉(zhuǎn)入該鍵處理程序。

3.4 鍵盤掃描控制方式
在單片機(jī)應(yīng)用系統(tǒng)中,對(duì)鍵盤的處理工作僅是CPU工作內(nèi)容的一部分,CPU還要進(jìn)行數(shù)據(jù)處理、顯示和其他輸入輸出操作,因此鍵盤處理工作既不能占用CPU太多時(shí)間,又需要CPU對(duì)鍵盤操作及時(shí)作出響應(yīng)。CPU對(duì)鍵盤處理控制的工作方式有以下幾種:

  • 程序控制掃描方式


程序控制掃描方式是在CPU工作空余,調(diào)用鍵盤掃描子程序,響應(yīng)鍵輸入信號(hào)要求。

2 定時(shí)控制掃描方式

定時(shí)控制掃描方式是利用定時(shí)/計(jì)數(shù)器每隔一段時(shí)間產(chǎn)生定時(shí)中斷,CPU響應(yīng)中斷后對(duì)鍵盤進(jìn)行掃描,并在有鍵閉合時(shí)轉(zhuǎn)入該鍵的功能子程序。

3)中斷控制掃描方式

中斷控制掃描方式是利用外部中斷源,響應(yīng)輸入信號(hào)。當(dāng)無按鍵按下時(shí),CPU執(zhí)行正常工作程序。當(dāng)有按鍵按下時(shí),CPU立即產(chǎn)生中斷。在中斷服務(wù)子程序中掃描鍵盤,判斷是哪一個(gè)鍵被按下,然后執(zhí)行該鍵的功能子程序。這種控制方式克服了前兩種控制方式可能產(chǎn)生的空掃描和不能及時(shí)響應(yīng)鍵輸入的缺點(diǎn),既能及時(shí)處理鍵輸入,又能提高CPU運(yùn)行效率,但要占用一個(gè)寶貴的中斷資源。

因?yàn)闀r(shí)間的走時(shí)需要不斷的進(jìn)行掃描,并且在任何時(shí)刻都可能進(jìn)行時(shí)間調(diào)整,所以需要按鍵在任何時(shí)候都能控制整個(gè)系統(tǒng),故采用中斷掃描方式。

3.5  DS1302工作方式簡介及數(shù)據(jù)操作原理
DS1302可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí), 且具有閏年補(bǔ)償功能, 工作電壓寬達(dá)2.5~5.5V。采用三線接口與CPU進(jìn)行同步通信, 并可采用突發(fā)方式一次傳送多個(gè)字節(jié)的時(shí)鐘信號(hào)或RAM數(shù)據(jù)。DS1302內(nèi)部有一個(gè)33x8的用于臨時(shí)性存放數(shù)據(jù)的RAM寄存器。DS1302是的DS1202升級(jí)產(chǎn)品, DS1202兼容, 但增加了主電源/后背電源雙電源引腳, 同時(shí)提供了對(duì)后背電源進(jìn)行涓細(xì)電流充電的能力。

file:///C:/Users/13909/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg

3.6


DS1302在任何數(shù)據(jù)傳送時(shí)必須先初始化,把RST腳置為高電平,然后把8位地址和命令字裝入移位寄存器,數(shù)據(jù)在SCLK的上升沿被訪問到。在開始8個(gè)時(shí)鐘周期,把命令字節(jié)裝入移位寄存器后,另外的時(shí)鐘周期在讀操作時(shí)輸出數(shù)據(jù),在寫操作時(shí)寫入數(shù)據(jù)。時(shí)鐘脈沖的個(gè)數(shù)在單字節(jié)方式下為8+8,在多字節(jié)方式下為8+字節(jié)數(shù),最大可達(dá)248字節(jié)數(shù)。如果在傳送過程中置RST腳為低電平,則會(huì)終止本次數(shù)據(jù)傳送,并且I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc2.5V之前,RST腳必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。

DS1302的控制字如圖所示。控制字節(jié)的最高有效位(位7)必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中。位6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù);為1則表示存取RAM數(shù)據(jù)。位51A4A0)指示操作單元的地址。最低有效位(位0)如果為0,則表示藥進(jìn)行寫操作;為1表示進(jìn)行讀操作。控制字節(jié)總是從最低位開始輸入/輸出。

為了提高對(duì)32個(gè)地址尋址能力(地址/命令位15=邏輯1,可以把時(shí)鐘/日歷或RAM寄存器規(guī)定為多字節(jié)(burst)方式。位6規(guī)定時(shí)鐘或RAM,而位0規(guī)定讀或?qū)憽T跁r(shí)鐘/日歷寄存器中的地址931RAM寄存器中的地址31不能存儲(chǔ)數(shù)據(jù)。在多字節(jié)方式下,讀或?qū)憦牡刂?/font>0的位0開始。必須按數(shù)據(jù)傳送的次序?qū)懽钕鹊?/font>8個(gè)寄存器。但是,當(dāng)以多字節(jié)方式寫RAM時(shí),為了傳送數(shù)據(jù)不必寫所有的31字節(jié),不管是否寫了全部31字節(jié),所寫的每一字節(jié)都將傳送至RAM

DS1302共有12個(gè)寄存器,其中有7個(gè)寄存器與日歷、時(shí)鐘相關(guān),存放的數(shù)據(jù)位為BCD碼形式。其日歷、時(shí)間寄存器及其控制字如下表所示,其中奇數(shù)為讀操作,偶數(shù)為寫操作。


3.7


時(shí)鐘暫停:秒寄存器的位7定義位時(shí)鐘暫停位。當(dāng)它為1時(shí),DS1302停止振蕩,進(jìn)入低功耗的備份方式,通常在對(duì)DS1302進(jìn)行寫操作時(shí)(如進(jìn)入時(shí)鐘調(diào)整程序),停止振蕩。當(dāng)它為0時(shí),時(shí)鐘將開始啟動(dòng)。

AM-PM/12-24小時(shí)方式:小時(shí)寄存器的位7定義為1224小時(shí)方式選擇位。它為高電平時(shí),選擇12小時(shí)方式。在此方式下,位5為第二個(gè)10小時(shí)位(2023h)。

DS1302的晶振選用32768Hz,電容推薦值為6pF。因?yàn)檎袷庮l率較低,也可以不接電容,對(duì)計(jì)時(shí)精度影響不大

3.6 DS18B20數(shù)據(jù)原理


3.8


DS18B20測溫原理如圖3.8所示。圖中低溫度系數(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重新開始對(duì)低溫度系數(shù)晶振產(chǎn)生的脈沖信號(hào)進(jìn)行計(jì)數(shù),如此循環(huán)直到計(jì)數(shù)器2計(jì)數(shù)到0時(shí),停止溫度寄存器值的累加,此時(shí)溫度寄存器中的數(shù)值即為所測溫度。斜率累加器用于補(bǔ)償和修正測溫過程中的非線性,其輸出用于修正計(jì)數(shù)器1的預(yù)置值。



  
        
預(yù)置
   
   
  

3.9

3.7 系統(tǒng)模塊介紹


4.1.1 主程序流程



4.1.2 DS1302與按鍵控制流程
4.2



4.2 程序編寫
采用Keil uVision4編譯軟件,具體程序編寫說明參照附錄1



附錄1:程序代碼
#include<reg51.h>

#include<intrins.h>

#include<LCD1602.h>

#include<DS18b20.h>

#include<DS1302.h>

#ifndef __DS1302_H__

#define __DS1302_H__


#include<reg51.h>

#include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件

#define uchar unsignedchar

#define uint unsignedint

#ifndef __LCD1602_H__

#define __LCD1602_H__


#include<reg51.H>

#include<intrins.h>  //包含_nop_()函數(shù)定義的頭文件

#define uint unsignedint

#define uchar unsignedchar

#define OUT P0   

#define yh 0x80                              

#define er0x80+0x40                          

//液晶屏的與C51之間的引腳連接定義


#ifndef __DS18b20_H__

#define __DS18b20_H__


#include<reg51.h>

#include<intrins.h>

#define uchar unsignedchar

#define uint unsignedint

uint tvalue;

uchar tflag;

sbit DQ=P3^3;

sbit rs=P2^0;

sbit en=P2^2;

sbit rw=P2^1;                               //如果硬件上rw接地,就不用寫這句和后面的rw=0

sbit BF=P0^7;



void delay_18B20(unsigned int i)

{

    while(i--);

}


void ds1820rst()

{ unsigned char x=0;

       DQ = 1;         

       delay_18B20(4);  

       DQ = 0;         

       delay_18B20(100);

       DQ = 1;         

       delay_18B20(40);   

   }  

  

   uchar ds1820rd()

  { unsigned char i=0;

       unsigned char dat = 0;

       for (i=8;i>0;i--)

       {   DQ = 0;

               dat>>=1;

    可調(diào)用**************/

uchar BusyTest(void)

  {

    bit result;

      rs=0;       //根據(jù)規(guī)定,RS為低電平,RW為高電平時(shí),可以讀狀態(tài)

    rw=1;

    en=1;       //E=1,才允許讀寫

    _nop_();  //空操作

    _nop_();

    _nop_();

    _nop_();  //空操作四個(gè)機(jī)器周期,給硬件反應(yīng)時(shí)間      

    result=BF; //將忙碌標(biāo)志電平賦給result

      en=0;

    return result;

  }

/********液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用**************/


write_1602com(uchar com)                      //****液晶寫入指令函數(shù)****

{

      while(BusyTest()==1);

      rs=0;                                    //數(shù)據(jù)/指令選擇置為指令

      rw=0;                                   //讀寫選擇置為寫

      OUT=com;                                 //送入數(shù)據(jù)

      delay(1);

      en=1;                                   //拉高使能端,為制造有效的下降沿做準(zhǔn)備

      delay(1);

      en=0;                                    //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令

}



voidwrite_1602dat(uchar dat)                       //***液晶寫入數(shù)據(jù)函數(shù)****

{

      while(BusyTest()==1);

      rs=1;                                    //數(shù)據(jù)/指令選擇置為數(shù)據(jù)

      rw=0;                                   //讀寫選擇置為寫

      OUT=dat;                                  //送入數(shù)據(jù)

      delay(1);

      en=1;                                    //en置高電平,為制造下降沿做準(zhǔn)備

      delay(1);

      en=0;                                    //en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令

}


void lcd_init()                                     //***液晶初始化函數(shù)****

{

      write_1602com(0x38);                      //設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)

      write_1602com(0x0c);                      //開顯示不顯示光標(biāo)

      write_1602com(0x06);                      //整屏不移動(dòng),光標(biāo)自動(dòng)右移

      write_1602com(0x01);                      //清顯示


}



#endif


//DS1302時(shí)鐘芯片與C51之間的引腳連接定義

sbit IO=P1^7;

sbit SCLK=P1^6;

sbit RST=P1^5;

sbit ACC0=ACC^0;

sbit ACC7=ACC^7;


/***************DS1302有關(guān)子函數(shù)********************/


void write_byte(uchardat)//寫一個(gè)字節(jié)

{    uchar a;

      ACC=dat;

      RST=1;

      for(a=8;a>0;a--)

      {

             IO=ACC0;

             SCLK=0;

             SCLK=1;

             ACC=ACC>>1;

      }

}

uchar read_byte()                                   //讀一個(gè)字節(jié)

{    uchar a;

      RST=1;

      for(a=8;a>0;a--)

      {

             ACC7=IO;

             SCLK=1;

             SCLK=0;

             ACC=ACC>>1;


      }

      return (ACC);

}

//----------------------------------------

void write_1302(ucharadd,uchar dat)                   //1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)

{


      RST=0;

      SCLK=0;

      RST=1;

      write_byte(add);

      write_byte(dat);

      SCLK=1;

      RST=0;

}

uchar read_1302(ucharadd)                          //1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址

{

      uchar temp;

      RST=0;

      SCLK=0;

      RST=1;

      write_byte(add);

      temp=read_byte();

      SCLK=1;

      RST=0;

      return(temp);

}

uchar BCD_Decimal(ucharbcd)                //BCD碼轉(zhuǎn)十進(jìn)制函數(shù),輸入BCD,返回十進(jìn)制

{

       uchar Decimal;

       Decimal=bcd>>4;

       return(Decimal=Decimal*10+(bcd&=0x0F));

}

//--------------------------------------

void ds1302_init()                           //1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)

{

      RST=0;

      SCLK=0;

      

      write_1302(0x8e,0x00);                      //允許寫,禁止寫保護(hù)

      write_1302(0x80,0x00);                     //DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)00

      write_1302(0x82,0x00);                     //DS1302內(nèi)寫分寄存器82H寫入初始分?jǐn)?shù)據(jù)00

      write_1302(0x84,0x12);                     //DS1302內(nèi)寫小時(shí)寄存器84H寫入初始小時(shí)數(shù)據(jù)12

      write_1302(0x8a,0x05);                     //DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù)4

      write_1302(0x86,0x18);                     //DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)07

      write_1302(0x88,0x03);                     //DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù)01

      write_1302(0x8c,0x16);                     //DS1302內(nèi)寫年份寄存器8cH寫入初始年份數(shù)據(jù)10

      write_1302(0x8e,0x80);                      //打開寫保護(hù)


}


#endif




      uchar     a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;

void      write_sfm(uchar  add,uchar      dat);

void      write_week(uchar       week);

void      write_nyr(uchar   add,uchar      dat);


sbit key1=P1^1;

sbit key2=P1^2;

sbit key3=P1^3;

sbit buzzer=P1^3;


uchar    code       tab1[]={"20  - -  "};

uchar    code       tab2[]={"  : :  "};


void     write_temp(uchar       add,uchar      dat)

{

      uchar     gw,sw;

      gw=dat%10;

      sw=dat/10;

      write_1602com(er+add);

      if(tflag==0)

      write_1602dat('   ');

      else

      write_1602dat('-');

      if(sw==0)

      {write_1602dat(' ');write_1602dat(0x30+gw);}

      else

      {write_1602dat(0x30+sw);

             write_1602dat(0x30+gw);}


         write_1602dat(0xdf);

         write_1602dat(0x43);

}


void      write_sfm(uchar  add,uchar      dat)

{

      uchar     gw,sw;

      gw=dat%10;

      sw=dat/10;

      write_1602com(er+add);

      write_1602dat(0x30+sw);

      write_1602dat(0x30+gw);


}


void      write_nyr(uchar   add,uchar      dat)

{

      uchar     gw,sw;

      gw=dat%10;

      sw=dat/10;

      write_1602com(yh+add);

      write_1602dat(0x30+sw);

      write_1602dat(0x30+gw);        

}


void      write_week(uchar       week)

{

      write_1602com(yh+0x0c);

      switch(week)

      {

             case 1:write_1602dat('M');

                      write_1602dat('O');

                      write_1602dat('N');

                       break;


             case 2:write_1602dat('T');

                      write_1602dat('U');

                      write_1602dat('E');

                       break;


             case 3:write_1602dat('W');

                      write_1602dat('E');

                      write_1602dat('D');

                       break;


             case 4:write_1602dat('T');

                      write_1602dat('H');

                      write_1602dat('U');

                       break;


             case 5:write_1602dat('F');

                      write_1602dat('R');

                      write_1602dat('I');

                       break;


             case 6:write_1602dat('S');

                      write_1602dat('T');

                      write_1602dat('R');

                       break;


             case 7:write_1602dat('S');

                      write_1602dat('U');

                      write_1602dat('N');

                       break;



      }


}


void      keyscan()

{

      if(key1==0)

      {

             delay(9);

             if(key1==0)

             {

                    buzzer=0;

                    delay(20);

                    buzzer=1;

                    while(!key1);

                    key1n++;

                    if(key1n==9)

                           key1n=1;

                    switch(key1n)

                    {

             case 1:    TR0=0;

                           write_1602com(er+0x09);

                           write_1602com(0x0f);

                           temp=(miao)/10*16+(miao)%10;

                           write_1302(0x8e,0x00);

                           write_1302(0x80,0x80|temp);

                           write_1302(0x8e,0x80);

                           break;

             case 2:    write_1602com(er+6);

                           break;

             case 3:write_1602com(er+3);

                           break;

             case 4:write_1602com(yh+0x0e);

                           break;

             case 5:write_1602com(yh+0x0a);

                           break;

             case 6:write_1602com(yh+0x07);

                           break;

             case 7:write_1602com(yh+0x04);

                           break;

             case 8:

                            write_1602com(0x0c);

                            TR0=1;

                            temp=(miao)/10*16+(miao)%10;

                            write_1302(0x8e,0x00);

                            write_1302(0x80,0x00|temp);

                            write_1302(0x8e,0x80);

                            break;

                    }

             }

      }



if(key1n!=0)

{

      if(key2==0)

        {

             delay(10);

             if(key2==0)

             {

                    buzzer=0;

                    delay(20);

                    buzzer=1;

                    while(!key2);


                    switch(key1n)

                    {

                    case 1:miao++;

                                  if(miao==60)

                                         miao=0;

                                         write_sfm(0x08,miao);

                                         temp=(miao)/10*16+(miao)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(er+0x09);

                                         break;

                    case 2:fen++;

                                  if(fen==60)

                                         fen=0;

                                         write_sfm(0x05,fen);

                                         temp=(fen)/10*16+(fen)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(er+6);

                                         break;

                    case 3:shi++;

                                  if(shi==24)

                                         shi=0;

                                         write_sfm(2,shi);

                                         temp=(shi)/10*16+(shi)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+0x0e);

                                         break;

                    case 4:week++;

                                  if(week==8)

                                         week=1;

                                         write_1602com(yh+0x0C);

                                         write_week(week);

                                         temp=(week)/10*16+(week)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+0x0e);

                                         break;

                    case 5:ri++;

                                  if(ri==32)

                                         ri=1;

                                         write_nyr(9,ri);

                                         temp=(ri)/10*16+(ri)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+10);

                                         break;

                    case 6:yue++;

                                  if(yue==13)

                                         yue=1;

                                         write_nyr(6,yue);

                                         temp=(yue)/10*16+(yue)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+7);

                                         break;

                    case 7:nian++;

                                  if(nian==100)

                                         nian=0;

                                         write_nyr(3,nian);

                                         temp=(nian)/10*16+(nian)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+4);

                                         break;

                    }


        }

        

  }


}



      if(key3==0)

        {

             delay(10);

             if(key3==0)

             {

                    buzzer=0;

                    delay(20);

                    buzzer=1;

                    while(!key3);

                    switch(key1n)

                    {

                    case 1:miao--;

                                  if(miao==-1)

                                         miao=59;

                                         write_sfm(0x08,miao);

                                         temp=(miao)/10*16+(miao)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(er+0x09);

                                         break;

                    

                 case 2:fen--;

                                  if(fen==-1)

                                         fen=59;

                                         write_sfm(5,fen);

                                         temp=(fen)/10*16+(fen)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(er+6);

                                         break;


                 case 3:shi--;

                                  if(shi==-1)

                                         fen=23;

                                         write_sfm(2,shi);

                                         temp=(shi)/10*16+(shi)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(er+3);

                                         break;


                 case 4:week--;

                                  if(week==0)

                                         week=7;

                                         write_1602com(yh+0x0C);

                                         write_week(week);

                                         temp=(week)/10*16+(week)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+0x0e);

                                         break;


                 case 5:ri--;

                                  if(ri==-1)

                                         ri=31;

                                         write_nyr(9,ri);

                                         temp=(ri)/10*16+(ri)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+10);

                                         break;


                 case 6:ri--;

                                  if(yue==0)

                                         yue=12;

                                         write_nyr(6,yue);

                                         temp=(yue)/10*16+(yue)%10;

                                         write_1302(0x8e,0x00);

                                         write_1302(0x80,temp);

                                         write_1302(0x8e,0x80);

                                         write_1602com(yh+7);

                                         break;                  

                 write_nyr(9,ri);

             write_nyr(6,yue);

          write_nyr(3,nian);

             write_week(week);

}                                                                                       

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

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:352784 發(fā)表于 2018-6-16 19:27 | 只看該作者
編譯出錯(cuò)啊。。。
回復(fù)

使用道具 舉報(bào)

板凳
ID:352784 發(fā)表于 2018-6-17 10:33 | 只看該作者
51真小白 發(fā)表于 2018-6-16 19:27
編譯出錯(cuò)啊。。。

貌似是缺少幾個(gè)庫文件,樓主能發(fā)下相應(yīng)的那幾個(gè)嗎,我在網(wǎng)上找不到
回復(fù)

使用道具 舉報(bào)

地板
ID:353641 發(fā)表于 2018-6-18 14:01 | 只看該作者
51真小白 發(fā)表于 2018-6-17 10:33
貌似是缺少幾個(gè)庫文件,樓主能發(fā)下相應(yīng)的那幾個(gè)嗎,我在網(wǎng)上找不到

請(qǐng)問你解決了嗎
回復(fù)

使用道具 舉報(bào)

5#
ID:353641 發(fā)表于 2018-6-18 16:03 | 只看該作者
樓主,求發(fā)定義的三個(gè)芯片的頭文件
回復(fù)

使用道具 舉報(bào)

6#
ID:464226 發(fā)表于 2019-1-7 23:41 | 只看該作者
不錯(cuò),值得借鑒
回復(fù)

使用道具 舉報(bào)

7#
ID:902972 發(fā)表于 2021-4-10 08:58 | 只看該作者
不錯(cuò),值得借鑒
回復(fù)

使用道具 舉報(bào)

8#
無效樓層,該帖已經(jīng)被刪除
9#
ID:667870 發(fā)表于 2021-6-12 22:27 | 只看該作者
有頭文件嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
国产视频第一页| 玛雅亚洲电影| 国产chinasex对白videos麻豆| www.亚洲成人| 一区二区三区欧美激情| 麻豆国产精品一区二区三区| 偷窥自拍亚洲色图精选| 女囚岛在线观看| 国产黄视频网站| 亚洲欧美日韩免费| 日本一区二区三区四区五区| 日韩精品国产一区| 日本精品福利视频| 999精品在线观看| 欧美精品在线第一页| 久久婷婷色综合| 在线精品观看| 亚洲精品蜜桃乱晃| 久久国产精品高清一区二区三区| 国产精品亚洲电影久久成人影院| 亚洲熟妇无码久久精品| 羞羞在线观看视频| 亚洲涩涩在线观看| 欧美日韩中文字幕在线播放| av一区二区在线看| 91av在线网站| 中文字幕国内精品| 欧美日韩国产高清一区二区三区 | 国产精品久久久久久久久久辛辛 | 久久精品国产第一区二区三区 | 欧美精品一卡二卡| 亚洲一区在线视频观看| 久久综合九色综合久久久精品综合| 午夜在线视频一区二区区别| 国产精品专区免费| 黄色免费网站在线观看| 最新国产在线| 一区二区免费在线观看视频| 天天干天天色天天爽| 福利视频一区二区三区| 欧美最猛性xxxx| 美女av一区二区三区| 精品亚洲一区二区三区| 国产精品久久三| 国产精品一二二区| 亚洲永久网站| 欧美一区影院| 999国产精品永久免费视频app| 亚洲精品一区二区三区在线| av在线电影观看| 最新四虎影在线在永久观看www | 亚洲黄页在线观看| 一区二区在线免费播放| 亚洲美女色播| 在线播放成人| 欧美一级黄色带| 久久亚洲成人av| 一区二区三区入口| 缅甸午夜性猛交xxxx| 中文字幕中文字幕在线中一区高清| 国产精品免费观看高清| 97免费高清电视剧观看| 5g影院天天爽成人免费下载| 91影院在线免费观看视频| 国产精品亚洲美女av网站| 亚洲人在线观看| 亚洲免费av网址| 亚洲欧美日韩天堂| 国产香蕉精品视频一区二区三区| 亚洲视频在线观看视频| 中文字幕不卡av| 美日韩精品免费视频| 色综合久久久久久中文网| 久久久久久伊人| 国产mv久久久| 91久久嫩草影院一区二区| 91麻豆桃色免费看| 国产欧美综合精品一区二区| 久久久一本精品99久久精品66| 国产一区二区三区av在线| 欧美另类视频在线| 午夜啪啪免费视频| 国产中文字幕在线免费观看| 国产高潮免费视频| 秘密基地免费观看完整版中文| 中文字幕a在线观看| 精品人妻无码一区| 国内自拍第二页| 亚洲国产精品第一页| 男人插女人下面免费视频| 男人午夜视频在线观看| 国模私拍在线观看| 欧美 日韩 国产 一区二区三区| 免费a v网站| 成人在线手机视频| 日韩精品乱码久久久久久| 中文字幕第三页| 男女下面一进一出无遮挡| 影音四色91| 午夜影院观看视频免费| 日韩大片在线永久免费观看网站| 亚洲日本一区二区三区在线观看| 午夜国产在线| 欧美xxxx黑人又粗又长| 国产激情欧美| 久久99高清| 亚洲高清av| 岛国精品一区二区| 亚洲精选视频在线| 久久精品亚洲麻豆av一区二区| 中文字幕一区二区三区av| 欧美性猛交xxxx免费看久久久| 欧美精品1区2区3区| 一区二区三区视频在线| 人人澡人人澡人人看欧美| 亚洲美女久久久| 日韩中文视频免费在线观看| 亚洲韩国日本中文字幕| 久久成人亚洲精品| 51国产成人精品午夜福中文下载| 亚洲日本无吗高清不卡| 图片区小说区区亚洲五月| 久久av免费观看| 无码专区aaaaaa免费视频| 色综合久久五月| 久草手机在线视频| 国产精品尤物视频| 性欧美videos粗暴| а√最新版地址在线天堂| 欧美人与禽性xxxxx杂性| 精品素人av| 美女网站久久| 中文字幕一区二区三区四区不卡| 欧美日韩成人激情| 欧美激情综合亚洲一二区| 国产一级二级三级精品| 亚洲 高清 成人 动漫| 国产精品91在线| 欧美日韩免费观看一区| 国内外成人免费在线视频| 思思久久精品视频| 三级影片在线看| 天天干天天舔天天射| 男女视频网站免费观看| 国产偷倩在线播放| 国产欧美一区二区三区精品观看| 中文字幕av亚洲精品一部二部| 韩国在线一区| 久久综合色鬼综合色| 欧美图片一区二区三区| 国产亚洲综合久久| dy888夜精品国产专区| 国产免费人做人爱午夜视频| 小泽玛利亚一区二区免费| 亚洲在线激情| 成人午夜影视| 视频小说一区二区| 9l国产精品久久久久麻豆| 91精品欧美一区二区三区综合在| 91chinesevideo永久地址| www插插插无码免费视频网站| 一区二区黄色片| 手机av免费在线观看| 亚洲第一成年免费网站| 91蝌蚪精品视频| 国内精品不卡在线| 欧美日韩一区三区| 国产黑人绿帽在线第一区| ww国产内射精品后入国产| 青青草免费av| 天堂网视频在线观看| gogo久久| 亚洲一区二区成人| 精品日韩视频在线观看| 午夜精品久久久久久久白皮肤 | 亚洲成熟女性毛茸茸| 在线激情视频| 18国产精品| 成人一级片在线观看| 日本三级一区二区| 在线观看国产精品91| 亚洲iv一区二区三区| mm131亚洲精品| 色综合久久av| 国产一级伦理片| www.天堂在线| 国产在线视频福利| 日韩免费一区| 亚洲蜜臀av乱码久久精品 | 中文字幕国内自拍| 在线观看av大片| 色就是色亚洲色图| 青草国产精品| 亚洲制服欧美中文字幕中文字幕| 欧美日韩国产成人在线观看| 色欲色香天天天综合网www| 特级做a爱片免费69| 一区二区三区精| 婷婷丁香六月天| 亚洲免费毛片| 自拍偷拍欧美精品| 97在线观看免费| 91小视频网站| 视频区小说区图片区| 搞黄网站在线看| 免费观看久久久4p| 亚洲成人久久一区| 亚洲一区二区三区加勒比 | 成人亚洲综合天堂| 欧美黄色aaaa| 精品视频资源站| 成人蜜桃视频| 久久国产精品国语对白| 天天碰日日操| 国产免费av一区二区三区| 亚洲综合av网| 99精品国产一区二区| 日本一二三不卡视频| 美女88av| 黄色aaa大片| 嫩草研究院在线观看| 中文字幕日韩一区二区不卡| 日韩欧美国产黄色| 国产一区二区黄色| 精品欧美一区二区久久久久| a视频免费看| 999国产精品| 欧美日高清视频| 杨幂一区欧美专区| 欧美国产一级片| 免费a级人成a大片在线观看| 石原莉奈一区二区三区在线观看| 日韩成人av一区| 国产中文字幕免费观看| 麻豆chinese极品少妇| 国产一级激情| 亚洲电影在线一区二区三区| 欧美精品丝袜中出| 最新不卡av| 精品国产无码一区二区三区| 美女露胸视频在线观看| 久久美女艺术照精彩视频福利播放| 97久久精品人人澡人人爽缅北| 中文字幕人妻熟女在线| www.色五月.com| 欧美丰满老妇| 日韩午夜激情免费电影| 无码专区aaaaaa免费视频| 少妇又色又爽又黄的视频| 成人不卡视频| 亚洲一区二区三区在线播放| 精品无码久久久久久久动漫| 欧美男人天堂网| 116极品美女视频在线观看| 日韩综合网站| 亚洲精品在线一区二区| 超碰网在线观看| 国产偷窥老熟盗摄视频| 欧美女优在线视频| 欧美一区二视频| 37pao成人国产永久免费视频| 一道精品视频一区二区三区图片 | 日本天堂影院在线视频| 看电视剧不卡顿的网站| 国语自产精品视频在线看一大j8 | 情趣网站在线观看| 久久精品麻豆| 国内精品在线一区| 中文字幕在线观看2018| 日本电影全部在线观看网站视频 | 国产成人久久久| 欧产日产国产v| 在线观看的网站你懂的| 久久色成人在线| www 成人av com| xxww在线观看| jizz免费视频| 国产精品嫩草99av在线| 久久国产精品久久久| 国产成人精品无码免费看夜聊软件| 在线观看免费国产小视频| 国产一二三精品| 国产男人精品视频| 国产九色91回来了| 欧美高清影院| 欧美美女喷水视频| 亚洲第一狼人区| caoporn超碰国产公开| 蜜芽一区二区三区| 国产成人午夜视频网址| 中文字幕av影院| 国产精品麻豆| 欧美一区二区黄色| 999在线观看| 翔田千里在线视频| 久久久蜜桃精品| 婷婷五月色综合| 国产剧情av片巨作醉酒女邻居 | 国产视频不卡在线| 国产一二区在线观看| 自拍偷自拍亚洲精品播放| 欧美在线观看视频一区二区| 久久国产亚洲精品无码| 伊人av在线com| 看片的网站亚洲| 91青青草免费在线看| 国产成人精品亚洲精品色欲| 婷婷综合福利| 久久精品成人欧美大片| 97超碰成人在线| 偷偷要色偷偷| 懂色av一区二区三区免费观看| 国产成人成网站在线播放青青| 99国产成人精品| 久久久久久美女精品| 久久久这里只有精品视频| 天天干天天干天天干天天| 一区中文字幕| 国产一区二区三区欧美| 欧美日韩大片在线观看| 四虎地址8848精品| 亚洲福利视频一区二区| 日本午夜精品电影| 精品国内自产拍在线视频| 国产精品久久久久久模特| 国产一区二区丝袜高跟鞋图片| 亚洲av无码乱码国产精品| 99久久婷婷这里只有精品| 午夜精品视频在线| 99视频国产精品免费观看a| 久久久久av| 国产精品av电影| 污污视频在线观看网站| 日韩香蕉视频| 99电影在线观看| 精品免费视频一卡2卡三卡4卡不卡| 男人的天堂久久精品| 国产成人精品久久二区二区91| 一区二区不卡视频在线观看| 国内精品久久久久久久影视简单| 久久久久国产精品www| 国产乱码精品一区二三区蜜臂| 91精品久久久久久久久久不卡| 国产成一区二区| 中文字幕有码热在线视频| 东京久久高清| 久久精品福利视频| 伊人22222| 国产字幕视频一区二区| 亚洲综合在线做性| 污污视频在线免费观看| 成人丝袜高跟foot| 超级碰在线观看| 手机福利小视频在线播放| 亚洲成人综合网站| 好吊一区二区三区视频| 色8久久久久| 欧美大尺度激情区在线播放| 国产又粗又黄又爽的视频| 国内一区二区三区| 国产综合18久久久久久| 99re国产在线| 欧美日韩第一区| 久久久com| 国产九色porn网址| 亚洲地区一二三色| 成人免费看aa片| 日韩精品免费视频一区二区三区 | av在线官网| 欧美大肚乱孕交hd孕妇| www.黄色网| 欧美成人精品三级网站| www国产精品视频| 亚洲精品人妻无码| 久久国产尿小便嘘嘘| 人妻互换免费中文字幕| av午夜在线| 亚洲精品成人av| 在线播放一级片| 六月丁香婷婷久久| 国产va亚洲va在线va| www在线免费观看视频| 亚洲国产97在线精品一区| 久草热在线观看| 久久久久久久高潮| 久久这里只有精品8| 在线观看电影av| 视频一区视频二区国产精品| 日本精品一区二区在线观看| 国产精品69毛片高清亚洲| 超碰在线97免费| 中文字幕三区| 91在线你懂得| 影音先锋资源av| 台湾色综合娱乐中文网| 成人免费视频在线观看超级碰| 干出白浆视频| 日韩欧美精品中文字幕| 日本一区二区不卡在线| 亚洲专区欧美专区|