娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年03月01日(星期六)

2021年03月01日 | STM8實現萬年歷(高亮調時)

發布者:RadiantWhisper 來源: eefocus關鍵字:STM8  萬年歷 手機看文章 掃描二維碼
隨時隨地手機看文章

一、設計內容:


本次設計使用stm8s實現簡單的萬年歷,主要功能是顯示時間、調時、設置鬧鈴。另外還添加了游戲輔助功能。


二、設計要求:


1、主控芯片使用stm8s


2、使用pcb板


3、至少要實現數碼管顯示時間和調時功能


三、設計過程:


設計總共分為兩塊,硬件設計和軟件設計。首先是構思要實現的功能,然后了解硬件資源再進行軟件設計。所以下面首先介紹硬件設計。


1、硬件設計部分


A、元件清單


器件名


型號


數量


Lcd


12864


1


DS1302


1


晶振


32.768KHz


1


Stm8s105s4


1


按鍵


5


二極管


1n4007


2


電容


220uf


1


10uf


2


104


5


電阻


1k


7


100k


1


10


1


三極管


8550


1


發光led


1


直流蜂鳴器


1


紐扣電池


3v


1


電位器


10k


1


開關


1


電源接口


1


穩壓器件


7805


1


B、 原理圖


Eda軟件使用的是altium designer winter09 ,上面的原理圖是從軟件中copy出來的。


硬件設計總共分為5個模塊。


模塊一是電源部分。注意直流電源DC需要9V的電壓才能得到5V的穩壓輸出,因為芯片7805需要一定的電壓才能驅動。下面是l7805芯片的額定參數表:


在表中我們可以看到,該芯片的可以承受高達35V的直流電壓輸入,輸出范圍是5V-18V。下面還有一張表


從表中我們可以知道,當輸入端Ci=0.33uf,C0=104,在輸入端給10V直流電時,可以得到最小4.8V的穩壓輸出。這是該芯片datasheet里面的資料,是最權威的,我們的電源模塊也是按照這樣接的。


