智能尋跡小車的研究與開發(fā)
材料清單一、 研究報告1. 項目成果簡介2. 項目研究背景和意義3. 研究計劃4. 研究內(nèi)容5. 成果創(chuàng)新點6項目研究展望二、附件材料附件一:實物電路圖附件二:實物照片附件三:源程序清單三、實物作品衡陽市第三屆大學生創(chuàng)新大賽相關(guān)項目的研究報告項目名稱:智能尋跡小車的研究與開發(fā)項目類型:實用型成果形式:1、研究報告;2、實用作品參賽學生:陳緒雄、周鋒、蔣晶指導教師:李祖林、雷軍、李旭華一、項目成果簡介本項目使用光電傳感器檢測小車的運動軌跡,金屬傳感器和超聲波傳感器檢測小車周圍的障礙,對小車的相關(guān)信息進行采集,采用AVR單片機Atmega128L作為電動小車的尋跡控制,AVR單片機Atmega128L完成算法分析、信息處理和小車的控制。構(gòu)建了以微處理器為核心、多傳感器的小車信息檢測與融合、聲光報警與LCD數(shù)碼顯示、雙向PWM控制驅(qū)動電機的智能小車尋跡系統(tǒng)。電動小車能沿著任意設(shè)定的軌跡行走,遇到障礙自動停止5秒并發(fā)出聲光報警,之后能自動倒回按設(shè)定的軌跡行走,小車能自動糾偏。經(jīng)過測試,小車能夠按任意設(shè)定的軌跡行走流暢。二、項目研究背景和意義隨著計算機技術(shù)、控制技術(shù)、信息技術(shù)的快速發(fā)展,工業(yè)的生產(chǎn)和管理進入了自動化、信息化和智能化時代,智能化已經(jīng)成為時代發(fā)展的需要。在柔性自動化生產(chǎn)線、智能倉儲管理及物流配送等領(lǐng)域,當生產(chǎn)現(xiàn)場環(huán)境惡劣時,人工不能完成的任務如物料運輸和裝卸等,可采用智能尋跡小車完成相應的任務?;谏a(chǎn)現(xiàn)場和日常生活的實際需要,研究和開發(fā)智能小車尋跡系統(tǒng)具有十分重要的意義。該項目的研究可以應用于機車頭燈自動尋跡、工廠自動化、倉庫管理、智能玩具和民用服務等領(lǐng)域,可提高勞動生產(chǎn)效率,改善勞動環(huán)境。三、研究計劃2007年6月1日-2007年6月20日,收集資料,確定研究內(nèi)容、技術(shù)方案、研究路線。(由組內(nèi)3人共同研究)。2007年6月21日-2007年7月30日,完成小車硬件的電路制作(陳緒雄負責小車整體方案確定、制作電路板,周鋒負責購買元器件和電路焊接,蔣晶負責電路圖繪制)。2007年8月1日-2007年9月8日,完成小車軟件的編寫和小車整機調(diào)試。(三人共同協(xié)作完成)。2007年9月10日-2008年3月6日,完成成果總結(jié)。四、研究內(nèi)容1 方案與論證1.1控制芯片的選擇方案一:選用AVR單片機Atmega128L,Atmega128L是高性能、低功耗的 AVR 8 位微處理器,64引腳。采用先進的 RISC 結(jié)構(gòu),具有133 條指令,大多數(shù)可以在一個時鐘周期內(nèi)完成。它具有兩個獨立的預分頻器和比較器功能的8 位定時器/計數(shù)器和兩個具有預分頻器、比較功能和捕捉功能的16 位定時器/計數(shù)器及具有獨立預分頻器的實時時鐘計數(shù)器。片內(nèi)帶有模擬比較器。具有上電復位以及可編程的掉電檢測功能。其片內(nèi)資源豐富,具有: 8個外部中斷, 4個定時計數(shù)器,53個I/O口,可解除I/O口資源不足的困難。其引腳大多數(shù)都有具有第二功能,功能強大。.方案二:采用AT89S52單片機,AT89S52 單片機是一種低功耗、高性能CMOS 8位微控制器,具有8K 在系統(tǒng)可編程存儲器。使用Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。AT89S52有5個中斷源,和3個定時計數(shù)器。方案三:采用FPGA(現(xiàn)場可編輯門列陣)作為系統(tǒng)控制器。FPGA可以實現(xiàn)各種復雜的邏輯功能,規(guī)模大,集成度高,體積小,穩(wěn)定性好,并且可利用EDA軟件進行仿真和調(diào)試。FPGA采用并行工作方式,提高了系統(tǒng)的處理速度,常用于大規(guī)模實時性要求較高的系統(tǒng)。方案比較:由三種方案可以看出,以Atmega 128L核心可以方便地實現(xiàn)對各個部分的控制和外接,而AT89S52而需要外擴大量的I/O口才能滿足需要,而FPGA的高速處理能力得不到充分發(fā)揮且價格較貴,所以我們選擇方案一。(2)軌道行程控制方案的選擇為了使電動車能夠識別黑線不跑離軌道,我們在系統(tǒng)中加裝了光電傳感器和金屬傳感器。1.2 路面檢測 我們采用檢測黑線的方法來控制智能小車的行走軌跡,使用了兩個紅外對管來檢測黑線,同時用超聲波傳感器檢測小車周圍的障礙物。方案一:采用熱探測器。熱探測器是利用所接收到的紅外輻射后,會引起溫度的變化,溫度的變化引起電信號輸出,且輸出的電信號與溫度的變化成比例,溫度變化是因為吸收熱輻射能量引起的,與吸收紅外輻射的波長沒有關(guān)系,即對紅外輻射吸收沒有波長的選擇。但熱探測器對其吸收的紅外輻射波長沒有選擇性,受外界環(huán)境的影響比較大。 方案二;采用光電探測器。光電探測器接收紅外輻射后,由于紅外光子直接把材料的束縛態(tài)電子激發(fā)成傳導電子,由此引起電信號輸出,信號大小與所吸收的光子數(shù)成比例。且這些紅外光子的能量的大?。醇t外光還必須滿足一定的波長范圍),必須滿足一定的要求,才能激發(fā)束縛電子,起激發(fā)作用。光電探測器吸收的光子必須滿足一定的波長,否則不能被吸收,所以受外界影響比較小,抗干擾比較強。基于上面分析,我們采用方案二1.3 小車運行終點檢測方案一:采用計算路程的方法來控制。只要將計算出來的路程不斷的與預置的初值進行比較,只要相等說明已經(jīng)到了終點,倒回起點也如此。這種方法不僅計算路程麻煩而且占用了CPU的開銷。方案二:采用檢測金屬片的方法。只要在運行軌跡的終點放置一塊鐵片,再用金屬傳感器檢測金屬片就可以了,電路簡單、程序采用中斷的方式不會占用很多CPU資源。綜合上述我們采用方案二1.4 顯示裝置的選擇方案一:采用美信公司的MAX7219是一款串行共陰極數(shù)碼管動態(tài)掃描顯示的驅(qū)動芯片,其峰值段電流可達到40mA最高串行掃描頻率10MHz,典型掃描頻率為1.3MHz,僅用3線串行接口傳送數(shù)據(jù),可直接與單片機接口,用戶可以方便地修改其內(nèi)部參數(shù)以實現(xiàn)多位LED顯示。它內(nèi)含硬件動態(tài)掃描顯示控制電路,每片芯片可同時驅(qū)動8位共陰LED。點是控制比較簡單,而且串行顯示只占用很少的I/O口。方案二:采用點陣型LCD顯示,點陣型LCD雖然占用的I/O口資源多,控制比較復雜,但其功能強大的,顯示信息量大,可以保證良好的用戶模式。它具有顯示質(zhì)量高、體積小、重量輕、功耗低、輕薄短小、無輻射危險、平面直角顯示以及影像穩(wěn)定不閃爍等優(yōu)勢,可視面積大,圖面積效果好,分辨率高,抗干擾能力強等特點等優(yōu)點??紤]到Atmega128 I/O口資源豐富和LCD的眾多優(yōu)點,我們選擇使用LCD顯示。2 主要電路設(shè)計與分析2.1系統(tǒng)結(jié)構(gòu)框圖單片機將傳感器送來的數(shù)據(jù)進行處理、算法分析,其輸出信號控制電機并送LCD顯示。光電傳感器負責黑線的檢測,引導智能小車的行使軌跡。金屬傳感器負責前起點和終點的檢測,當金屬傳感器檢測到金屬條時,說明電動小車已經(jīng)到起點或終點,采用超聲波傳感器檢測智能小車的周圍障礙物及其距離,若檢測的距離達到超過給定值,發(fā)出聲光報警,聲音報警信號為“請注意倒車”。系統(tǒng)框圖如圖2.1。圖2.1 系統(tǒng)框圖2.2系統(tǒng)模塊理論分析與設(shè)計(1)探測路面黑線的基本原理當光線照射到路面會反射,由于黑線和地面對光的反射系數(shù)不同,可根據(jù)接收到的反射光強弱,用光電傳感器判斷黑線。光電管基本原理圖如圖2.2。圖2.2光電管基本原理圖當光電管檢測不到黑線時,紅外光管接收到反射回來的紅外光,使其輸出由高電平立即跳至低電平。我們在小車上并排加上兩個紅外光電管,黑線置于兩紅外光電管之間,并且將兩個光電管產(chǎn)生的電信號脈沖分別送單片機的PE2和PE3。這樣通過PWM來調(diào)節(jié)兩個電機的速度來校正行使路線,電動車行駛狀態(tài)和紅外對管產(chǎn)生的電信號關(guān)系如表2-1。表2-1 電動車行駛狀態(tài)和紅外對管產(chǎn)生的電信號關(guān)系(2)金屬探測模塊金屬探測模塊主要用于行駛軌跡中金屬片的探測??紤]到金屬一般都是導體,根據(jù)電磁場理論可知,在受到變化的電磁場作用的任何導體,都會產(chǎn)生電渦流。因此,在本系統(tǒng)中采用電感式接近開關(guān)實現(xiàn)對金屬片的檢測。電感式接近開關(guān)由LC高頻振蕩器和放大處理電路組成,金屬物體接近傳感器的振蕩感應頭時,物體內(nèi)部產(chǎn)生電渦流,當電渦流作用于接近開關(guān)時,接近開關(guān)振蕩能力衰減,內(nèi)部電路的參數(shù)發(fā)生變化,由此識別出有無金屬物體接近,進而控制開關(guān)的通和斷,并以電信號脈沖的形式送入單片機的PD7。電感式接開關(guān)內(nèi)部工作原理圖如圖2.3。圖2.3電感式接開關(guān)內(nèi)部工作原理圖 (3)電機驅(qū)動模塊L298是一個4通道邏輯驅(qū)動電路,既將邏輯控制電平進行功率放大,可以用于功率驅(qū)動的電壓。電機驅(qū)動模塊電路如圖2.4所示。圖2.4 電機驅(qū)動模塊電路PWM(脈沖寬度調(diào)制)控制,配用L298驅(qū)動電路實現(xiàn)直流電機的調(diào)速,非常簡單且調(diào)速范圍大,它利用的是直流斬波原理,假設(shè)高電平導通,在一個周期T內(nèi)導通時間為t,那么一個周期T內(nèi)的平均電壓,其中=稱為占空比。各周期內(nèi)不同的占空比示例如圖2.5。圖2.5 各周期內(nèi)不同的占空比示例電機的轉(zhuǎn)速與電機兩端的電壓成正比,而電機兩端的電壓與控制波形的占空比成正比,因此電機的速度與占空比成正比,占空比越大,電機轉(zhuǎn)得越快,當占空比時,電機轉(zhuǎn)速達到最大。3 程序設(shè)計主程序流程圖主要包括傳感器輸出中斷的查詢、電平的檢測和電機的響應等。主程序流程圖如圖3.1所示。圖3.1主程序流程圖4 功能測試通過測試,智能小車能按任意設(shè)定路線行駛,能實現(xiàn)以下功能:(1) 沿著直線軌跡行使。(2) 沿著S型設(shè)定軌跡行使。(3) 沿著任何設(shè)置的軌跡行使。(4) 小車行使到達軌跡終點時,自動停留5秒并發(fā)出聲光報警之后自動尋跡倒回行使到起點。(5) 沿軌跡行使過程中,檢測到障礙物時,自動停止5s,并發(fā)出聲光報警“請注意倒車”。4 小結(jié)項目設(shè)計中采用具有豐富資源的Atmega128單片機和光電傳感器、金屬傳感器、超聲波傳感器等,實現(xiàn)相應信號的檢測與小車的控制,系統(tǒng)結(jié)構(gòu)簡單、穩(wěn)定、具有較高的控制精度、抗干擾能力強,實現(xiàn)了智能小車能按任意軌跡行駛。五、成果創(chuàng)新點智能小車能檢測障礙物及其距離,并發(fā)出聲光報警 “請注意倒車” 信號,智能小車能沿任意設(shè)定軌跡行駛,具有實際應用價值和推廣價值。六、項目研究展望對智能尋跡小車的研究,加裝GPS(全球衛(wèi)星定位系統(tǒng))或加裝基于Internet的接口電路,智能尋跡小車將具有更廣泛的應用前景和使用價值,這也是我們以后的研究方向。附錄一:實物電路圖附件二:實物照片附錄三:程序清單/*This program was produced by theCodeWizardAVR V1.24.1d StandardAutomatic Program GeneratorCopyright 1998-2004 Pavel Haiduc, HP InfoTech s.r.l.http:/www.hpinfotech.roe-mail:officehpinfotech.roProject : LTPC-3500Version : 1.0Date : 2007-6-1Author : HNHYLEI Company : HNGXY Comments: Chip type : ATmega128LProgram type : ApplicationClock frequency : 8.000000 MHzMemory model : SmallExternal SRAM size : 0Data Stack size : 128*/#include <mega128.h>#include <stdio.h>#include <delay.h>#include <math.h>#include <spi.h>/-#define buzzer_led PORTB.0#define LED1 PORTD.0 #define LED2 PORTD.1 #define LED3 PORTD.2 #define LED4 PORTD.3 #define lpwm_ff PORTB.4 #define lpwm_re PORTA.4 #define rpwm_ff PORTB.7 #define rpwm_re PORTA.5 #define black_l PINE.2#define black_r PINE.3#define metal_detect PINF.0#define model PINF.2/- 液晶#define uchar unsigned char #define rs PORTA.7#define rw PORTB.5#define en PORTB.6#define ret PORTA.6/LCD數(shù)據(jù)數(shù)據(jù)口初始化 #define data PORTCuchar command,data1,data2,com0;uchar lcd_bufl,lcd_bufg;/定義顯示緩沖區(qū)/-/ Declare your global variables here/ This flag is set on USART0 Receiver buffer overflowbit left_run=0; /左走bit right_run=0; /右走bit left_ff=1; /左前進bit right_ff=1; /右前進 bit left_pwm; /用于左PWMbit right_pwm; /用于右PWM/-/-bit filter_start=0; /數(shù)字濾波bit filter_over=0; /數(shù)字濾波 bit black_l1=0; /左黑線1bit black_l2=0; /左黑線2bit black_r1=0; /右黑線1bit black_r2=0; /右黑線2 bit left_turn=0; /左轉(zhuǎn) bit right_turn=0; /右轉(zhuǎn)bit metal1=0; /金屬1bit metal2=0; /金屬2bit mode=0; /測試模式bit stop_point; /停車點bit buzzer=0; /蜂鳴bit lcd_dsp=0; /LCD刷新 bit read_over; /bit gradient_set=0; /bit stop_status=0; /unsigned char speed_l; /left速度控制量unsigned char speed_r; /right速度控制量unsigned char filter_count; /數(shù)字濾波 unsigned char excute_step1; /unsigned char excute_step2; /unsigned int bcd_temp0=0; /BCD 入口 /-unsigned char count1=0; /秒計時 unsigned char count2=0; /轉(zhuǎn)彎計時unsigned int count3=0; /停止時間計時 unsigned int count4=0; /unsigned int count5=0; / unsigned int stop_time=0; /停止時間 unsigned int gradient=0; / unsigned int gradient2=0; / unsigned int gradient_old; /unsigned int gradient2_temp18; / unsigned int filter_temp150; /數(shù)字濾波 unsigned long int filter_sum; unsigned int filter_temp3;/-unsigned char j1,k1; /公共循環(huán)變量unsigned char bcd_temp5=0; /BCD分解值/-unsigned int ahead_time=0; /前進時間 unsigned int back_time=0; /倒退時間 /EEPROM- /-void bcd_con(unsigned char numb);void clear_lcd();void lcd_int();void lcd_set();void display();void dis_code1(); void dis_code2(); void write_command(uchar command);void write_data(uchar data0); /- /-/ External Interrupt 0 service routine interrupt EXT_INT0 void ext_int0_isr(void)/ Place your code here / External Interrupt 4 service routine interrupt EXT_INT4 void ext_int4_isr(void) TCNT3H=0x00; TCNT3L=0x00;/ External Interrupt 5 service routine interrupt EXT_INT5 void ext_int5_isr(void) if(filter_start=0) filter_temp1filter_count=(unsigned int)TCNT3H*0xff+(unsigned int)TCNT3L; filter_count+;if(filter_count=50) /60 filter_count=0; filter_start=1; if(filter_over=1)filter_over=0;gradient=filter_temp3; read_over=1; /-/ Timer 0 overflow interrupt service routineinterrupt TIM0_OVF void timer0_ovf_isr(void)/TCNT0=0x06;left_pwm=left_pwm;if(left_pwm=1) if(left_turn=1) TCNT0=255-(speed_l/2); else TCNT0=255-speed_l; else if(left_turn=1) TCNT0=speed_l/2; else TCNT0=speed_l; if(left_run=1) if(left_pwm=1) if(left_ff=1) lpwm_ff=1; lpwm_re=0; else lpwm_ff=0; lpwm_re=1; else lpwm_ff=0; lpwm_re=0; else lpwm_ff=0; lpwm_re=0; /-/ Timer 1 overflow interrupt service routine interrupt TIM1_OVF void timer1_ovf_isr(void)/ Place your code hereTCNT1H=0xff; TCNT1L=0x06; /-前進時間 if(+count1>=128) count1=0; if(excute_step1=0&&excute_step2!=2) ahead_time+; if(excute_step1=2) back_time+; lcd_dsp=1; /- if(mode=1&&ahead_time<8) gradient2_temp1ahead_time=gradient; /-if(stop_point=1) /停車計時 if(+count3>=128) count3=0; stop_time+; lcd_dsp=1; if( buzzer=1) buzzer_led=buzzer_led; LED1=LED1; LED2=LED2; LED3=LED3; LED4=LED4; else buzzer_led=1; LED1=1; LED2=1; LED3=1; LED4=1; if(stop_time=5) stop_point=0; buzzer_led=1; /- 檢線停止if(mode=1)if(stop_status=0) if(+count4>=35) count4=0; stop_status=1; if(stop_status=1) if(+count4>=200) count4=0; stop_status=0; /- if(black_l=0) /左循跡 if(black_l1=1) black_l2=1; black_l1=1; else black_l1=0; black_l2=0; right_turn=0; count2=0; if( black_l2=1&&right_turn=0) right_turn=1; if(right_turn=1) if(+count2=150) count2=0; right_turn=0; /- if(black_r=0) /右循跡 if(black_r1=1) black_r2=1; black_r1=1; else black_r1=0; black_r2=0; count2=0; left_turn=0; if( black_r2=1&&left_turn=0) left_turn=1; if(left_turn=1) if(+count2=150) count2=0; left_turn=0; /- /金屬傳感器 if(metal_detect=0) if(metal1=1) metal2=1; metal1=1; else metal1=0; metal2=0; /-/ Timer 2 overflow interrupt service routine interrupt TIM2_OVF void timer2_ovf_isr(void)/ TCNT2=0xaf;right_pwm=right_pwm;if(right_pwm=1) if(right_turn=1) TCNT2=255-speed_r/2; else TCNT2=255-speed_r; else if(right_turn=1) TCNT2=speed_r/2; else TCNT2=speed_r; if(right_run=1) if(right_pwm=1) if(right_ff=1) rpwm_ff=1; rpwm_re=0; else rpwm_ff=0; rpwm_re=1; else rpwm_ff=0; rpwm_re=0; else rpwm_ff=0; rpwm_re=0; /- / Timer 3 overflow interrupt service routine interrupt TIM3_OVF void timer3_ovf_isr(void)/ Place your code here/TCNT3H=0xff; / 液晶 /LCD初始化void lcd_int(void) ret=0; /PORTG=PORTG&0b11110111; delay_ms(2); ret=1; /PORTG=PORTG|0b00001000; delay_us(1); /psb=1;/將PSB置1,通信方式為8BIT數(shù)據(jù)并口 delay_us(1);/LCD功能設(shè)置void lcd_set(void) command=0x34;/功能設(shè)置-8BIT控制界面,擴充指令集-這個可去掉 write_command(command); command=0x30;/功能設(shè)置-8BIT控制界面,基本指令集 write_command(command); command=0x01;/清屏幕顯示,將DDRAM的地址計數(shù)器歸零 write_command(command); command=0x06;/DDRAM的地址計數(shù)器(AC)加1 write_command(command); command=0x0c;/顯示打開,光標關(guān),反白顯示關(guān) write_command(command); /清屏程序void clear_lcd(void) command=0x01; write_command(command); command=0x34; write_command(command); command=0x30; write_command(command); /寫指令程序void write_command(uchar command) delay_ms(5); rs=0; rw=0; data=command; en=1; delay_us(2); en=0;/寫數(shù)據(jù)程序void write_data(uchar data0) delay_ms(5); rs=1; rw=0; data=data0; en=1; delay_us(2); en=0; /LCD顯示程序void display(void) command=com0; write_command(command); data2=lcd_bufl; data1=lcd_bufg; write_data(data1); data1=data2; write_data(data1); /-void bcd_con(unsigned char numb) if(numb=5)goto numb5; if(numb=4)goto numb4; if(numb=3)goto numb3; if(numb=2)goto numb2;numb5: bcd_temp4=bcd_temp0/10000; bcd_temp0=bcd_temp0%10000;numb4: bcd_temp3=bcd_temp0/1000; bcd_temp0=bcd_temp0%1000;numb3: bcd_temp2=bcd_temp0/100; bcd_temp0=bcd_temp0%100;numb2: bcd_temp1=bcd_temp0/10; bcd_temp0=bcd_temp0%10; /-void digit_filter(void)/unsigned char filter_temp4;unsigned int filter_temp2; for(j1=0;j1<29;j1+) /58 for(k1=j1+1;k1<30;k1+) /59 if(filter_temp1j1>filter_temp1k1) filter_temp2=filter_temp1j1; filter_temp1j1=filter_temp1k1; filter_temp1k1=filter_temp2; filter_sum=0; for(j1=10;j1<20;j1+) /49 filter_sum=filter_sum+filter_temp1j1; filter_temp3=filter_sum/10; filter_over=1; filter_start=0;/-/全角顯示/顯示代碼區(qū)void dis_code1(void) com0=0x81; /衡 lcd_bufl=0xe2; lcd_bufg=0xba; display(); com0=0x82; /陽 lcd_bufl=0xf4; lcd_bufg=0xd1; display(); com0=0x83; /市 lcd_bufl=0xd0; lcd_bufg=0xca; display(); com0=0x84; /第 lcd_bufl=0xda; lcd_bufg=0xb5; display(); com0=0x85; /三 lcd_bufl=0xfd; lcd_bufg=0xc8; display(); com0=0x86; /屆 lcd_bufl=0xec; lcd_bufg=0xbd; display(); com0=0x93; /大 lcd_bufl=0xf3; lcd_bufg=0xb4; display(); com0=0x94; /學 lcd_bufl=0xa7; lcd_bufg=0xd1; display(); com0=0x95; /生 lcd_bufl=0xfa; lcd_bufg=0xc9; display(); com0=0x89; /科 lcd_bufl=0xc6; lcd_bufg=0xbf; display(); com0=0x8A; /技 lcd_bufl=0xbc; lcd_bufg=0xbc; display(); com0=0x8B; /創(chuàng) lcd_bufl=0xb4; lcd_bufg=0xb4; display(); com0=0x8C; /新 lcd_bufl=0xc2; lcd_bufg=0xd0; display(); com0=0x8D; /競 lcd_bufl=0xf3; lcd_bufg=0xb4; display(); com0=0x8E; /賽 lcd_bufl=0xfc; lcd_bufg=0xc8; display(); / void dis_code2(void) com0=0x80; /前 lcd_bufl=0xb0; lcd_bufg=0xc7; display(); com0=0x81; /進 lcd_bufl=0xf8; lcd_bufg=0xbd; display(); com0=0x82; /時 lcd_bufl=0xb1; lcd_bufg=0xca; display(); com0=0x83; /間 lcd_bufl=0xe4; lcd_bufg=0xbc; display(); com0=0x84; /全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x90; /停 lcd_bufl=0xa3; lcd_bufg=0xcd; display(); com0=0x91; /止 lcd_bufl=0xb9; lcd_bufg=0xd6; display(); com0=0x92; /時 lcd_bufl=0xb1; lcd_bufg=0xca; display(); com0=0x93; /間 lcd_bufl=0xe4; lcd_bufg=0xbc; display(); com0=0x94; /全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x88; /倒 lcd_bufl=0xb9; lcd_bufg=0xb5; display(); com0=0x89; /退 lcd_bufl=0xcb; lcd_bufg=0xcd; display(); com0=0x8a; /時 lcd_bufl=0xb1; lcd_bufg=0xca; display(); com0=0x8b; /間 lcd_bufl=0xe4; lcd_bufg=0xbc; display(); com0=0x8c; /全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); com0=0x98; /傾 lcd_bufl=0xe3; lcd_bufg=0xc7; display(); com0=0x99; /斜 lcd_bufl=0xb1; lcd_bufg=0xd0; display(); com0=0x9a; /脈 lcd_bufl=0xf6; lcd_bufg=0xc2; display(); com0=0x9b; /寬 lcd_bufl=0xed; lcd_bufg=0xbf; display(); com0=0x9c; /全角 : lcd_bufl=0xba; lcd_bufg=0xa3; display(); /- /- void dis_code3(void) bcd_temp0=ahead_time; bcd_con(4); if(mode=0) com0=0x85; else com0=0x95; lcd_bufl=bcd_temp2+0x30;