freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

基于at89c51單片機的lcd電子時鐘設計畢業(yè)論文(編輯修改稿)

2025-07-24 17:51 本頁面
 

【文章內容簡介】 平表示不忙,模塊就能接收相應的命令或者數據。 指令10:寫數據。 指令11:讀數據。液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志位是不是為低電平,是低電平則表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。表29為 LCD1602的內部顯示地址。表29 LCD1602的內部顯示地址123141516第一行80H81H82H8DH8EH8FH第二行0C0H0C1H0C2H0CDH0CEH0CFH第3章 系統軟件電路設計 系統流程圖及源代碼設計 主程序流程圖設計液晶屏通信引腳定義DS1302通信引腳定義數據設定引腳定義開始引腳定義地址定義程序開始初始化液晶屏讀取DS1302程序數據分離送顯示緩存日歷顯示子程序數據存儲地址顯示數據緩沖地址初始化液晶屏幕顯示初始畫面清液晶屏幕顯示空白讀DS1302程序分離數據子程序寫指令到液晶屏讀數據到液晶屏圖31 主程序流程圖 子程序流程圖設計 DS1302 定時器中斷子程序流程圖YYYYYYYNNNNNNNNY開始給定時器再次賦值判斷是否計滿18次秒加1,判斷是否等于60分加1,秒置0,判斷分是否等于60時加1,分置0,判斷時是否等于24日加1,時置0,判斷該年是否為閏年判斷日是否到月底月加1,日置1,判斷月是否等于12年加1,月置1,判斷年是否為100執(zhí)行年、月、日、時、分、秒的顯示結束圖32 DS1302中斷流程圖 程序主要實現對DS1302寫保護、充電,對年、月、日、時、分、秒等寄存器的讀寫操作。在讀寫操作子程序中都執(zhí)行了關中斷指令,因為在串行通信時對時序要求比較高,而且在此是用I/O口軟件模擬串行時鐘脈沖,所以在通信過程中最好保證傳輸的連續(xù)性,不要允許中斷,如圖32所示。 LCD1602 流程圖 程序主要實現對信息的顯示,包括年、月、日、時、分、秒等信息,在這里要注意它的讀寫控制指令。其流程圖如圖33所示。開始RW和E都置零設置點陣8位數據接口,兩行顯示開顯示,不顯示光標地址指針加一,畫面不一定刷新,全部清零給地址,從第一行開始寫顯示第一行數據給第二行地址,顯示第二行數據結束 圖33 LCD1602初始化流程圖 子程序源代碼設計詳見附錄一 設計原理圖詳見附錄二附錄一/*****************************************************程序名稱:基于單片機和時鐘芯片DS1302的電子時鐘程序功能: 時鐘芯片采用DS1302 顯示采用液晶屏LCD1602***************************************************/ include //包含單片機寄存器的頭文件include //包含_nop_()函數定義的頭文件define uchar unsigned chardefine uint unsigned int/***********************************************************************以下是DS1302芯片的操作程序************************************************************************/uchar code digit[10]={0123456789}。 //定義字符數組顯示數字sbit DATA=P1^1。 //位定義1302芯片的接口,sbit RST=P1^2。 //位定義1302芯片的接口,sbit SCLK=P1^0。 //位定義1302芯片的接口,/*****************************************************函數功能:延時若干微秒入口參數:n***************************************************/ void delaynus(uchar n){ uchar i。 for(i=0。in。i++) 。}/*****************************************************函數功能:向1302寫一個字節(jié)數據入口參數:x***************************************************/ void Write1302(uchar dat){ uchar i。 SCLK=0。 //拉低SCLK,為脈沖上升沿寫入數據做好準備 delaynus(2)。 //稍微等待,使硬件做好準備 for(i=0。i8。i++) //連續(xù)寫8個二進制位數據 { DATA=datamp。0x01。 //取出dat的第0位數據寫入1302 delaynus(2)。 //稍微等待,使硬件做好準備 SCLK=1。 //上升沿寫入數據 delaynus(2)。 //稍微等待,使硬件做好準備 SCLK=0。 //重新拉低SCLK,形成脈沖 dat=1。 //將dat的各數據位右移1位,準備寫入下一個數據位 } }/*****************************************************函數功能:根據命令字,向1302寫一個字節(jié)數據入口參數:Cmd,儲存命令字;dat,儲存待寫的數據***************************************************/ void WriteSet1302(uchar Cmd,uchar dat) { RST=0。 //禁止數據傳遞 SCLK=0。 //確保寫數居前SCLK被拉低 RST=1。 //啟動數據傳輸 delaynus(2)。 //稍微等待,使硬件做好準備 Write1302(Cmd)。 //寫入命令字 Write1302(dat)。 //寫數據 SCLK=1。 //將時鐘電平置于已知狀態(tài) RST=0。 //禁止數據傳遞 }/*****************************************************函數功能:從1302讀一個字節(jié)數據入口參數:x***************************************************/ uchar Read1302(void) { uchar i,dat。 delaynus(2)。 //稍微等待,使硬件做好準備 for(i=0。i8。i++) //連續(xù)讀8個二進制位數據 { dat=1。 //將dat的各數據位右移1位,因為先讀出的是字節(jié)的最低位 if(DATA==1) //如果讀出的數據是1 dat|=0x80。 //將1取出,寫在dat的最高位 SCLK=1。 //將SCLK置于高電平,為下降沿讀出 delaynus(2)。 //稍微等待 SCLK=0。 //拉低SCLK,形成脈沖下降沿 delaynus(2)。 //稍微等待 } return dat。 //將讀出的數據返回} /*****************************************************函數功能:根據命令字,從1302讀取一個字節(jié)數據入口參數:Cmd***************************************************/ uchar ReadSet1302(uchar Cmd) { uchar dat。 RST=0。 //拉低RST SCLK=0。 //確保寫數居前SCLK被拉低 RST=1。 //啟動數據傳輸 Write1302(Cmd)。 //寫入命令字 dat=Read1302()。 //讀出數據 SCLK=1。 //將時鐘電平置于已知狀態(tài) RST=0。 //禁止數據傳遞 return dat。 //將讀出的數據返回}/*****************************************************函數功能: 1302進行初始化設置***************************************************/ void Init_DS1302(void){ WriteSet1302(0x8E,0x00)。 //根據寫狀態(tài)寄存器命令字,寫入不保護指令 WriteSet1302(0x80,((0/10)4|(0%10)))。 //根據寫秒寄存器命令字,寫入秒的初始值 //39。/39。除法運算,取整;39。%39。取模運算,取余 //數據前四位為十位,后四位為個位,詳見寄存器表 WriteSet1302(0x82,((0/10)4|(0%10)))。 //根據寫分寄存器命令字,寫入分的初始值 WriteSet1302(0x84,((12/10)4|(12%10)))。 //根據寫小時寄存器命令字,寫入小時的初始值 WriteSet1302(0x86,((01/10)4|(01%10)))。 //根據寫日寄存器命令字,寫入日的初始值 WriteSet1302(0x88,((06/10)4|(06%10)))。 //根據寫月寄存器命令字,寫入月的初始值 WriteSet1302(0x8c,((10/10)4|(10%10)))。 //根據寫小時寄存器命令字,寫入小時的初始值}
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1