基于單片機(jī)原理的電能表設(shè)計(jì)_第1頁(yè)
基于單片機(jī)原理的電能表設(shè)計(jì)_第2頁(yè)
基于單片機(jī)原理的電能表設(shè)計(jì)_第3頁(yè)
基于單片機(jī)原理的電能表設(shè)計(jì)_第4頁(yè)
基于單片機(jī)原理的電能表設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

設(shè)計(jì)任務(wù)LCD設(shè)計(jì)目的IC掌握信號(hào)獲取、傳輸、處理及檢測(cè)的一般方法;綜合運(yùn)用已有的理論和技術(shù),制定設(shè)計(jì)方案,掌握用電量的測(cè)量方法;IC力;計(jì)的基本技能,為今后的深入學(xué)習(xí)等奠定基礎(chǔ)。設(shè)計(jì)要求參考利用存儲(chǔ)電路、IC卡、單片機(jī)及其接口技術(shù)研制出一種新型電能表,設(shè)計(jì)內(nèi)容包括:IC設(shè)計(jì)合理的計(jì)算測(cè)量電路;ICLCD應(yīng)用程序,并對(duì)程序作詳細(xì)的分析和解釋。列出制作該裝置的元器件,搭建試驗(yàn)電路,并進(jìn)行試驗(yàn)驗(yàn)證調(diào)試。撰寫詳細(xì)的設(shè)計(jì)技術(shù)報(bào)告。設(shè)計(jì)方案與技術(shù)分析ICLCDEEPROM1AT89C51IC控制等功能。AT89C51單片機(jī)簡(jiǎn)介Ⅰ、89C51單片機(jī)的基本組成本電能表的硬件設(shè)計(jì)原則是在低功耗的前提下,實(shí)現(xiàn)多功能目的,該芯片功耗低,特別PAGEPAGE31適用于電能表控制線路多、功能全、功耗低的要求。它能方便地讀取ICEEPROM89C51一個(gè)8位的微處理器CPU。片內(nèi)256字節(jié)數(shù)據(jù)存儲(chǔ)器RAM/SFR/果、最終結(jié)果以及欲顯示的數(shù)據(jù)等。4KBFlashROM,用以存放程序、一些原始數(shù)據(jù)和表格。(4)4個(gè)8位并行I/O端口P0-P3,每個(gè)端口既可以用作輸入,也可以用作輸出。16/計(jì)數(shù)器都可以設(shè)置成計(jì)數(shù)方式。5LCDLCD顯示IC卡模塊EEPROM存儲(chǔ)器單片機(jī)(AT89C51)電能計(jì)量芯片電路電源電路圖1硬件系統(tǒng)框圖一個(gè)全雙工UART的串行I/OPC行通信。片內(nèi)振蕩器和時(shí)鐘產(chǎn)生電路,但石英晶體和微調(diào)電容需要外接。以上各個(gè)部分通過片內(nèi)八位數(shù)據(jù)總線相連接。Ⅱ、89C51單片機(jī)引腳及其功能如圖2所示為單片機(jī)AT89C51的引腳圖。圖2單片機(jī)AT89C51的引腳圖XTAL(19腳:振蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。XTAL(18腳:振蕩器反相放大器的輸出端。RS9腳RST將使單片機(jī)復(fù)位。P0口3932腳P0口是一個(gè)漏極開路的8位準(zhǔn)雙向I/O端口。作為漏極開路8LSTTLP01,此時(shí)P0P3口1017腳P3口是一組帶有內(nèi)部上拉電阻的8位雙向I/OP34個(gè)TTLP3“1”P3CPU不對(duì)P3SFR/輸入線時(shí),由內(nèi)部硬件使鎖存器Q1。PEROMALE10ms停止工作。但RAM,RAM電能計(jì)量芯片模塊采用現(xiàn)在比較流行的電能計(jì)量芯片CS5460ACS5460ACrystalCS5460CS5460AΔΣ模-數(shù)轉(zhuǎn)換器ADC、高速電能計(jì)算功能和一個(gè)串ΔΣIRMSVRMS23CS5460ACS5460ACS5460A具有方便的片上AC/DC系統(tǒng)校準(zhǔn)功能。“自引導(dǎo)”的特點(diǎn)使CS5460A能獨(dú)自工作,在系統(tǒng)上電后自動(dòng)初始化。在自引導(dǎo)模式中,CS5460A從一個(gè)外部EEPROM工作時(shí)CS5460A概述Ⅰ、基本結(jié)構(gòu)及功能圖3CS5460內(nèi)部結(jié)構(gòu)圖CS5460A3一個(gè)電流通道可編程增益放大器其增益為10502一個(gè)電壓通道固定增益放大器,其增益為102兩個(gè)同時(shí)采樣的AD2兩個(gè)高速數(shù)字濾波器22一個(gè)功率計(jì)算引擎2一個(gè)片內(nèi)電壓基準(zhǔn)22一個(gè)持續(xù)監(jiān)視串口通訊的看門狗2一個(gè)雙向串行接口2一個(gè)校準(zhǔn)用SRAMⅡ、主要特性在片計(jì)算和處理功能;可以從串行E2PROM具有ACDC看門狗定時(shí)器;(6)片上2.5V基準(zhǔn)(60310-6/OC),單電源+5V或雙向2.5V±10℅電源;具有功率方向輸出指示;脈沖轉(zhuǎn)換;具有相位補(bǔ)償和系統(tǒng)校準(zhǔn)功能;步進(jìn)電機(jī)驅(qū)動(dòng)器;內(nèi)帶電源監(jiān)視器;10001±0.1%;<12mW;(15)電源配置:VA+=+5V,VA-=0V;VD+=+3V至+5V或VA+=2.5V,VA-=-2.5V;VD+=+3V1、控制命令字CS5460A包含一系列控制命令,對(duì)CS5460A寫入指定的控制字,即可完成相應(yīng)的操作。這些控制命令包括:、啟動(dòng)轉(zhuǎn)換命令只要對(duì)CS5460A寫OXE8控制命令,CS5460A即開始進(jìn)行AD轉(zhuǎn)換,并輸出計(jì)算結(jié)果,這個(gè)命令一般在CS5460A復(fù)位操作完成后輸入,以使CS5460A進(jìn)入正常工作狀態(tài)。0(OXFE)1(OXFF)這兩個(gè)命令主要用在一連串的讀寫命令之前,復(fù)位串行通信接口。Power_up/HaltControl(OXAO)這個(gè)命令主要用在系統(tǒng)校準(zhǔn)之前,以中斷CS5460A正在執(zhí)行的操作,而執(zhí)行系統(tǒng)校準(zhǔn)命令。10VIRGO這個(gè)命令完成指定的某項(xiàng)系統(tǒng)校準(zhǔn)。V、I、R、G、O的說明如下:VI:00-不允許出現(xiàn)0001-電流通道選擇電壓通道選擇R:0-DC1-AC校準(zhǔn)G:0-正常操作1-執(zhí)行增益校準(zhǔn)O:0-正常操作執(zhí)行偏置校準(zhǔn)2、控制寄存器ConfigRegister(OX00)Default:=0x000001PC6PC5PC4PC3PC2PC1PC0GIEWAPH1PH0SI1SI0EODDL1DL0RSVHPFIHPFICPUK3K2K1K0K[3:0]:指示將主頻MCLK分頻作為CS5460A內(nèi)部時(shí)鐘DCLK:有效值分別為1、2、4。0001:DCLK=MCLK/10010:DCLK=MCLK/20100:DCLK=MCLK/4IHPF:電流通道高通濾波器控制位0=VHPF:電壓通道高通濾波器控制位0=禁止高通濾波器,1=使用所有的濾波器RS:CS5460A復(fù)位控制位,當(dāng)RS=1,CS5460A復(fù)位,復(fù)位周期至少10個(gè)機(jī)器周期DCO:當(dāng)EOD=1,EDIR作為通用輸出口,其輸出電平由DC0決定。DC1:當(dāng)EOD=1,EOUT作為通用輸出口,其輸出電平由DC1決定。EOD:EOUT,EDIR允許控制位。0:允許EOUT/EDIR輸出(DEFAULT)1:用戶定義的控制輸出端SI[1:0]:00:低電平有效DEFAUL。01:高電平有效。10:下降沿有效。11:上升沿有效。EWA:允許多片CS5460A的EOUT和EDIR連接在一起DEFAULT=。GI:電流增益控制0=10;1=50;PC[6:0]:相位補(bǔ)償,CS5460A沒有自動(dòng)相位補(bǔ)償功能,通過調(diào)整PC[6:0]值可以實(shí)現(xiàn)-2.8度到+2.8度的相位補(bǔ)償。CYCLECOUNTREGISTER(0X05)Bit23bit22bit0這個(gè)寄存器的值決定每秒鐘完成計(jì)算的次數(shù),其計(jì)算方法請(qǐng)參見后面的例子。PULSERATEREGISTER(0X06)Bit18bit17bit-5這個(gè)寄存器的值決定在某一功率時(shí)CS5460A每秒鐘輸出的脈沖數(shù)。其值的設(shè)置請(qǐng)參見后面的計(jì)算方法。STATUSREGISTERDRDYEOUTEDIRCRDYMATHRESIORVORPWORIRORVROREOREOORRESID3ID2ID1ID0WDTVODIODLSDO/IC狀態(tài)寄存器指示CS5460Abit都會(huì)使bit001/IC:數(shù)據(jù)無效指示。讀狀態(tài)寄存器時(shí)判斷該位可以確定該寄存器的值是否有效。LSD:低電壓指示,當(dāng)PFMON相對(duì)于VA-電平值低于2.5V時(shí),該位置1。IOD:電流超界指示位,當(dāng)輸入電流值大于指定的滿度電流時(shí),該位置1。VOD:電壓超界指示位,當(dāng)輸入電壓值大于指定的滿度電壓時(shí),該位置1。WDT:1。ID[3:0]版本標(biāo)識(shí)。EOR:當(dāng)計(jì)算出的能量值太大或太小超出范圍時(shí),該位置1。EOOR:當(dāng)EOUTEOUT超界。VROR:電壓超界。IROR:電流超界。PWOR:功率校準(zhǔn)超界。VOR:電壓校準(zhǔn)超界。IOR:電流校準(zhǔn)超界。MATH:(0。CRDY:轉(zhuǎn)換完成。EDIR:01EOUT:EOUTDRDY:數(shù)據(jù)準(zhǔn)備好或控制操作完成。CONTROLREGISTER(0X1C)RESRESRESRESRESRESRESRESRESRESRESRESRESRESRESRESMECHRESINTLSYNCNCPUNOSCSTEPSTOP:1=結(jié)束EEPROMBOOT模式。RES:保留。MECH:加寬EOUT和EDIR的輸出脈寬。INTL:設(shè)置/INT引腳為開漏方式。SYNC:使CS5460A內(nèi)部AD轉(zhuǎn)換脈沖與轉(zhuǎn)換命令同步。NOOSC:停止振蕩器振蕩。STEP:允許EOUT和EDIR輸出作為步進(jìn)馬達(dá)驅(qū)動(dòng)信號(hào)。Ⅲ、操作時(shí)序CS5460A串行口包括4條控制線:串行時(shí)鐘SCL、串行數(shù)據(jù)輸入SD輸出SD)和片選CS,器讀寫時(shí)序如圖4所示:圖4CS5460A操作時(shí)序圖CS5460A/SCLK824SCLKADC24位。上電復(fù)位后,串行狀態(tài)機(jī)初始化為命令模式,等待接收有效的命令(輸入串口的前8為數(shù)據(jù)寄存器輸入輸出數(shù)據(jù)。81624SCLKSDO8位的邊界上(8,1624。同樣,數(shù)據(jù)寄存器讀出允許采用“命令鏈16個(gè)連續(xù)的讀數(shù)據(jù)串行時(shí)鐘脈沖后,執(zhí)行寫命令字(如狀態(tài)寄存器清零命令,數(shù)據(jù)從SDI引腳輸入,同時(shí)剩下的8位讀出數(shù)據(jù)被傳送到SDO16SDO8SDISDO引腳輸出數(shù)據(jù)時(shí),必須用SYNC0(NOP)SDI引腳處于選5圖5CS5460A與AT89C51的硬件連接EEPROM存儲(chǔ)器模塊Ⅰ、AT24C01簡(jiǎn)介AT24C01是美國(guó)ATMEL公司的低功耗CMOS串行256382.~5.5、擦寫次數(shù)多(大于10000次、寫入速度快(小于10m)等AT24C011,86為AT24C01圖6AT24C01的引腳圖SCL:串行時(shí)鐘。在該引腳的上升沿時(shí),系統(tǒng)將數(shù)據(jù)輸入到每個(gè)EEPROM器件,在下降沿時(shí)輸出。SDA:串行數(shù)據(jù)。該引腳為開漏極驅(qū)動(dòng),可雙向傳送數(shù)據(jù)。A0~A2:器件/頁(yè)面尋址。為器件地址輸入端。Wp:硬件寫保護(hù)。當(dāng)該引腳為高電平時(shí)禁止寫入,為低電平時(shí)可正常讀/寫數(shù)據(jù)。Vcc:電源。一般輸入+5V電壓。Vss:接地。Ⅱ、硬件原理圖7AT89C5124C01I2C/寫校驗(yàn)操作。圖7記憶單元硬件原理圖LCD顯示模塊為現(xiàn)實(shí)多費(fèi)率下對(duì)相應(yīng)多項(xiàng)參數(shù)的顯示,目前大多數(shù)相應(yīng)電能表都采用液晶顯示器LCD或發(fā)光二極管顯示器LED。LCD的優(yōu)點(diǎn)是一屏可以顯示許多字符,工作電流小,供電系統(tǒng)停用圖形液晶顯示模塊GXM12864,它內(nèi)含KS0108B/HD61202CMOS技術(shù)實(shí)現(xiàn)的點(diǎn)陣圖形LCD模塊,有8128364位映射DDRAM128364KS0108BKS0107BKS0107B不與CPU和各種同步信號(hào),比較簡(jiǎn)單。液晶顯示模塊GXM12864的工作原理圖如圖8所示。圖8LCD顯示模塊GXM12864的工作原理圖電位器R15RSTVout1DB0~DB7P0D/I、R/W線/CSA、/CSBP26、、、0P2.3在進(jìn)行液晶顯示模塊的硬件調(diào)試時(shí)務(wù)必注意正確的接線錯(cuò),否則會(huì)燒壞電路上的芯片。為避免液晶模塊的損壞,在加液晶驅(qū)動(dòng)電壓V0/VEE比加邏輯電壓VDD滯后50mV0/VEE需要比邏輯電壓VDD提前50ms關(guān)斷。GXM12864的引腳定義如表1所示。表1GXM12864的引腳定義引腳名稱引腳名稱引腳定義/CSA、/CSB、2VSSVSS數(shù)字地VDD邏輯電源+5VV0對(duì)比度調(diào)節(jié)D/I指令數(shù)據(jù)通道R/W讀/寫選擇E使能信號(hào)、高電平有效DB0-DB78RST復(fù)位信號(hào)VEE液晶驅(qū)動(dòng)電源A、K背光正電源端、背光接地端電源電路模塊+5V-10V電壓。本設(shè)計(jì)中系統(tǒng)采用電池供電,其輸入電壓為+3V,所以電源部分的設(shè)計(jì)要求為+3V輸入,+5V和-10V雙電壓輸出。MAX1677DC-DCLCD(0.7-5.5V)電池的空間和所需的不同電池電壓與容量,靈活的選擇電池的種類。9MAX1677Vin=3VVout1和Vout2,分別是+5V和-10V,+5V-10V作為液晶顯示模塊的背光電源。電路中的其他器件說明如下。

圖9 直流電源的設(shè)計(jì)L1、L2為CoilCraft的DO1608C-103表貼磁芯電感,電感值為10Uh。D1、D216V二極管。R11R12式:R11=R12*[Vout/1.25-1](R12的取值范圍為10-200千歐姆)電阻R14和R13的比值決定了LCD對(duì)比度輸出的電壓值VLCD(對(duì)應(yīng)圖中的Vout2)需滿足下面的公式:R14=R13*|VLCD|/1.25(V)(R14的取值范圍為500-2000千歐姆)電阻R8和R7的比值決定了系統(tǒng)欠電壓監(jiān)測(cè)的門檻電壓值VTRIP需滿足下面的公式R8=R7*[VTRIP/0.614-1] (R7≤130千歐)LBO電壓,LBO引腳輸出為低電平。如果不是用欠電壓監(jiān)測(cè)的話,只需要將第三引腳接地即可。1.5VVout1連接MAX1677的第16+5VVout2連接MAX167710-10V前端電路調(diào)理模塊的設(shè)計(jì)1、電壓調(diào)理部分對(duì)于系統(tǒng)的前端電壓調(diào)理部分,我們采用變比為2mA/2mA的電流互感器和高精度電阻作10220V2mA2mA/2mA1125ΩCS5460A然電阻R2RC動(dòng)電容保護(hù)芯片。2、電流調(diào)理部分電流調(diào)理部分采用變比2000:1的電流互感器,然后經(jīng)一精密電阻將電流信號(hào)轉(zhuǎn)變成電壓信號(hào)。并加入RC補(bǔ)測(cè)信號(hào)以差模電壓的形式接到CS5460ACS5460A具有相位補(bǔ)償功能(可進(jìn)行-2.+2.°的相位補(bǔ)償,步進(jìn)0.3°,可以大大減小互感器角差的影響。圖10前端調(diào)理電路實(shí)時(shí)時(shí)鐘電路模塊MCUlOs電源掉電情況下的時(shí)鐘保護(hù)電路和備份電源自動(dòng)切換控制電路RAMMCUMCU8DIPCPU23I/ODSl302DALLAS31RAM,日歷時(shí)(2.5V5.5V),功耗低芯11圖11時(shí)鐘芯片DSl302的接口電路采用三線串行通訊方式,/RST為通信允許信號(hào),/RST=l,允許通信,/RST=0禁止通信。SCLK為串行數(shù)據(jù)的位同步脈沖信號(hào)。為雙向串行數(shù)據(jù)傳送信號(hào)。AT89C51單片機(jī)通過控制I/ODSl302X1X2的石英晶振,VCClVCC2VCCl1數(shù)據(jù)傳送是以AT89C51AT89C51DSl302入一個(gè)命令字節(jié)開始。命令字節(jié)格式如圖12圖12命令字節(jié)格式命令字節(jié)的最高位必須為l,RAM/CK位為RAM/時(shí)鐘選擇位選擇RAM操作,RAM/CK=0選擇時(shí)鐘操作A4至A0為片內(nèi)日歷時(shí)鐘寄存器或RAM地址選擇位。選擇時(shí)鐘操作時(shí)A4至A0為00H至06H對(duì)應(yīng)日歷時(shí)鐘寄存器地址,分別存放秒,分,時(shí),日,月星期,和年等信息。秒寄存器的最高位為時(shí)鐘暫??刂莆?,該位為0時(shí)時(shí)鐘振蕩器暫停,DSl302進(jìn)入低功耗狀態(tài),該位為1時(shí)啟動(dòng)時(shí)鐘。地址07H為寫保護(hù)寄存器,用以控制對(duì)片內(nèi)日歷時(shí)鐘寄存器的寫允許,地址08H為涓 流充電控制寄存器,控制內(nèi)部涓流充電過程及充電電路的連接方式。選擇片內(nèi)RAMA4AORAM00H~1EH,RD/WDSl302RAM)地址,讀取數(shù)據(jù)并通過I/OAT89C51,RD/W=0DSl302AT89C51DSl302RAMDSl302AT89C51I/0SCLK字節(jié)為單位,低位在前,高位在后,傳送一個(gè)字節(jié)數(shù)據(jù)需要8SCLK13圖13字節(jié)傳送時(shí)序IC卡模塊1、Mifare1射頻IC卡Mifare1ICPhilipsMifare1ICS50系列微晶片,其內(nèi)1KBEEPROM、數(shù)字控制模塊和一個(gè)高效率射頻天線模塊??ㄆ旧聿粠щ姵毓?VIC在信道保證和數(shù)據(jù)完整性方面,Mifare1標(biāo)準(zhǔn)還提供了信道檢測(cè)、存儲(chǔ)數(shù)據(jù)冗余校驗(yàn)、三Mifare1IC(1)1KB的EEPROM,分為16個(gè)扇區(qū),每個(gè)扇區(qū)分為4塊,每塊16B,以塊為存取單位。每個(gè)扇區(qū)有獨(dú)立的一組)密碼及存取權(quán)限設(shè)置。32具有防沖突機(jī)制、支持多卡操作。無電源,自帶天線,內(nèi)含加密控制邏輯和通信邏輯電路。101013.56MHZ。(8)106kbps的快速數(shù)據(jù)傳輸速率。(9)10cm(取決于天線設(shè)計(jì)。(10)工作溫度范圍:-20--+50。C。Mifare12、H6152圖14H6152基本結(jié)構(gòu)示意圖H6152的基本結(jié)構(gòu)如圖14所示。圖中,對(duì)外通信的接口為J3和J4。J37RS-232/422LEDH6152PCB板載天線電路和RS-232/422接口的集成讀寫模塊,還提供了RS-232/422TTLH6152+5V工作頻率:13.56MHz。、19200bps、38400bps57600bps4(3)接口:RS-232/422/485。天線尺寸:45mm370mm。。電流供應(yīng):80mA。(8)工作溫度:-40~+85℃.(9)最大讀寫距離:50mm。3、IC卡讀寫電路的原理及說明IC卡應(yīng)用系統(tǒng)的硬件設(shè)計(jì)結(jié)構(gòu)框圖如圖15所示單片機(jī)AT89C51是本設(shè)計(jì)的核心器件它主要完成了對(duì)射頻卡1卡)的讀寫操作H6152讀寫器對(duì)射頻卡進(jìn)行讀寫后通過串口電平轉(zhuǎn)換電路將RS-232電平轉(zhuǎn)換為單片機(jī)所識(shí)別的 TTL電平,從而達(dá)到了使用AT89C51單片機(jī)來控制射頻卡的讀寫過程。串口電平串口電平轉(zhuǎn)換電路IC單片機(jī)AT89C51IC報(bào)警電路15硬件設(shè)計(jì)結(jié)構(gòu)框圖H6152316171816單片機(jī)模塊圖17串口電平轉(zhuǎn)換模塊圖18H6152讀寫模塊U1AT89C51P1.0H6152H6152XTAL0和XTAL1分別為反向放大器的輸入和輸出。該反向?qū)挓o任何要求,但必須保證脈沖的高低電平要求的寬度。本設(shè)計(jì)的外部時(shí)鐘電路是將XTAL0(18XTAL1(19)腳分別對(duì)接外部晶體和微調(diào)電容的兩端所構(gòu)成。另外單片機(jī)中還帶有復(fù)位端,為了安全方便,單片機(jī)采用了上電自動(dòng)復(fù)位和手動(dòng)復(fù)位兩種。串口電平轉(zhuǎn)換電路采用MaximMAX3232MAX3232TTL,然后與H6152的RS-232RS-232C和數(shù)據(jù)通信設(shè)備(DCE)之間的接口標(biāo)準(zhǔn),是在微機(jī)接口應(yīng)用中常用的一種串行通信總線標(biāo)準(zhǔn),全稱為EIA-RS-232C(ElectoronicIndustrialAssociateRecommendedStandard-232RS-232C2522229如COM19RS-232C5~15V(MARK信號(hào)5~15V表示邏0(SPACE信號(hào),內(nèi)阻為幾百歐姆,可以帶2500pF的電容負(fù)載。負(fù)載開路時(shí)電壓不得253V13V0電能表程序設(shè)計(jì)如圖19所示為電能表主流程圖:開始開始電能采集實(shí)時(shí)時(shí)鐘是峰電?谷電加峰電加數(shù)據(jù)存儲(chǔ)LCD顯示IC卡<5°斷電圖19主流程圖程序如下:#include<reg51.h>#include<stdio.h>#include<intrins.h>sbitSDA=P1^3;sbitSCL=P1^4;#defineucharunsigned#definelcdP0sbitrw=sbitrs=P2^2sbite=P2^3sbitbusy=ACC^7unsignedcharcountunsignedchartimer//unsignedcountAunsignedcountBunsignedcount1 //峰值電量unsignedcount2unsignedcountunsigneddecountcountA=0;

//谷值電量voidmain() //主函數(shù)程序{countB=ReadMemory();//讀電量計(jì)數(shù)模塊值decount=countB-countA; //一樣則開始計(jì)數(shù);while(decount==0){count++;while(count<100){timer=readbyte(); //if(timer>12)count1++;elsecount2++ ;Remain=total-count1*0.5-count2*0.6; //計(jì)算剩余的金額write(count1);write(count2);write(Remain);}}

//向IC卡內(nèi)分別寫入峰值電量、谷值電量、剩余金額if(remian<5.0)flag=1;}

//如果剩余金額不足則置報(bào)警顯示位unsignedcharControl,enumeepromtypeenumer)//EEPROM程序{voidDelay(unsignedcharDelayCount);/*voidStart(void);/**/voidStop(void);/*IICbitRecAck(void);/**/voidNoAck(void);/*IICvoidAck(void);/*IIC*/unsignedcharReceive(void);/*IICvoidSend(unsignedcharsendbyte);/*IIC*/unsignedchardataj,i=ERROR;biterrorflag=1;/*while(i--){Start();/*啟動(dòng)總線*/Send(Control&0xfe);/*IICif(RecAck())continue;/**/if(RecAck())continue;}Send((unsignedchar)Addr);/*IIC*/if(RecAck())continue;/*if(!(Control&0x01))判斷是讀器件還是寫器件{j=Length;errorflag=0;/*while(j--){Send(*DataBuff++);/*向IIC總線寫數(shù)據(jù)*/if(!RecAck())continue;/*如寫正確結(jié)束本次循環(huán)*/errorflag=1;break;}}else{

if(errorflag==1)continue;break;Start();/*啟動(dòng)總線*/Send(Control);/*IIC*/if(RecAck())continue;//器件沒應(yīng)答結(jié)束本次本層循環(huán)while(--Length)/*字節(jié)長(zhǎng)為0結(jié)束*/{*DataBuff++=Receive();Ack();/*IIC*/}*DataBuff=Receive();/*NoAck();/*IIC*/errorflag=0;break;}Stop();/*IICif(!(Control&0x01)){Delay(255);Delay(255);Delay(255);Delay(255);return(errorflag);}/*****以下是對(duì)IIC總線的操作子程序*****//******啟動(dòng)總線*****/voidStart(void){SCL=0;/*SCL,SDA*/SDA=1;/*狀態(tài),SCL=1;_nop_();_nop_();_nop_();SDA=0;_nop_();_nop_();_nop_();_nop_();SCL=0;SDA=1;}/*****IIC****voidStop(void){SCL=0;/*SCL,SDASDA=0;表示一個(gè)停止?fàn)顟B(tài),該狀態(tài)終止所有通訊*/SCL=1;_nop_();_nop_();_nop_();/*SDA=1;_nop_();_nop_();_nop_();SCL=0;}/*****檢查應(yīng)答位*****/bitRecAck(void){SCL=0;SDA=1;SCL=1;_nop_();_nop_();_nop_();_nop_();CY=SDA;/*因?yàn)榉祷刂悼偸欠旁贑Y中的SCL=0;return(CY);}/****IIC****voidAck(void){SDA=0;/*EEPROM通過在收到每個(gè)地址或數(shù)據(jù)之后,*/SCL=1;/*SDA低電平的方式確認(rèn)表示收到讀SDA*/_nop_();_nop_();_nop_();_nop_();SCL=0;_nop_();SDA=1;}/*********IIC*****/voidNoAck(void){SDA=1;SCL=1;_nop_();_nop_();_nop_();_nop_();SCL=0;}/*********IIC總線寫數(shù)據(jù)*****/voidSend(unsignedcharsendbyte){unsignedchardatafor(;j>0;j--){SCL=0;sendbyte1;/*CY=sendbyte^7;SDA=CY;/*CY*/SCL=1;}SCL=0;}/*********IIC*****/unsignedcharReceive(void){registerreceivebyte,i=8;SCL=0;while(i--){SCL=1;receivebyte=(receivebyte<<1)|SCL=0;}return(receivebyte);}/********一個(gè)簡(jiǎn)單延時(shí)程序*************/voidDelay(unsignedcharDelayCount){while(DelayCount--);}voidlcd_mwcode(uchari) //LCD液晶顯示,{rw=1;rs=0;lcd=0;e=1;do{ACC=lcd; //e=0;}while(busy);rw=0;lcd=i;e=1;e=0;}voidlcd_mwdata(uchari) //輸入數(shù)據(jù),{rw=1;rs=0;lcd=0;e=1;do{ACC=lcd;e=0;}while(busy);rw=0;rs=1;lcd=i;e=1;e=0;}voidsetpos(ucharrow,ucharcol)//選擇行,列,{lcd_mwcode(0xb8+row);lcd_mwcode(0x40+col);}voidlcd_init(void) //初始化{lcd_mwcode(0xc0);lcd_mwcode(0x3f);}voiddisp1(ucharcode*hz) //顯示漢字上半?yún)^(qū),{uchari;for(i=0;i<16;i++)lcd_mwdata(*(hz+i));}voiddisp2(ucharcode*hz) //{uchari;for(i=16;i<32;i++)lcd_mwdata(*(hz+i));}voidselect(ucharx){switch(x){case1:cs1=0;cs2=1;break;//左屏,case2:cs1=1;cs2=0;break;//右屏,default:cs2=0;cs2=0;}}}ucharreadbyte(temp) //時(shí)鐘程序{uchar i;Iongdelay0;temp=0;for(i=0;i<8;i++){temp=temp>>1:if(dat==1)temp=temp+0x80;clk=1:shortdelay0;clk=0;//時(shí)鐘下降沿讀出有效shortdelay0;}returntemp;}ucharDateWrite(1ongidata*_bur)序

//IC卡程{uchartemp=(uchar*)_Value;//轉(zhuǎn)存指針ucharwritecheck=DATA_ERR;//寫入狀態(tài)標(biāo)記,用于返回值_buf[0]=*(temp+3);_buf[1]=*(temp+2);_buf[2]=(temp+1);_buf[3]=*temp;//數(shù)據(jù)轉(zhuǎn)存到緩沖區(qū)_buf[4]=~_buf[0];_buf[5]=~_buf[1];_buf[6]=_buf[2];_buf[7]=~_buf[3];//值備份_buf[8]=_bur[0];_buf[9]=_buf[1];_buf[10]=_buf[2];_buf[11]=_buf[3];_buf[12]=_LgeAdr;_buf[13]=~_LgcAdr;_bull14]=LgcAdr;_buf[15]=~_LgcAdr;//轉(zhuǎn)存地址,并備份writecheck=writecheck&mifs_write(_block+1,_buf)writecheck=writecheckmifs_write(_block,_buf)writecheck}reset_5460=0;//reset_5460為CS5460A的復(fù)位腳 //計(jì)量模Delay_10MS();reset_5460=1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論