程式期末競試--電子時鐘 通訊一甲 B09622048 楊穎穆.

Slides:



Advertisements
Similar presentations
单片机 C 语言应用程序设计 主讲教师:廉哲 QQ: 电话: 办公室:综合楼 C318.
Advertisements

青蘋果的代價 參考資料 : 國中性教育教學輔助媒體 (Power Point) 教師手冊. 影片欣賞 -- 愛的晚霞 單純的阿霞人生第一次的愛情,卻是帶來身心嚴重 的傷害,阿霞要如何面對感染愛滋後的生活 …
现代电子技术实验 ——综合实验之单片机部分
學生書寫現況 1、寫不出來。 2、火星文(注音ㄚ、ㄛ、ㄏ. 、圖像 文字…) 3、口語化。
5.1 中断的概述 5.2 MCS - 51中断系统 5.3 中断系统的应用
多樂一甲 謝佩臻 4A3K0009.
武侠魅力阅读领航 《射雕英雄传》中的人物性格对比 葛东杰小组.
307暑假作業 自選部份,各項的範例!.
项目二 中断应用系统设计 本项目学习目标: (1)制作一个单片机控制的彩灯电路。 (2) 理解中断的基本概念;
动漫课题 动漫power对青少年的影响.
KEIL C单片机设计与项目实践 课程主讲: 孙福成 张小义   王晓静 杨至辉 课件制作: 亢娟娜 王 淏.
放大器-頻率響應實驗 科系:通訊工程學系 執導老師:王志湖 學號:B 姓名:何信賢.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
Chapter 5 迴圈.
本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
第二部分 微机原理 第8章 单片机的 定时/计数器 主讲教师:喻红.
單晶片微電腦控制實習 使用計時中斷作走馬燈 計時器的基礎實習 國立大甲高工 電機科 2018年11月21日
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
第八章 数据通信.
使用VHDL設計—4位元位移器 通訊一甲 B 楊穎穆.
嵌入式系統進階 日期 : 2018/12/4.
微算機(二) 's UART mode0 input
初始化串列通訊埠 在啟始串列傳輸介面時有以下3個步驟:假設傳輸的通訊協定為9600bps,傳送8個位元資料,沒有同位位元,1個停止位元。
安裝JDK 安裝Eclipse Eclipse 中文化
電子學實驗—自給偏壓共射極放大 通訊二甲 B 楊穎穆.
電子學實驗--二極體特性 通訊二甲 B 楊穎穆.
第七章 定时/计数器.
介面設計專題實務 Object Teaching of Interface Design 實驗五 CPU計時器實驗
正荣集团企业门户 基本流程培训
使用VHDL設計-多工器/解多工器 通訊一甲 B 楊穎穆.
班 級: 通訊二甲 學 號: B 學 生: 楊 穎 穆 老 師: 王 志 湖
单元五 MCS-51单片机内部资源 5.1 任务九 单片机计数并显示 5.2 任务十 单片机流水灯控制 5.3 任务十一 两台单片机数据互传
主要内容 定时/计数器的工作原理模式 定时/计数器的工作方式 定时/计数器的应用
一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置. 一、任务描述 二、任务分析 三、任务演示 四、相关知识 五、任务布置.
電子音樂 通訊系 B 楊穎穆.
邏輯設計--不穩多諧振盪器 通訊一甲 B 楊穎穆.
電子學實驗--CE放大電路 通訊二甲 B 楊穎穆.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
5-13 串列通訊實習.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
程式設計期末測驗 通訊一甲 B 楊穎穆.
期末考.
共源極頻率響應 科系:通訊工程學系 執導老師:王志湖 學號:B 姓名:何信賢.
班 級: 通訊二甲 學 號: B 學 生: 楊 穎 穆 老 師: 王 志 湖
4.19 Fsys _ SLOW MODE HT66F70A.
程式設計-- Binary Search 通訊一甲 B 楊穎穆.
班級:通訊一甲 學號:B 學生:李忠憲 指導老師:王志湖 老師
4-16 SLEEP0 HT66F70A.
第二章 类型、对象、运算符和表达式.
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
自停式向下計數器 通訊一甲 B 楊穎穆.
陣列與結構.
電子學實驗--全波整流 通訊二甲 B 楊穎穆.
微算機(二) 's UART mode1 communication
電子學實驗—共集極放大電路 通訊二甲 B 楊穎穆.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
可變式計數器 通訊一甲 B 楊穎穆.
積分電路 科系:通訊工程學系 執導老師:王志湖 學號:B 姓名:何信賢.
CG放大(CD4007) 科系:通訊工程學系 執導老師:王志湖 學號:B 姓名:何信賢.
程式設計--Quick Sort 通訊一甲 B 楊穎穆.
单片机应用技术 (C语言版) 第4章 C51程序设计入门
期末報告第一題 通訊四甲 B 湯智瑋.
查表法&電腦IO Port二進制轉七段顯示器
微算機(二) -- ADC0804 measurement
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
微 處 理 機 專 題 – 8051 C語言程式設計 主題:階乘計算
2-4 中斷.
Presentation transcript:

