欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

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

QQ登錄

只需一步,快速開始

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

STC12C5A60S2+DS1302+DS18B20+ADC+PWM(單片機(jī)程序開源)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:61140 發(fā)表于 2022-5-17 23:04 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
以下是部分程序,需要完整程序請(qǐng)下載附件

制作出來(lái)的實(shí)物圖如下:


單片機(jī)源程序如下:

//**************************************************************
//【本程序使用STC12C5A60S2單片機(jī)和12M晶振,外掛DS1302和DS18B20】
//【本程序集成時(shí)間顯示,溫度顯示,ADC電壓顯示,8位PWM輸出功能】
//**************************************************************
//【對(duì)于學(xué)習(xí)單片機(jī)的新手來(lái)說(shuō),此程序看一下然后慢慢理解】
//【對(duì)于老手來(lái)說(shuō)可以路過(guò)】
//**************************************************************
//【程序中使用經(jīng)典寫法保證DS1302走時(shí)穩(wěn)定和DS18B20顯示精度】
//【程序中也使用一些非經(jīng)典寫法,使ADC非查詢方式也非中斷方式】
//【保證ADC采樣速度的同時(shí)也保證穩(wěn)定性(在相應(yīng)的ADC端口要接30PF
//左右的電容保證采樣穩(wěn)定性)】
//【本程序可以ADC和PWM單獨(dú)使用,也可以ADC控制PWM做相應(yīng)輸出】
//【ADC采樣引腳:P1.0,PWM輸出P1.3】
//****************************************************************
//【LCD1602的數(shù)據(jù)線】
//****************************************************************  
//            RS=P2^6;                //模式位,低電平輸入指令,高電平輸入數(shù)據(jù)
//            RW=P2^5;                //讀寫位,低電平讀,高電平寫
//            E =P2^7;                //LCD12864使能位,低電平無(wú)效,高電平使能
//****************************************************************
//【DS1302的數(shù)據(jù)線】
//****************************************************************
//            CLK=P3^6;               //DS1302的時(shí)鐘信號(hào)線   
//            IO =P3^4;               //DS1302的數(shù)據(jù)端口線
//            RST=P3^5;               //DS1302的片選信號(hào)線
//***************************************************************
//【程序編寫于2022年5月17日深夜】
//***************************************************************
#include<STC12C5A60S2.h>                          //載入單片機(jī)頭文件
#include<intrins.h>                                          //載入編程規(guī)則文件
#include<lcd1602cl.h>                                  //載入LCD1602文件
#include<ds1302cl.h>                                  //載入DS1302文件
#include<ds18b20cl.h>                                  //載入DS18B20文件
unsigned int result,ge,shifen,baifen;
unsigned char seg[10]={'0','1','2','3','4','5','6','7','8','9'};//要顯示字符

bit  flag1 =0;
bit  flag2 =0;
bit  flag3 =0;
//****************************************************************
//【顯示界面子程序】
//****************************************************************
//void Displayqt(void)                                
//{

// LCDTestWord(0,0x80);
// LCDSendWord("LOVE LIFE! ");
// }

void DisplayHour(void)                 //往LCD上填寫小時(shí)數(shù)據(jù)
{
hour=ReadDs1302(0x85);                                   //讀小時(shí)數(shù)據(jù)
LCDTestWord(0,0x80);                                   //在80位置顯示小時(shí)數(shù)據(jù)
LCDTestWord(1,(hour/16)+0x30);
LCDTestWord(1,hour%16+0x30);
LCDTestWord(0,0x82);                                   //在82位置顯示":"
LCDTestWord(1,(0x3a));
}

void DisplayMin(void)                  //往LCD上填寫分鐘數(shù)據(jù)   
{
min=ReadDs1302(0x83);                                   //讀分鐘數(shù)據(jù)
LCDTestWord(0,0x83);                                   //在83位置顯示分鐘數(shù)據(jù)
LCDTestWord(1,(min/16)+0x30);
LCDTestWord(1,min%16+0x30);
LCDTestWord(0,0x85);                                   //在85位置顯示":"
LCDTestWord(1,0x3a);
}