模塊二是lcd顯示部分。Lcd使用的是12864。12864是一種圖形點陣液晶顯示器,它主要由行驅動器/列驅動器及128X64全點陣液晶顯示器組成,可完成圖形顯示,也可以顯示8X4個(16X16點陣漢字,與外部CPU接口可采用串行或并行方式控制。


模塊三是DS1302實時時鐘和蜂鳴器。DS1302芯片接的石英晶體是32.768KHz的。另外,接入紐扣電池,實現斷電后也可以讓DS1302工 作,實現保存時間的功能。蜂鳴器使用的是直流蜂鳴器,用于鬧鈴提示。直流蜂鳴器內部有個2K的音頻驅動源,我們只需加上直流電壓就可以讓蜂鳴器工作,不 過,使用直流蜂鳴器,我們只能產生一種頻率的聲音,不過對于鬧鈴提示來說,已經足夠。直流蜂鳴器通過8550PNP管來驅動,主控芯片通過控制8550間 接來控制蜂鳴器。也就是說,io口給出低電平的時候,蜂鳴器就響。這個模塊的電阻,主要是用來限流。


模塊四是主控芯片。主控芯片使用的stm8s105s4。這塊芯片的資源比較豐富。這里只介紹使用的資源。!16M的內部時鐘,內部可編程flash rom 達32Kbytes,RAM為2K。44個引腳,有高達38個io端口。多個定時器,我們使用了定時器1。原理圖中的兩個電容是濾波電容,一個10uf,一個104。用于濾掉高頻和低頻的干擾。


模塊五是按鍵模塊。按鍵模塊用于和用戶進行交互。模塊中使用了5個按鍵。電阻為限流電阻。


上面對硬件設計資源進行了概述,我們確定了硬件資源后就開始進行軟件設計。


2、軟件設計部分


這里使用了模塊化編程方法,將各個功能作為一個模塊來設計,這樣不僅有利于方便的閱讀代碼,還有利于方便的修改代碼和代碼的復用等等。


編譯器使用的是飛利浦公司提供的免費編譯軟件ST Visual Develop,該軟件主要是用于開發stm系列芯片的。下面是設計的模塊截圖:


圖中顯示了各個模塊。首先介紹一些配置文件。Stm8s_lib.c實現對主控芯片的硬件配置,主要是初始化主時鐘,初始化定時器,初始化io端口和中斷 等。設置這個文件為了方便移植和代碼復用。相應的stm8s_lib.h是頭文件,實現函數的聲明。Type.h頭文件,實現數據類型的宏定義,也是為了 方便移植和使用。Config.h可以配置一些硬件參數如波特率等等。下面對各個模塊進行介紹。


顯示模塊lcd。文件lcd2864.c是該模塊的實現文件,lcd12864.h和lcd_data.h聲明了一些與顯示相關的數據。具體代碼請查看代碼附件。


這里我們來看lcd12864.h這個頭文件。這里面是12864的驅動函數。


void LcdInit(void);//初始化lcd


void WCmd(uchar cmd); //向顯示控制器寫命令


void WData(uchar ch); //向顯示控制器寫數據


uchar RBBF(void); //讀忙標志


uchar RData(void); //讀數據,由于沒有使用到,這里代碼不完整


uchar RByte(uchar addr);//讀一個字節


void WByte(uchar addr,uchar buf);//寫一個字節


//在屏幕上顯示數據參數為(地址,數據buffer,漢字數)


void showword(uchar addr,uchar *buf,uchar count);//在屏幕上


//在屏幕上顯示數據參數為(地址,數據buffer,字節數)


void showbyte(uchar addr,uchar *buf,uchar count);


//顯示選擇光標 falg=1 為顯示


void ShowCur(uchar flag);


//清屏


void Clear_Screen(uchar addr,uchar count);


void Clear_all(void);


//將模式設置為顯示像素點


void Set_Draw(uchar flag);


//高亮顯示,參數為(橫坐標0-15,縱坐標0-3,顯示標志1為顯示字符)


//2為顯示漢字,3為清除高亮顯示,以字的方式。


void High_Show(uchar x,uchar y,uchar flag);


//清除CGROM,將rom寫0,避免花屏


void Clear_CGRom(void);


//圖像顯示初始化


void CG_init(void);


//恢復普通顯示


Void CG_leave(void);


這里需要注意延時,給足夠的時間顯示控制器處理指令。我們主要使用showword函數來顯示內容,ShowCur函數用來顯示光標,提示用戶當前選擇。下面是時間顯示的顯示界面。注意左下角的就是光標。


實時時鐘模塊。實時時鐘模塊文件是DS1302.c,頭文件是ds1302.h.


展開ds1302.h我們可以看到:


void ds1302_init(void);//ds1302初始化


void Read_Time(void); //讀時間


void write_ds1302_com(uchar com);//寫命令


void write_ds1302_data(uchar addr,uchar dat);//寫數據


uchar read_ds1302_data(uchar addr);//讀數據


void set_time(void);//設置時間


void read_time(void);//讀時間


void translate(void);//轉換時間


我們主要使用ds1302_init來初始化時鐘芯片,Read_Time來讀取時間,set_time來設置時間。


Uart.c文件模塊。這個文件主要是實現串口通信的。在uart.h文件中:


void InitUART2(void); //初始化


void Uart_SendByte(unsigned char ch);//發送一個字節


void Uart_SendString(char *pt); //發送字符串


主要使用Uart_SendString這個函數,用于程序的調試。最終硬件實現是不添加串口通信功能的。所以關于串口通信的代碼全部使用宏定義,在調試完成后,去掉宏定義就可以去除串口通信相關的代碼了。


現在介紹main.c這個文件。這個主文件,將各個模塊的接口連接起來,最終顯示我們想要的功能。首先,也是必須的,我們來看看添加到main.c的頭文件。


#include "stm8s105s4.h" //芯片頭文件


#include "stm8s_lib.h" //這里就調用了配置函數


#include "lcd12864.h" //調用lcd驅動


#include "UART.h" //串口通信


#include "ds1302.h" //實時時鐘的調用


#include "type.h" //類型定義


#include "lcd_data.h" //lcd顯示數據


#include "beep_data.h" //蜂鳴器數據


有了上面的頭文件,就可以實現相應的功能了。


這里我們將按鍵掃面驅動寫在了主文件當中。使用定時器1產生20ms的定時器中斷,實現按鍵掃描。代碼如下:


@far @interrupt void TIM1_KEY (void)


{


//////////////////////////////////


TIM1_SR1=0X00;


if(time_counter>0)


{


time_counter--;


if(time_counter==0)


{


BEEP=1;


TIM3_CR1=0x00; //關閉計數


}


Ring_Beep();


}


/////////////////////按鍵掃描//////////////////////////


if(!KeyCanChange) //按鍵處理中標志位


return;


KeyCurrent=GetKeyValue();//獲得當前鍵值 ,若沒有按鍵按下 為高,


if(KeyCurrent!=KeyOld) //這里開始按鍵計時,若按鍵不同就使 KeyNoChangedTime為0,開始計數按鍵按下時間


{ //這里判斷是否按鍵改變


KeyNoChangedTime=0;


KeyOld=KeyCurrent;


return;


}


else


{


KeyNoChangedTime++; //按鍵計時


if(KeyNoChangedTime>=1) //若按鍵按下時間足夠,


{


KeyNoChangedTime=1;


KeyPress=KeyOld; //就保存該鍵值


KeyDown|=(~KeyLast)&(KeyPress); //按鍵為0 這里指定位置1,表示該鍵被按下


KeyUp|=KeyLast&(~KeyPress); //按鍵為 指定位置1,表示上次按鍵松開


KeyLast=KeyPress;


}


}


}


這個按鍵掃描驅動比較強大。可以感應按鍵的按下和松開。去抖動性能比較好。


現在介紹main函數,硬件啟動后,執行到main函數,我們在main函數中實現硬件的初始化,外圍芯片的初始化。然后顯示啟動畫面。之后進入主菜單頁面。Menu_show函數用于顯示主菜單。界面為


-----------------------------------


-》萬年歷


鬧鐘設置


調整時間


游戲


---------------------------------------------------------------


然后就是進行菜單的選擇。下面進行菜單介紹:


萬年歷。進入這個菜單后,主要就是讀取DS1302的時間,并使用lcd顯示出來。


鬧鈴設置。這里面將數據存在EEPROM中,每次進入萬年歷菜單和本菜單后,就將EEPROM中的數據讀出,用于修改和比較。界面如下:


-----------------------------


鬧鈴設置


00:00:00


----------------------------------


調整時間。主要是對ds1302進行操作,設置時間。


游戲。


關鍵字:STM8  萬年歷 引用地址:STM8實現萬年歷(高亮調時)

上一篇:STM8內部時鐘切換
下一篇:STM8 串口功能使用簡介

推薦閱讀

?  據機器之心報道,近日,波士頓動力發布了一則新視頻,一個人拿著一根曲棍球棒努力阻止機器人開門,比如拖拽,機器人開始不停地掙扎。但是人類的阻止并沒有用。機器人贏了,成功地出門。  視頻中最讓人印象深刻的細節是:這個機器人幾乎是完全自主地做出這些行為,至少根據視頻的描述來看是這樣。  機器人能夠擺脫外力的錯誤引導,一直努力完成任...
《2017年IPC全球PCB生產報告》已于十月底發布,報告顯示PCB行業在2017年的實際增長率為13.9% ——這是自2010年行業復蘇以來增長最快的一年。同時,報告詳述了行業的發展現狀,按照國家、地區、產品類別劃分的PCB產值,以及行業趨勢點評和歷史數據。 根據報告調查的數據顯示,2017年中國PCB產值在全球PCB產值中的份額繼續增長,超過一半以上。由于...
在小米10發布后,由知名硬件分析機構techinsights對小米10進行了詳細拆解,并且給出了主要部件的BOM成本預測。據分析,小米10(12GB+256GB)的制造成本約為440美元(約合3088元)。在數據出來后,很多媒體和分析師都表示小米10的定價確實是為了“交朋友”。可以算一筆數,小米10約3088元的BOM成本,在沒加上各種稅、代工廠加工費、生產損耗、研發費、售后...
近日,富士康母公司鴻海集團董事長劉揚偉透露,他看好臺灣地區發展電動巴士,首度公開鴻華先進設計的兩款電動車車款圖樣,預告6月鴻海MIH電動巴士就成形,10月就可以對外公開。 劉揚偉表示,鴻海集團目前在幫MIH電動車聯盟找業務“出海口”,目前包含Fisker、拜騰等客戶“手上已有十幾張牌可以打”。 此前,劉揚偉曾表示,集團積極投入“電動車、數字健康...

史海拾趣

問答坊 | AI 解惑

工作兩年后的感悟(轉貼)2008

論工作: 1.對待薪酬:不管公司加不加你薪水,只要你還在這個公司一天,就請努力專心的做事。 2.對待每一件事:努力認真去做好每一件事。只要你想做,總有法子可以做到的。 3.做好本分工作.技術人員有時候對PM分配自己一些較沒技術含量的工作會很 ...…

查看全部問答∨

芯片植入腦 猴子用意識控制“機械手”進食

             美國匹茲堡大學試驗表明,猴子接受頭發絲薄厚的微型芯片植入后,能通過思維,操縱機械手臂完成進食動作。            對那些飽受折磨的癱瘓病人而言, ...…

查看全部問答∨

LED反激式隔離電源驅動隔離各個位置的功能誰能解釋下嗎

LED驅動原理圖各個位置的功能誰能解釋下嗎 反激式隔離電源的…

查看全部問答∨

簡單問題

假如以芯片的工作條件為:Vcc=12V,Icc=5mA 但卻要從一個400V的高壓上經過一電阻串聯到Vcc讓芯片工作,請問這個電阻怎么計算…

查看全部問答∨

一個簡單的問題

double型數據freq 要在一個static窗口控件IDC_show中顯示出來。 哪位大蝦給出一些幫助~…

查看全部問答∨

用quartus設計框圖時出現錯誤,請高手們幫忙解決

用quartus設計框圖時出現錯誤,錯誤信息如下: Error: Can\'t place 117 pins with LVTTL I/O standard because Fitter has only 85 such free pins available for general purpose I/O placement Error: Can\'t place pins due to device constrai ...…

查看全部問答∨

windows XP DDK 與window 2000 DDK 編譯出的驅動程序有什么不同

問題1 windows XP DDK 與window 2000 DDK 開發包有什么不同 ? 問題2 windows XP DDK 與window 2000 DDK 編譯出的驅動程序有什么不同, 就是說我在xp系統里用xp DDK 編譯的驅動程序 a。sys  在win2000 下能直接運行嗎 是否需要重新編 ...…

查看全部問答∨

arm 體系下的動態加載

小弟在一個項目下需要做自動升級,苦于該項目的開發模式是native的方式,需要把自己的代碼和OS的代碼一起編譯成BIN文件燒入手機。所以這種模式,自動升級無法實現。現在想做一個類似DLL動態加載的方式。主要思路是把程序編譯成ELF格式的文件,然后在 ...…

查看全部問答∨

如何構造一個IRP,最好是鍵盤按鍵。

如何構造一個IRP,最好是鍵盤按鍵。 …

查看全部問答∨

PIC33 bootloader 下載誰用過啊 求助

我用的官網給的方案,PDF是AN1094,提示下載成功,但是程序不跑,有做過pic33的bootloader 的 請給我個建議 謝謝了…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 琼中| 宁陵县| 姚安县| 嘉兴市| 自治县| 威信县| 廊坊市| 东丰县| 象山县| 太仓市| 阳谷县| 邹平县| 鄂托克旗| 个旧市| 泰兴市| 安岳县| 宜兰市| 安吉县| 宝应县| 天长市| 新化县| 临沧市| 绥江县| 临泽县| 焉耆| 乡城县| 临洮县| 右玉县| 公主岭市| 延津县| 平南县| 疏勒县| 三江| 台南市| 贡山| 布尔津县| 浮山县| 乌拉特后旗| 桃园市| 罗江县| 洪雅县|