程式期末競試--電子時鐘 通訊一甲 B09622048 楊穎穆

目錄 目的 我的時鐘功能 設計原理 流程圖 程式 實驗結果 資料來源 結論

目的 使用C語言設計製作一時鐘。 時鐘最基本功能須具備下列功能: a. 顯示時、分、秒功能。 b. 具有時、分校正之功能。 附加功能: a. 具有年、月、日、星期顯示與校正者。 b. 具有中國農曆年、月、日、星期顯示與校正設定者。 c. 正點報時功能者。 d. 單組定時ON與定時OFF顯示與校正設定者。 e. 多組定時ON與定時OFF顯示與校正設定者。 f. 具小睡顯示與校正設定者。 g. 具Radio Calibration者。 h. 具GPS Calibration者。 i. 具Internet Calibration者。 j. 具溫度顯示者。 k. 具溼度顯示者。 l. 具CO2、CO1濃度顯示與警告功能者。 第2項:專題論文+投影片(PPT檔)+影音檔+網頁: a. 專題論文格式按一般會議論文兩列格式中文撰寫,圖、表格必須清楚,使用之參考資料也必須詳列。 b. 投影片(PPT檔)必須將您所設計製作的動機、原理、特色、貢獻與結論,摘錄成Power Point檔。 c. 影音檔:使用Camtasia將以上投影片、作品製作過程及作品操作使用錄製成影音檔(AVI格式)。 d. 網頁:將以上所有製成網頁安置在系學生園地供人瀏覽外,另燒錄成CD片(容量盡可能在500M以下)

我的時鐘功能 二十四小時制。 顯示時、分、秒功能。 能顯示上、下午功能。 具有校正功能。

設計原理 設定計時計數模式 允許計時計數中斷 設定計時計數內之計數值 啟動計數 時間到,跳到計時計數中斷副程式,去 處理後續工作 後續工作完成後,則自動回主程式

設計原理 中斷允許暫存器:IE( Interrupt Enable Registor) EA ET2 ES ET1 EX1 ET0 EX0 1 0 0 0 0 0 1 0 IE=10000010=0x82 供計時計數允許中斷Timer0 EA ET2 ES ET1 EX1 ET0 EX0 IE 可由各自的中斷 允許位元來設定 供計時計數 允許中斷 Timer1  供INT0允許 中斷用 供INT1允許 中斷用

設計原理 0 0 :13bit計數方式 0 1 :16bit計數方式 1 0 :8bit重新載入模式 1 1 : 特殊模式 TMOD=00000010=0x02 0 0 0 0 0 0 1 0 TMOD Gate C/〒 M1 M0 Timer1 Timer0 ※ M1,M0:模式 0 0 :13bit計數方式 0 1 :16bit計數方式 1 0 :8bit重新載入模式 1 1 : 特殊模式 ※ C/〒 : 0 計時器,1 計數器 ※ Gate=0,TR=0 :停止計時計數 Gate=0,TR=1 :開始計時計數

設計原理 中斷優先暫存器IP (Interrupt Priority register)中有一位元來決定中斷副程式被執行的優先順序,假如設定為〝1〞表示為高優先權,〝0〞則表示為低優先權。 INT0 EA 高 優 先 權 IE0 EX0 低 優 先 權 EA ET0 TF0 INT1 EX1 IE0 EA EA ET1 TF1 T1 R1 EA ES EA ET2 TF2 EXF2

設計原理 我們所使用的是”8bit重新載入模式”,所以在設定上8bit為2的八次方=256,它的初始值=200。 TL0=256-200=56; TH0=256-200=56。

流 程 圖(主程式) main 初始值 Yes 校正change() 校正change() No 時鐘計時 顯示show()

流 程 圖(中斷&時鐘計時計數副程式) No Yes No Yes No Yes No Yes timer0() hs==0 hs-- return Yes s--; hs==2304 No s==0 Yes s=2 No t[0]==9 t[0]=t[0]+1 return Yes t[0]=0 No t[1]==5 t[1]=t[1]+1 return Yes t[1]=0 1

流 程 圖(中斷&時鐘計時計數副程式) No Yes No Yes No No No Yes Yes Yes 1 return t[2]=t[2]+1 Yes t[2]=0 No t[3]==5 t[3]=t[3]+1 return Yes t[3]=0 No No t[4]==3&& t[5]==2 t[4]==9 No t[4]=t[4]+1 Yes Yes t[4]=0 t[4]==2&& t[5]==1 t[4]=0; t[5]=0; t[6]=10; t[7]=11; Yes t[5]++ t[6]=10; t[7]=12; return return return

流 程 圖(校正副程式) No Yes No No Yes Yes No Yes No Yes change() P3_7==1 TR0=1 return Yes TR0=0 No k==8 P3_6==1 No Yes Yes k=0 No w++ w==200 w=0 Yes show() P3_6==0 No b=P0&0x0F Yes k++ t[k]=b return