void DisplaySec(void)                  //往LCD上填寫秒鐘數(shù)據(jù)
{
unsigned char i=0;
unsigned int a=0,b=0,c=0;
sec=ReadDs1302(0x81);                                   //讀秒鐘數(shù)據(jù)
LCDTestWord(0,0x86);                                   //在86位置顯示秒數(shù)據(jù)
LCDTestWord(1,(sec/16)+0x30);
LCDTestWord(1,sec%16+0x30);
LCDTestWord(0,0x88);                                   //寫三個(gè)空格,把空的部分占掉以免亂碼
LCDSendWord(" ");
}

void DisplayTemp(void)                                   //往LCD上填寫溫度數(shù)據(jù)
{
unsigned int i;                                           //定義i
unsigned char a,b,c;                                   //定義a,b,c
LCDTestWord(0,0x8b);                                   //從8b位置開始寫入
TempChange();
i=GetTemp();                                                   //i等于讀出來(lái)的溫度值
a=i/100;                                                           //溫度十位
LCDTestWord(1,a+0x30);
b=i/10-a*10;                                                   //溫度個(gè)位
LCDTestWord(1,b+0x30);
LCDTestWord(1,0x2e);                                   //寫入小數(shù)點(diǎn)
c=i-a*100-b*10;                                           //溫度小數(shù)位
LCDTestWord(1,c+0x30);
LCDSendWord("C");                                           //寫入字母"C"
}

void Displayvoltage(void)              //往LCD上填寫電壓數(shù)據(jù)
{                                                                           //ADC轉(zhuǎn)換結(jié)果
unsigned int temp;
temp=ADC_RES;
result=temp*0.01953125*1000;
ge=result/1000;                                                   //個(gè)位結(jié)果
shifen=result%1000/100;                                   //十分位結(jié)果
baifen=result%100/10;                                   //百分位結(jié)果
ADC_CONTR = 0xc8;                      //開啟轉(zhuǎn)換

LCDTestWord(0,0xC0);                                   //從80位置開始顯示
LCDSendWord("       ");
LCDTestWord(0,0xC8);                                   //從86位置開始顯示
LCDSendWord("A");                                           //寫入字母"A"                                   
LCDSendWord("D");                                           //寫入字母"D"
DelayMs(20);
LCDTestWord(1,0x3a);
LCDTestWord(1,seg[ge]);
LCDTestWord(1,0x2e);
LCDTestWord(1,seg[shifen]);
LCDTestWord(1,seg[baifen]);
LCDSendWord("V");                                            //寫入字母"V"
  }
//****************************************************************
//【顯示指定內(nèi)容程序】
//****************************************************************
void  Displayxs(void)
{
           DisplayHour();                                           //顯示小時(shí)數(shù)據(jù)
        DisplayMin();                                           //顯示分鐘數(shù)據(jù)
        DisplaySec();                                           //顯示秒鐘數(shù)據(jù)
        DisplayTemp();                                           //顯示溫度數(shù)據(jù)
        Displayvoltage();                                   //顯示ADC采樣電壓值
}

//****************************************************************
//【延時(shí)部分子程序】
//****************************************************************
void DelayMs(unsigned int a)           //延時(shí) 1MS/次
{
unsigned char i;
while(--a!=0)
{
  for(i=0;i<125;i++)
  ;
}
}

void Delay(unsigned char num)               
{

unsigned char i;
_nop_();
while(num--)
i=num;
;
}        


此程序已完美驗(yàn)證,注意本程序使用12M晶振,22.1184M晶振容易導(dǎo)致DS18B20不顯示溫度,那個(gè)延時(shí)太難調(diào)了.
Keil5代碼下載: LCD1602ADCPWM.rar (47.96 KB, 下載次數(shù): 414)

評(píng)分

