




已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
大家好!我是威虎小熊,QQ 271818587 。 下面這個就是我最近做的數(shù)字收音機+溫度+時間+液晶顯示+紅外遙控=功放顯示系統(tǒng),(初稿,后續(xù)會完善其他功能),希望能和大家一起分享(哈哈)。 功能說明:1.1602液晶顯示 (時間.溫度,收音機頻率) 2.紅外遙控 (mini紅外遙控器) 3.溫度檢測 (ds18b20)4.時間顯示 (ds1302)5.收音機 (TEA5767 無線功放)電路圖:PDF 圖,DXP原圖請到下載 http:/52/電路圖/功放顯示 下載。PCB圖,用處不大,在此貼上,威虎科技集團是我將來的公司名字 ,呵呵PCB打樣成品:5cm*3.5cm 非常小巧,很容易嵌入其他東西, 需要的朋友可以找我聯(lián)系 ,我去打樣的成本8元一片,不過快遞運費自付。(好像不劃算哦)Pcb資源:見上圖,很多吧, 除了現(xiàn)在已經(jīng)調(diào)試的功能外,還可以做315M/2.4G無線遙控AD采集,DA控制,LCD數(shù)碼管口可以用作與其他器件的嵌入通訊。好了,該上程序了。 +后面內(nèi)容為TEXT1.C中內(nèi)容+#includereg52.h#include#include#include#include#include#define uint unsigned int#define uchar unsigned charuint key,nt,t05s,t2s;void io_init(void);void int_init(void); void InitTimer0(void);show_time(uint wei) /wei=02345 年月日時分 2012/06/15 05:15 uint datime,wei2; datime = BCD_Decimal(read_1302(0x80+(13-2*wei); /0x80+12-2n if(datime=85) datime = BCD_Decimal(read_1302(0x80+(13-2*wei); /如果是擾碼,再讀取一次。 wei2=wei; if(wei2=0)wei2=1; /方便后面操作,無其他意義if(wei2=6) if(datime%2=0)DisplayOneChar(13, 1,0xfe); /判斷是否是秒位-偶數(shù)秒空白 else DisplayOneChar(13, 1,:); /奇數(shù)秒顯示冒號 ,閃動效果 DisplayOneChar(wei2*3-1, 1,0x30+datime/10); DisplayOneChar(wei2*3, 1,0x30+datime%10); if(wei5) /更新時間后存儲方便修改時間時調(diào)用 stimewei*2+2=datime/10; stimewei*2+3=datime%10; show_temp() DisplayOneChar(11, 2, 0x30+tvalue/100);DisplayOneChar(12, 2, 0x30+tvalue%100/10);DisplayOneChar(14, 2, 0x30+tvalue%10); void main(void) P1=0X00;YK=1; Delay400Ms(); /啟動等待,等LCM講入工作狀態(tài) LCMInit(); /LCM初始化 Delay400Ms(); Delay400Ms(); DisplayListChar(0, 1,wel1); /位,行,數(shù)據(jù) DisplayListChar(0, 2,wel2); Delay400Ms();Delay400Ms();Delay400Ms();Delay400Ms(); DisplayListChar(0, 1, line1); /位,行,數(shù)據(jù) DisplayListChar(0, 2, line2);/ds1302_init(); /只需要一次運行 。 int_init(); /遙控中斷初始化 InitTimer0(); /定時器初始化 write_1302(0x90,0x01); / 充電while(1)if(ET0=0)if(numkey10)timewei=1; /*定時器中斷*/ void InitTimer0() TMOD = 0x01; TH0 = 0x3C; TL0 = 0x0B0; EA = 1; ET0 = 1; TR0 = 1; /*定時器服務(wù)程序_50ms*/ void Timer0Interrupt(void) interrupt 1 TH0 = 0x3C; TL0 = 0x0B0;t2s+; nt+; if(nt=0) nt=0; show_time(6); /秒 if(datime=0)show_time(5); /分 show_time(4); /時 show_time(3); /月 show_time(2); /月 show_time(0); /年 if(t2s=5)show_temp();ds1820rst(); ds1820wr(0xcc);/*跳過讀序列號ds1820wr(0x44);/*啟動溫度轉(zhuǎn)換if(t2s=20)t2s=0;read_temp(); +后面為+#includereg52.h/sbit LCM_RW=P20; /定義引腳 接地sbit LCM_RS=P35;sbit LCM_E=P36;sbit LCM_Data=P37; /595數(shù)據(jù)端,LCD由595控制/#define Busy 0x80 /用于檢測LCM狀態(tài)字中的Busy標識sbit HC595RCK=P20; /595更新數(shù)據(jù)sbit HC595CLK=P21; /SCLK 移位數(shù)據(jù)#define uint unsigned int#define uchar unsigned charvoid WriteDataLCM(unsigned char WDLCM);void WriteCommandLCM(unsigned char WCLCM,BuysC);unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);void LCMInit(void);void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);void Delay5Ms(void);void Delay400Ms(void);unsigned char code wel1 = T C 5 2 0 ;unsigned char code wel2 = Loading. ;unsigned char code line1 = 2012/06/15 09:52;unsigned char code line2 = FM:108.0 T:26.8C;unsigned char code L1 = 20 / / : ;void Wlcd595(uchar dat595 ) unsigned char nt; HC595CLK=0;HC595RCK=0;for(nt=8;nt0;nt-)LCM_Data=(dat595&0x80);dat595=1;HC595CLK=0; HC595CLK=1;HC595CLK=1;HC595CLK=1;HC595CLK=0; HC595RCK=1; /更新輸出HC595RCK=1;HC595RCK=0;/寫數(shù)據(jù)void WriteDataLCM(unsigned char WDLCM) Wlcd595(WDLCM); LCM_RS=1; LCM_E = 0; /若晶振速度太高可以在這后加小的延時 LCM_E = 0; /延時 LCM_E = 0; LCM_E = 1;/寫指令void WriteComLCM(unsigned char WCLCM ) /BuysC為0時忽略忙檢測 Wlcd595(WCLCM); LCM_RS = 0; LCM_E = 0; LCM_E = 0; LCM_E = 1; void LCMInit(void) /LCM初始化 LCM_Data = 0; Delay5Ms(); WriteComLCM(0x38); /三次顯示模式設(shè)置,不檢測忙信號 Delay5Ms(); WriteComLCM(0x38); Delay5Ms(); WriteComLCM(0x38); Delay5Ms(); Delay5Ms(); WriteComLCM(0x38); /顯示模式設(shè)置,開始要求每次檢測忙信號 Delay5Ms(); WriteComLCM(0x08); /關(guān)閉顯示 Delay5Ms(); WriteComLCM(0x01); /顯示清屏 Delay5Ms(); WriteComLCM(0x06); / 顯示光標移動設(shè)置 Delay5Ms(); WriteComLCM(0x0c); / 顯示開及光標設(shè)置 0x0c Delay5Ms(); Delay5Ms(); /按指定位置顯示一個字符void DisplayOneChar(uchar X, uchar Y, uchar DDat) if(Y=1)X=0x80+X; if(Y=2)X=0xc0+X; /*Y &= 0x1; X &= 0xF; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40; X |= 0x80; / 算出指令碼*/ WriteComLCM(X); /這里不檢測忙信號,發(fā)送地址碼 WriteDataLCM(DDat);/按指定位置顯示一串字符void DisplayListChar(uchar X, uchar Y, uchar code *DData)if(Y=1) X=0x80+X; else X=0xc0+X; WriteComLCM(X); while (*DData!=0)WriteDataLCM(*DData+);/5ms延時void Delay5Ms(void) unsigned int TempCyc = 5552; while(TempCyc-);/400ms延時void Delay400Ms(void) unsigned char TempCycA = 5; unsigned int TempCycB; while(TempCycA-) TempCycB=7269; while(TempCycB-); ; +DS1302內(nèi)容+#ifndef _ds1302_H#define _ds1302_H/#include#include#define uint unsigned int#define uchar unsigned charuchar a,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp;/flag用于讀取頭文件中的溫度值,和顯示溫度值/DS1302時鐘芯片與C51之間的引腳連接定義sbit IO=P16;sbit SCLK=P15;sbit RST=P17;sbit ACC0=ACC0;sbit ACC7=ACC7; uint datime; void write_byte(uchar dat)/寫一個字節(jié)ACC=dat;RST=1;for(a=8;a0;a-)IO=ACC0;SCLK=0; _nop_();_nop_();SCLK=1; _nop_();_nop_();ACC=ACC1; _nop_();_nop_();uchar read_byte()/讀一個字節(jié)RST=1;for(a=8;a0;a-)ACC7=IO;SCLK=1;_nop_();_nop_();_nop_();SCLK=0;_nop_();_nop_();_nop_();ACC=ACC1; return (ACC);/-void write_1302(uchar add,uchar dat)/向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)RST=0; _nop_();SCLK=0;_nop_();RST=1; _nop_();write_byte(add);write_byte(dat);SCLK=1; _nop_();RST=0;_nop_();uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來源地址uchar temp;RST=0; _nop_(); SCLK=0;_nop_();RST=1;_nop_();write_byte(add);temp=read_byte();SCLK=1; _nop_();RST=0; _nop_(); return(temp);uchar BCD_Decimal(uchar bcd)/BCD碼轉(zhuǎn)十進制函數(shù),輸入BCD,返回十進制 uchar Decimal; Decimal=bcd4; return(Decimal=Decimal*10+(bcd&=0x0F);/-void ds1302_init() /1302芯片初始化子函數(shù)(2012-06-01,00:00:00)RST=0;SCLK=0; write_1302(0x8e,0x00); /允許寫,禁止寫保護 write_1302(0x80,0x0); /向DS1302內(nèi)寫秒寄存器80H寫入初始秒數(shù)據(jù)write_1302(0x82,0x0);/向DS1302內(nèi)寫分寄存器82H寫入初始分數(shù)據(jù)write_1302(0x84,0x0);/向DS1302內(nèi)寫小時寄存器84H寫入初始小時數(shù)據(jù)write_1302(0x8a,0x6);/向DS1302內(nèi)寫周寄存器8aH寫入初始周數(shù)據(jù)write_1302(0x86,0x01);/向DS1302內(nèi)寫日期寄存器86H寫入初始日期數(shù)據(jù)write_1302(0x88,0x06);/向DS1302內(nèi)寫月份寄存器88H寫入初始月份數(shù)據(jù)write_1302(0x8c,0x12);/向DS1302內(nèi)寫年份寄存器8cH寫入初始年份數(shù)據(jù)write_1302(0x8e,0x80); /打開寫保護 #endif +以下為TEA5767內(nèi)容+#ifndef _tea5767_H#define _tea5767_H#include /#include lcd1602.h#include #define max_freq 108000#define min_freq 80000unsigned int max_pll=0x339b; /108MHz時的pll,unsigned int min_pll=0x2644; /87.5MHz時的pll.299d 80MHZ2264unsigned char radio_write_data5=0x29,0xc2,0x40,0x11,0x40; /要寫入TEA5767的數(shù)據(jù)0x2a,0xb6,0x40,0x11,0x40unsigned char radio_read_data5; /TEA5767讀出的狀態(tài) /20 11 00unsigned long frequency,fm;unsigned int pll; /*顯示頻率*/void showfm()if(frequency/100000=1)DisplayOneChar(3,2,0x31);else DisplayOneChar(3,2, );DisplayOneChar(4,2,(frequency%100000)/10000+0x30); DisplayOneChar(5,2,(frequency%100000)%10000)/1000+0x30);DisplayOneChar(6,2,.);DisplayOneChar(7,2,(frequency%100000)%10000)%1000)/100+0x30); void radio_write(void) unsigned char i; iic_start(); iic_write8bit(0xc0); /TEA5767寫地址 if(!iic_testack() for(i=0;i5;i+) iic_write8bit(radio_write_datai); iic_ack(); iic_stop(); /由頻率計算PLLvoid get_pll(void) unsigned char hlsi; / unsigned int twpll=0; hlsi=radio_write_data2&0x10; /HLSI位 if (hlsi) pll=(unsigned int)(float)(frequency+225)*4)/(float)32.768); /頻率單位:k else pll=(unsigned int)(float)(frequency-225)*4)/(float)32.768); /頻率單位:k/由PLL計算頻率void get_frequency(void) unsigned char hlsi; unsigned int npll=0; npll=pll; hlsi=radio_write_data2&0x10; if (hlsi) frequency=(unsigned long)(float)(npll)*(float)8.192-225); /頻率單位:KHz else frequency=(unsigned long)(float)(npll)*(float)8.192+225); /頻率單位:KHz/讀TEA5767狀態(tài),并轉(zhuǎn)換成頻率void radio_read(void) unsigned char i; unsigned char temp_l,temp_h; pll=0; iic_start(); iic_write8bit(0xc1); /TEA5767讀地址 if(!iic_testack() for(i=0;imax_freq) frequency=min_freq; else frequency-=25; if(frequencymax_freq) frequency=min_freq; else radio_write_data2=0x20; /41 frequency-=40; if(frequencymin_freq) frequency=max_freq; get_pll(); radio_write_data0=pll/256+0x40; /加0x40是將SM置為1 為自動搜索模式 radio_write_data1=pll%256; radio_write_data3=0x11; /SSL1和SSL0控制搜索停止條件 radio_write_data4=0x40; radio_write(); radio_read(); while(!(radio_read_data0&0x80) /搜臺成功標志 radio_read(); #endif+ykong.h 的內(nèi)容+#ifndef _ykong_H#define _ykong_H#include#include#define uint unsigned int#define uchar unsigned charuint key,rkey,numkey;uchar RIGHT=0, LEFT=0; uchar timewei=1;sbit YK=P32; uchar stime11=0,1,2,0,6,1,5,2,3,5,7;/年月日時分各2位 /數(shù)據(jù)存放位置 無 年 月 日 時 分 void showkey() /*DisplayOneChar(0,2,0x30+key/10);DisplayOneChar(1,2,0x30+key%10); */ showsstime() WriteComLCM(0x0f); /0x0c不顯示光標,0e光標顯示,0d光標閃動 DisplayListChar(0, 2, *TIME SET* ); DisplayListChar(1, 1, 0); if(ET0=1) DisplayListChar(0, 2, line2); / 設(shè)置完畢后恢復(fù)顯示; DisplayListChar(0, 1, L1); / 設(shè)置完畢后恢復(fù)顯示; showfm(); /恢復(fù)顯示頻率 WriteComLCM(0x0C); /關(guān)光標 ,恢復(fù)顯示。 write_1302(0x8e,0x00); /允許寫,禁止寫保護 if(timewei9)write_1302(0x82,stime9*16+stime10);/分鐘數(shù)據(jù)if(timewei7)write_1302(0x84,stime7*16+stime8);/小時數(shù)據(jù)if(timewei5)write_1302(0x86,stime5*16+stime6);/日期數(shù)據(jù)if(timewei3)write_1302(0x88,stime3*16+stime4);/月份數(shù)據(jù)if(timewei1)write_1302(0x8c,stime1*16+stime2);/年份數(shù)據(jù) write_1302(0x8e,0x80); /打開寫保護 timewei=1; void pkey()if(rkey!=key) switch(key) case 70 : ET0=ET0;showsstime();break; / mode /進入和退出時間設(shè)置 case 64 :LEFT=1;search(0);showfm();break; / 向上微調(diào)FM case 21 : auto_search(0); showfm();break; / -自動向下搜臺 case 9 : auto_search(1); showfm();break; / +自動向上搜臺 case 68 : showfm();break; / | case 7 : if(ET0=0)ds1302_init(); break; / EQ/在時間設(shè)置狀態(tài)時初始化1302 case 22 :numkey=0;break;/0 case 12 :numkey=1;break;/1 case 24 :numkey=2; break;/2 case 94 :numkey=3;break;/3 case 8 :numkey=4;break;/4 case 28 :numkey=5;break;/5 case 90 :numkey=6;break;/6 case 66 : numkey=7;break;/7 case 82 :numkey=8;break;/8 case 74 :numkey=9; break;/9 ; /*遙控中斷*/void int_init(void)EX0=1; EA=1;/*遙控服務(wù)程序*/void interrupt0()interrupt 0 uchar i3=0,j3=0,k3=0,us=0;uchar addr4=0;EX0=0; for(i3=0;i3255;i3+) /9ms內(nèi)有高電平認為是干擾 if(YK) /255的值實際時間為800usEX0=1;return;while(!(YK);/等待9ms低電平過去 for(i3=0;i34;i3+)for(j3=0;j38;j3+)while(YK);/等待4.5ms高電平過去while(!(YK);/等待0.56ms低電平后面的高電平while(YK)/計算這個高電平的時間for(us=0;us=30)/高電平時間過長退出程序 EX0=1;return;addri3=addri31;/接收一位數(shù)據(jù)if(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)低年級學(xué)生良好生活習(xí)慣養(yǎng)成與學(xué)校心理健康教育創(chuàng)新實踐研究論文
- 中國醫(yī)藥級氧化鎂行業(yè)市場前景預(yù)測及投資價值評估分析報告
- 節(jié)水措施與管理制度
- 關(guān)于房屋貸款保證保險合同糾紛的若干法律問題探討
- 視頻監(jiān)控升級改造設(shè)計方案
- 建筑施工特種作業(yè)-建筑焊工真題庫-7
- 入學(xué)面試常識題目及答案
- 2023-2024學(xué)年陜西省漢中市高二下學(xué)期7月期末數(shù)學(xué)試題(解析版)
- 2024-2025學(xué)年山西省太原市高二上學(xué)期期末考試語文試題(解析版)
- 2025年秋三年級上冊語文同步教案 習(xí)作:寫日記
- 電子物證專業(yè)考試復(fù)習(xí)題庫(含答案)
- 國家開放大學(xué)02150-計算機網(wǎng)絡(luò)(本)期末復(fù)習(xí)題及參考答案
- 廣西2022年廣西農(nóng)村信用社(農(nóng)村商業(yè)銀行農(nóng)村合作銀行)管理人員及業(yè)務(wù)骨干招聘考試參考題庫含答案詳解
- 國開2023年春《理工英語3》機考網(wǎng)考期末復(fù)習(xí)資料參考答案
- 2023年考研英語大綱樣題
- 重慶.住宅物業(yè)單位服務(wù)等級標準
- 全國工會財務(wù)知識競賽題庫附答案
- CIE-15-2004-Colorimetry原版完整文件
- 四年級下聰明小屋
- 植物精油提取工藝技術(shù)
- 【企業(yè)薪酬管理研究國內(nèi)外文獻綜述4400字】
評論
0/150
提交評論