流 程 圖(顯示副程式) Yes No Show() P1=0xFF; P2=bcd2seg[t[i]]; P1=~scan; scan=scan<<1; i++; Yes i==8; i=0; scan=0x01; return No

程 式 #include"reg51.h" //函式庫 sfr P4 = 0xD8; //判斷是否進入燒錄模式 sbit P4_3 = P4^3; //判斷是否進入燒錄模式 int hs=2304; //宣告變數 hs=2304 int s=2,k=0,w=0; //宣告變數 s=2,k=0,w=0; int scan=0x01,i=0; //宣告變數 scan=1,i=0 unsigned char code bcd2seg[ ]={0x81,0xCF,0x92,0x86,0xCC, 0xA4,0xA0,0x8F,0x80,0x84,0xFE,0x88,0x98}; //宣告七段顯示陣列 unsigned char t[8]={0,0,0,0,0,0,10,11}; //宣告陣列 t 及其初始值設定 void show(void); //宣告副程式 show void change(void); //宣告副程式 change sbit P3_6=P3^6; //宣告腳位P36 sbit P3_7=P3^7; //宣告腳位P37

程 式(主程式) int main(void){ //主程式開始 void (*isp) (void) = 0xf800; //判斷是否進入燒錄模式 if(P4_3==0) (*isp) (); //判斷是否進入燒錄模式 TMOD=0x02; //計時計數模式 IP=0; //允許計時計數中斷 IE=0x82; //允許計時計數中斷 TL0=56; //(256-200)=56 TH0=56; //(256-200)=56 while(1){ //開始執行動作 change(); //呼叫校正副程式 change show(); //呼叫顯示副程式 show }

程 式(中斷&時鐘計時計數副程式) void timer0(void) interrupt 1{ //中斷&計時計數副程式 if(hs==0){ //假如我hs=0,s值會減1 s--; if(s==0){ //假如s=0,s=2 s=2; if(t[0]==9){ t[0]=0; //假如當陣列t[0]計數到為9時,t[0]的下一狀態就會顯示為0 if(t[1]==5){ t[1]=0; //假如當陣列t[1]計數到為5時,t[1]的下一狀態就會顯示為0 if(t[2]==9){ t[2]=0; //假如當陣列t[2]計數到為9時,t[2]的下一狀態就會顯示為0 if(t[3]==5){ t[3]=0; //假如當陣列t[3]計數到為9時,t[3]的下一狀態就會顯示為0 if(t[4]==3 && t[5]==2){ t[4]=0; t[5]=0; t[6]=10; t[7]=11; //假如當陣列t[4]計數到為3時,且t[5]計數到為2時,t[4],t[5] 的下一狀態就會顯示為0,t[6]會顯示為 -,t[7]會顯示為 A }

程 式(中斷&時鐘計時計數副程式) else{ if(t[4]==9){ t[4]=0; t[5]++; } else t[4]++; //否則t[4]加1持續計數 if(t[4]==2 && t[5]==1){ t[6]=10; t[7]=12; //假如當陣列t[4]計數到為2時,且t[5]計數到為1時,t[6]會顯示為 -,t[7]會顯示為 p } else t[3]++; //否則t[3]持續加1計數 else t[2]++; //否則t[2]持續加1計數 else t[1]++; //否則t[1]持續加1計數 else t[0]++; //否則t[0]持續加1計數 hs=2304; //執行半秒所需的時間 else hs--; }`

程 式(校正副程式) void change(void){ int b; if(P3_7==1){ //假如當我P3_7為1時TR0=0停止計數 TR0=0; if(P3_6==1){ //假如當我P3_6為1時,w值加1 w++; while(w==200){ //當我w為200時,會在迴圈內一直執行動作 if(P3_6==0){ //假如當我P3_6為0,k值會持續加1 k++; if(k==8){ //假如k值已經為8,k會從陣列第一個位置從頭開始 k=0; } w=0; //w 值從0開始 } show( ); //呼叫顯示副程式,將我們調整後的值顯示出來 b=P0&0x0F; //輸入的值以後四位來控制 t[k]=b; //當我調到我要的陣列位置顯示出來的值為我輸入的b值 else TR0=1; //否則我開始計數

程 式(顯示副程式) void show(void){ //副程式 show開始執行 P1=0xFF; //遮沒 P2=bcd2seg[t[i]]; //顯示七段顯示 P1=~scan; //由第一個七段開始顯示 scan=scan<<1; //向左位移一位 i++; // i值加1 if(i==8){ i=0; scan=0x01; } //判別 i是否已經為 8,"是"i會為 0,scan=1 }

實驗結果(1) 時鐘顯示 位移陣列位址 判別是否進入校正 我的輸入值

實驗結果(2)

實驗結果(3)

資料來源 王志湖老師上課教授的內容所做成的筆記。 同學間討論的結果。

結論 可透過這次電子鐘的實驗,讓我有進一步的了解,也學習到更多,雖在一些地方不是很完美,像是在校正部分必須要靠開關各別去輸入我想要的數值就有點麻煩,所以在這方面是需要去改進的。

END