參與人數(shù) 2黑幣 +80 收起 理由
QJM198972 + 30 贊一個(gè)!
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏27 分享淘帖 頂7 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1024371 發(fā)表于 2022-5-18 13:40 | 只看該作者
好資料,必須支持開源,
回復(fù)

使用道具 舉報(bào)

板凳
ID:32289 發(fā)表于 2022-5-18 21:19 | 只看該作者
學(xué)了N年的單片機(jī),硬是沒(méi)有入門,只有仿制了。
回復(fù)

使用道具 舉報(bào)

地板
ID:61140 發(fā)表于 2022-5-18 23:16 | 只看該作者
rrqxx 發(fā)表于 2022-5-18 21:19
學(xué)了N年的單片機(jī),硬是沒(méi)有入門,只有仿制了。

仿制也是一種學(xué)習(xí)的方法,適當(dāng)?shù)臅r(shí)候仿制比課本上學(xué)的還快些.
回復(fù)

使用道具 舉報(bào)

5#
ID:305762 發(fā)表于 2022-5-19 07:59 | 只看該作者

好資料,必須支持開源
回復(fù)

使用道具 舉報(bào)

6#
ID:921339 發(fā)表于 2022-5-19 08:34 | 只看該作者
下載,學(xué)習(xí)了,值得借簽
回復(fù)

使用道具 舉報(bào)

7#
ID:242300 發(fā)表于 2022-5-19 21:13 | 只看該作者
好資料,支持開源
回復(fù)

使用道具 舉報(bào)

8#
ID:67312 發(fā)表于 2022-5-20 09:23 | 只看該作者
收藏了,暫時(shí)還看不懂
回復(fù)

使用道具 舉報(bào)

9#
ID:443637 發(fā)表于 2022-5-20 13:47 | 只看該作者
學(xué)習(xí)了,值得借簽
回復(fù)

使用道具 舉報(bào)

10#
ID:230742 發(fā)表于 2022-5-20 14:22 | 只看該作者
弱弱的問(wèn)一下,這個(gè)是可以調(diào)整時(shí)間的嗎?
回復(fù)

使用道具 舉報(bào)

11#
ID:61140 發(fā)表于 2022-5-20 15:58 | 只看該作者
本帖最后由 xiaoyuxinke 于 2022-5-21 08:37 編輯
啤酒瓶子老大 發(fā)表于 2022-5-20 14:22
弱弱的問(wèn)一下,這個(gè)是可以調(diào)整時(shí)間的嗎?

調(diào)時(shí)間前應(yīng)先禁止走時(shí)并允許寫入
再把DS1302內(nèi)相應(yīng)數(shù)據(jù)先讀出來(lái),然后相應(yīng)位按鍵就加1(若按鍵為長(zhǎng)按則當(dāng)前位不斷加1,當(dāng)然中間要加延時(shí),不然加的速度會(huì)非常快,人眼根本看不清)
秒鐘=60,若等于60清零當(dāng)前位并分鐘位加1,
分鐘=60,若等于60清零當(dāng)前位并小時(shí)位加1,
小時(shí)=24,若等于24則小時(shí)分鐘和秒鐘全部清零,
退出前開走時(shí)并禁止寫入時(shí)間.

調(diào)整時(shí)間很簡(jiǎn)單 比如要調(diào)整分,按鍵按下,DS1302停止走時(shí),讀出DS1302分?jǐn)?shù)據(jù)然后分鐘加一,若分鐘不等于或大于60則把加1后的數(shù)據(jù)再寫回DS1302,打開DS1302走時(shí),禁止寫入時(shí)間.  若分鐘加一后等于或大于60,然后把小時(shí)數(shù)據(jù)也讀出來(lái)分鐘清0小時(shí)加1,若小時(shí)不等于或大于24則把清零后的分鐘和小時(shí)都寫回DS1302,退出.若小時(shí)等于或大于24(這里的大于24是防止程序跑飛的現(xiàn)象,有時(shí)用手摸一下DS1302時(shí)間會(huì)顯示超過(guò)24小時(shí))則時(shí)分秒全部清0退出.
      至于按鍵消抖部分你自己想辦法.
