一、設計內容:
本次設計使用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 串口功能使用簡介
推薦閱讀
史海拾趣
隨著產品的熱銷,Empro Technology Corp開始積極尋求市場拓展和戰略合作。公司與國際知名電子產品制造商建立了緊密的合作關系,共同研發新產品,共同開拓市場。同時,公司還通過參展國際電子展等方式,不斷提升品牌知名度和影響力。
2014年,Econais宣布推出新一代IEEE802.11b/g/n Wi-Fi模塊——EC19D01。這款模塊是物聯網領域的一次重大突破,它采用了系統級封裝(SiP)技術,實現了世界上最小、最容易集成和最低待機功耗的Wi-Fi模塊。EC19D01的推出,進一步鞏固了Econais在超低功耗物聯網微型Wi-Fi模塊領域的領先地位。
值得一提的是,Aptina曾與索尼達成了一項專利交叉許可協議。這一協議不僅加強了雙方的技術合作,還促進了雙方在圖像傳感器領域的共同發展。通過共享專利資源,Aptina得以進一步拓展其產品線,提升產品質量,鞏固市場地位。
近年來,輝芒微積極籌備上市工作,旨在通過資本市場進一步拓展融資渠道和品牌影響力。盡管在上市過程中經歷了兩次撤回申請資料的波折,但公司始終保持著對資本市場的熱情和信心。通過不斷優化內部管理、提升產品競爭力和加強市場拓展,輝芒微最終贏得了市場的廣泛認可。其產品被廣泛應用于智能家居、生活電器、智能穿戴等領域,并與小米、飛科、中興等眾多知名品牌建立了長期穩定的合作關系。
海芯科技一直將產品研發視為公司發展的核心動力。經過長時間的研發與試驗,公司成功推出了一系列具有市場競爭力的產品。這些產品不僅性能穩定、質量可靠,而且具有廣泛的應用領域。隨著產品在市場上的逐步推廣和應用,海芯科技逐漸獲得了客戶的認可和信賴,市場份額也逐步擴大。
ATS公司成立于1989年,最初是一家專注于電子產品熱管理咨詢的公司。創始人團隊憑借其深厚的電子工程背景和敏銳的市場洞察力,識別到電子產品熱管理領域的潛在機遇。經過數月的研究和開發,ATS成功研發出了一種新型散熱技術,顯著提高了電子設備的散熱效率。這一技術突破迅速贏得了市場的認可,ATS開始收到來自各大電子產品制造商的咨詢和合作請求。
論工作: 1.對待薪酬:不管公司加不加你薪水,只要你還在這個公司一天,就請努力專心的做事。 2.對待每一件事:努力認真去做好每一件事。只要你想做,總有法子可以做到的。 3.做好本分工作.技術人員有時候對PM分配自己一些較沒技術含量的工作會很 ...… 查看全部問答∨ |
|
用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 下能直接運行嗎 是否需要重新編 ...… 查看全部問答∨ |
小弟在一個項目下需要做自動升級,苦于該項目的開發模式是native的方式,需要把自己的代碼和OS的代碼一起編譯成BIN文件燒入手機。所以這種模式,自動升級無法實現。現在想做一個類似DLL動態加載的方式。主要思路是把程序編譯成ELF格式的文件,然后在 ...… 查看全部問答∨ |
我用的官網給的方案,PDF是AN1094,提示下載成功,但是程序不跑,有做過pic33的bootloader 的 請給我個建議 謝謝了… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 高通攜手中國“汽車朋友圈”亮相2025上海車展: 加速駕駛輔助普惠,推動艙駕創新升級
- 工業市場正在快速回暖,德州儀器如何重塑電力電子市場?
- 特斯拉:美國交付的Model Y/3電池包已實現100%美國生產
- 地平線與博世深化合作,攜手為多家車企提供輔助駕駛產品
- 強化中國市場戰略布局,德州儀器正靈活應對全球關稅挑戰
- Molex莫仕通過本地合作和創新加強支持中國汽車行業
- 貿澤開售Texas Instruments適用于高分辨率AR HUD的 全新DLP4620S-Q1 0.46"汽車數字微鏡器件
- ROHM推出高功率密度的新型SiC模塊,將實現車載充電器小型化!
- 用上車規級UFS 4.0,讓出行變得高效且可靠
- 車載測試技術解析:聚焦高帶寬、多通道同步采集與協議分析