回復(fù)

使用道具 舉報(bào)

12#
ID:965189 發(fā)表于 2022-5-20 22:46 | 只看該作者
程序簡(jiǎn)潔,注釋詳細(xì)。值得學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

13#
ID:1028406 發(fā)表于 2022-5-21 12:02 | 只看該作者

好資料,支持開源
回復(fù)

使用道具 舉報(bào)

14#
ID:447439 發(fā)表于 2022-5-23 09:12 | 只看該作者
樓主能否分享下用ADC采用做電量檢測(cè),其次是想問(wèn)下ADC分壓按鍵同時(shí)按住如何減少干擾。謝謝
回復(fù)

使用道具 舉報(bào)

15#
ID:776619 發(fā)表于 2022-5-23 19:37 | 只看該作者
度C可以自編一個(gè)顯示,1602支持8個(gè)自選顯示。
回復(fù)

使用道具 舉報(bào)

16#
ID:1028725 發(fā)表于 2022-5-24 20:46 | 只看該作者
有多路ds18b20的程序嗎
回復(fù)

使用道具 舉報(bào)

17#
ID:61140 發(fā)表于 2022-5-25 22:25 | 只看該作者
啤酒瓶子老大 發(fā)表于 2022-5-20 14:22
弱弱的問(wèn)一下,這個(gè)是可以調(diào)整時(shí)間的嗎?

您可以自行修改一下就可以調(diào)時(shí)間了,DS1302調(diào)時(shí)間很容易,80H/82H/84H分別是秒分時(shí)的調(diào)整.
回復(fù)

使用道具 舉報(bào)

18#
ID:61140 發(fā)表于 2022-5-25 22:29 | 只看該作者
小丑only 發(fā)表于 2022-5-23 09:12
樓主能否分享下用ADC采用做電量檢測(cè),其次是想問(wèn)下ADC分壓按鍵同時(shí)按住如何減少干擾。謝謝

ADC做電量測(cè)量,如果要精準(zhǔn)需要加一個(gè)標(biāo)準(zhǔn)電壓檢測(cè)(需要三路ADC,一路做標(biāo)準(zhǔn)電壓檢測(cè),另兩路分別是電壓和電流采樣)不需要太精準(zhǔn)的話,直接兩路ADC采集電壓電流值,然后算出功率,

至于你說(shuō)的ADC分壓按鍵減少干擾,每個(gè)鍵上面并個(gè)30PF電容(注意是每個(gè)鍵上都要并,不只是你按下的鍵),不要太大,否則會(huì)對(duì)你ADC采樣造成影響.
回復(fù)

使用道具 舉報(bào)

19#
ID:61140 發(fā)表于 2022-5-25 22:34 | 只看該作者

DS18B20并不是很麻煩的東西,你可以看著說(shuō)明書自己寫就行了.只是延時(shí)部分要求嚴(yán)格些.
回復(fù)

使用道具 舉報(bào)

20#
ID:61140 發(fā)表于 2022-6-3 04:06 | 只看該作者
會(huì)沉么,會(huì)的,所以再來(lái)頂一下,免的沉下去.
回復(fù)

使用道具 舉報(bào)

21#
ID:409878 發(fā)表于 2022-6-3 16:17 | 只看該作者
學(xué)習(xí)的最好方法,就是不斷的寫,不斷的動(dòng)手。
回復(fù)

使用道具 舉報(bào)

22#
ID:1019972 發(fā)表于 2022-6-3 17:50 | 只看該作者
不斷的動(dòng)手
回復(fù)

使用道具 舉報(bào)

23#
ID:409674 發(fā)表于 2022-6-4 17:29 | 只看該作者
DS1302時(shí)間總是會(huì)跑快的,要經(jīng)常調(diào)整時(shí)間,不是很理想。
回復(fù)

使用道具 舉報(bào)

24#
ID:624685 發(fā)表于 2022-6-5 11:43 | 只看該作者
好資料,雖然現(xiàn)在還看不太懂,謝謝,慢慢學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

25#
ID:368834 發(fā)表于 2022-6-7 08:33 | 只看該作者
強(qiáng),好資料,必須支持
回復(fù)

使用道具 舉報(bào)

26#
ID:368834 發(fā)表于 2022-6-7 08:34 | 只看該作者
好資料,必須頂上去
回復(fù)

使用道具 舉報(bào)

27#
ID:915491 發(fā)表于 2022-6-7 09:39 | 只看該作者
很好,功能很全
回復(fù)

使用道具 舉報(bào)

28#
ID:61140 發(fā)表于 2022-6-13 15:06 | 只看該作者

后面會(huì)發(fā)一些適合新手學(xué)習(xí)的程序和DIY項(xiàng)目
回復(fù)

使用道具 舉報(bào)

29#
ID:1000963 發(fā)表于 2022-6-14 09:39 | 只看該作者
程序?qū)懙牟诲e(cuò)的
回復(fù)

使用道具 舉報(bào)

30#
ID:388099 發(fā)表于 2022-6-14 20:20 | 只看該作者
感謝分享,下載了慢慢學(xué)習(xí)。謝謝。
回復(fù)

使用道具 舉報(bào)

31#
ID:893249 發(fā)表于 2022-6-19 23:13 | 只看該作者
好資料,必須支持開源
回復(fù)

使用道具 舉報(bào)

32#
ID:61140 發(fā)表于 2022-6-19 23:56 | 只看該作者
wolfinn 發(fā)表于 2022-5-23 19:37
度C可以自編一個(gè)顯示,1602支持8個(gè)自選顯示。

本程序只做演示不做實(shí)用,如果實(shí)用的話我會(huì)夾帶匯編以修正時(shí)間差,可以做到年走時(shí)誤差3S以內(nèi)不是神話.
回復(fù)

使用道具 舉報(bào)

33#
ID:372579 發(fā)表于 2022-6-20 11:09 | 只看該作者
好資料,必須支持樓主
回復(fù)

使用道具 舉報(bào)

34#
ID:58874 發(fā)表于 2022-6-20 23:45 | 只看該作者
好資料,必須支持開源
回復(fù)

使用道具 舉報(bào)

35#
ID:893249 發(fā)表于 2022-6-21 21:56 來(lái)自觸屏版 | 只看該作者
請(qǐng)問(wèn)ad采集的哪里的電壓,pwm輸出到哪里?是要控制什么嗎?
回復(fù)

使用道具 舉報(bào)

36#
ID:425251 發(fā)表于 2022-6-22 08:09 | 只看該作者
好資料,必須支持開源。收藏了。
回復(fù)

使用道具 舉報(bào)

37#
ID:1036478 發(fā)表于 2022-6-22 20:23 | 只看該作者
  好資料,必須支持開源
回復(fù)

使用道具 舉報(bào)

38#
ID:1033693 發(fā)表于 2022-6-25 11:13 | 只看該作者
好資料,有獨(dú)立的思考方式
回復(fù)

使用道具 舉報(bào)

39#
ID:61140 發(fā)表于 2022-6-25 22:21 | 只看該作者
本帖最后由 xiaoyuxinke 于 2022-9-14 15:29 編輯
nicevoip 發(fā)表于 2022-6-21 21:56
請(qǐng)問(wèn)ad采集的哪里的電壓,pwm輸出到哪里?是要控制什么嗎?

這個(gè)看你想怎么應(yīng)用了,可以用AD變成PWM控制電機(jī)轉(zhuǎn)速,也可以用PWM控制其它或用其它變量控制輸出的PWM,這個(gè)可以靈活應(yīng)用.
回復(fù)

使用道具 舉報(bào)

40#
ID:965189 發(fā)表于 2022-9-13 21:46 | 只看該作者
好資料就要下載學(xué)習(xí)。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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