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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11021|回復: 7
收起左側

LPC2138+LCD12864顯示實時時鐘程序 keil與proteus聯調

  [復制鏈接]
ID:558601 發表于 2019-6-10 02:58 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png

近年來,隨著計算機技術及集成電路技術的發展,嵌入式技術日漸普及,在通訊、網絡、工控、醫療、電子等領域發揮著越來越重要的作用。嵌入式系統無疑成為當前最熱門最有發展前途的IT應用領域之一。32位嵌入式系統發展很快,32位單片機已逐漸占領8位機的市場,并以很高的性價比贏得了越來越多的用戶的青睞。隨著科技和工藝的進步,32位單片機的優勢會更加突顯出來,將會成為嵌入式系統的主流。在32位嵌入式系統中,基于ARM的應用占據了大部分份額。

     實時時鐘(RTC)器件是一種能提供日歷/時鐘、數據存儲等功能的專用集成電路,常用作各種計算機系統的時鐘信號源和參數設置存儲電路。RTC具有計時準確、耗電低和體積小等特點,特別適用于在各種嵌入式系統忠記錄事件發生的時間和相關信息,尤其是在通信工程、電力自動化、工業控制等自動化程度較高領域的無人職守環境。隨著集成電路技術的不斷發展,RTC器件的新品也不斷推出。這些新品不僅具有準確的RTC,還有大容量的存儲器、溫度傳感器和A/D數據采集通道等,已成為集RTC、數據采集和存儲于一體的綜合功能器件,特別適用于以微控制器為核心的嵌入式系統。
本次設計是采用LPC2138的32位芯片設計的可調萬年歷,具有調時、調分、調月、調日和準點報時的功能。當整點時,蜂鳴器響的次數為當時小時的值以及LED會閃爍相應的次數。

一、功能說明 1
二、系統硬件設計 1
21 系統結構 1
22元器件的選擇 2
三、系統軟件設計 3
31程序和芯片的初始化 3
32構建功能模塊 4
四、實驗測試 7
41IAR軟件的編譯,連接和運行 7
42protues仿真軟件的聯合調試 8
五、實驗結果 9
51仿真結果 9
52實驗板結果 10
六、心得體會 11
七、程序清單 11

一、功能說明
利用內部RTC的實時時鐘,制作一個時鐘,通過液晶顯示模塊顯示年、月、日和時間。K1鍵、K2鍵、K3鍵和K4鍵分別可用于調整月份、日、小時和分鐘數。在調整過程中,日期和時鐘以新的時間為起點繼續刷新顯示。同時,該設計具有整點報時的功能,當整點時,蜂鳴器響的次數為當時小時的值以及LED會閃爍相應的次數。
本設計采用的是OCM128128液晶顯示模塊是128×128點陣型液晶顯示模塊,可顯示各種字符及圖形,可與CPU直接接口,具有8位標準數據總線、6條控制線及電源線。采用T6963C驅動IC進行控制。本實驗板中采用的是3.3V的液晶模塊,可以直接連接到LPC2138的GPIO上,而不需要進行電平轉換。
二、系統硬件設計2.1 系統結構
本實驗是基于LPC2138ARM處理器而設計的實時時鐘,綜合性較強,涉及到RTC外部中斷,引腳的GPIO功能,C語言編程等知識。
首先要定義P0口為基本I\O功能,然后通過引腳功能選擇寄存器PINSEL0及PINSEL1定義輸入輸出外部中斷口所在的位,另外還要對外部中斷進行初始化,其中有規定他們的優先級,中斷觸發方式,中斷地址分配,
本實驗采用液晶模塊OCM128128同時顯示實時時間,同樣要對他們進行初始化,包括檢查總線忙與閑,傳送地址,傳送數據及顯示函數的編程、
LPC2138微控制器自帶有一個實時時鐘RTC帶日歷和時鐘功能,要使用它也要進行一下的基本操作:
設置RTC基準時鐘分頻器
初始化RTC的時鐘值如,YEAR,MONTH,HOUR等
啟動RTC即CCR的CLKEN位職位
讀取完整時間寄存器值或等待中斷。
陳述完以上的模塊初始化后,下面簡要說明一下程序的流程。先調用以上各個模塊的初始化函數lcd_int(),RTCint()。然后開啟RTC時鐘,并調用LCD顯示函數SendTimetRtc(),如果沒用中斷發生就判斷實時時間是否與以設定的報警時間相同,如果相同就馬上接通蜂鳴器報警并且點亮LED燈。假如有中斷發生,在無效狀態下,馬上給中斷標志寄存器EXTINT對應位,然后寫1清零,然后轉到中斷服務程序。
根據項目要求,確定該系統的設計方案,圖2-1為該系統設計方案的結構框圖。硬件電路由6個部分組成,即ARMLPC2138處理器、時鐘電路、復位電路、液晶顯示模塊、時間調整模塊、整點報時模塊。

2.2元器件的選擇
選用嵌入式arm 7系列的LPC2138芯片和LCDPG128128a顯示器:

三、系統軟件設計
3.1程序和芯片的初始化
程序中包括:Lcd的初始化:
void init_lcd (void)
{
  IO0CLR=rst;
  IO0SET=rst;
  delay1(50);
  IO0CLR=ce;
  IO0SET=wr;
  IO0SET=rd;
wr_xd(addr_w,0x40);                  //文本顯示區首地址
wr_xd(addr_t,0x42);                   //圖形顯示區首地址
wr_td(width,0x00,0x41);              //文本顯示區寬度
wr_td(width,0x00,0x43);              //圖形顯示區寬度
wr_comm(0x81);                       //邏輯"異或"
wr_td(0x56,0x00,0x22);               //CGRAM偏置地址設置
wr_comm(0x9c);                        //啟用文本顯示,啟用圖形顯示
}
中斷向量的初始化:
VICIntSelect =0x00000000;                                                                                         
  VICVectCntl0 = 0x20|13;                     
  VICVectAddr0 = (uint32)RTC_int;            
   ILR=0x03;                                                                                                                     
  VICIntEnable = (1<<13);                                                                                             
  __enable_irq();


RTC的初始化:
void  RTC_int(void)
{  
   uint32 i,h;
   uint8hh[2];
   h=HOUR;
   hh[0] =HOUR /10+0x30;
   hh[1] =HOUR%  10+0x30;

  clrram();                //清屏
  disp_img(0,16,64,nBitmapDot);   //顯示圖畫
  disp_zf(0,12,"Current Time:");

   for(i=0;i<2;i++)
    {
       disp_zfyg(13+i,12,hh);
    }
  for(i=0;i<h;i++)
   {
    IO0CLR=LED;
    IO0SET=BEAK;
    DelayNS(30);
    IO0SET=LED;
    IO0CLR=BEAK;
    DelayNS(30);
   }      
  ILR = 0x03;                                                                                                                           
  VICVectAddr= 0x00;
clrram();                //清屏
}


3.2構建功能模塊
調整時間和日期的函數
void key()
{
   if((IO0PIN&ATH)==0)
       {
          CIIR=0x00;
          HOUR++;
          if(HOUR>23)HOUR=0;     
          CIIR=0x04;
         while((IO0PIN&ATH)==0);  
       }
        if((IO0PIN&ATM)==0)
       {
          CIIR=0x00;
          MIN++;
          if(MIN>59)  MIN=0;      
          CIIR=0x04;
         while((IO0PIN&ATM)==0);
       }
    if((IO0PIN&ATS)==0)
       {
          CIIR=0x00;
          MONTH++;   
           if(MONTH>12)  MONTH=0;  
          CIIR=0x04;
         while((IO0PIN&ATS)==0);
       }
      if((IO0PIN&ATD)==0)
       {
          CIIR=0x00;
          DOM++;   
          CIIR=0x04;
         while((IO0PIN&ATD)==0);
       }
}
延時函數
void  DelayNS(uint32  dly)
{  uint32  i;
   for(; dly>0; dly--)
      for(i=0; i<50000; i++);
}
整點報時函數
void   RTC_int(void)
{  
   uint32 i,h;
   uint8 hh[2];
   h=HOUR;
   hh[0] = HOUR /10+0x30;
   hh[1] = HOUR%  10+0x30;
  
   clrram();                //清屏
   disp_img(0,16,64,nBitmapDot);    //顯示圖畫
   disp_zf(0,12,"CurrentTime:");
    for(i=0;i<2;i++)
    {
        disp_zfyg(13+i,12,hh);
    }
   for(i=0;i<h;i++)
   {
     IO0CLR=LED;
     IO0SET=BEAK;
     DelayNS(30);
     IO0SET=LED;
     IO0CLR=BEAK;
     DelayNS(30);
   }      
  ILR = 0x03;                                
  VICVectAddr = 0x00;
  clrram();                //清屏
}

輸出字符串函數
void disp_zf(uint32 x,uint32 y,uint8 *str)
{
char c;
wr_xd((addr_w+16*y+x),0x24);
wr_comm(0xb0);
while(*str!='\0')
{
c = (*str);
wr_auto(c-32);
str++;
}
wr_comm(0xb2);
}
輸出一個字符的函數
void disp_zfyg(uint32 x,uint32 y,uint8 str)
{
char c;
wr_xd((addr_w+16*y+x),0x24);
wr_comm(0xb0);
c = str;
wr_auto(c-32);
wr_comm(0xb2);
}
四、實驗測試4.1IAR軟件的編譯,連接和運行
構建完整的程序:
添加頭文件,中斷處理匯編程序段,初始化函數和主函數:

4.2protues仿真軟件的聯合調試
   為LPC2138芯片選擇Hex文件路徑:
五、實驗結果5.1仿真結果
5.2實驗板結果

六、心得體會
眾所周知,ARM微處理器功能特別的強大,與MC51單片機相比,它更適合做中高端數字系統的微處理器,ARM已經成了現代主流微處理器內核,目前,絕大多數碼產品,如,手機,MP3,MP4,數碼相機,他們的系統都嵌入了ARM系列內核,ARM微處理器更新換代很快,現在的諾基亞N系列智能手機如N78,N79已經采用了ARM11了,使得運行于塞班操作系統S60第三版的應用程序流暢自如。
       回顧起此次設計,至今我仍感慨頗多,從理論到實踐,在整整半個月的日子里,我學到很多很多的東西,不僅鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的內容。通過這次設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才是真正的知識,才能提高自己的實際動手能力和獨立思考的能力。在設計的過程遇到了各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,通過這次設計,把以前所學過的知識重新溫故,鞏固了所學的知識。

七、程序清單
0.png

全部資料51hei下載地址:
f742b19390cf1f8d6846f64f49a49657.rar (193.42 KB, 下載次數: 193)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:775816 發表于 2020-6-11 09:18 | 顯示全部樓層
nice!
很好的一篇帖子!
非常有意義,
適合于學習交流!
回復

使用道具 舉報

ID:672798 發表于 2020-6-20 11:14 來自觸屏版 | 顯示全部樓層
仿真里面沒有k1-4這四個鍵
回復

使用道具 舉報

ID:677001 發表于 2020-6-23 20:46 | 顯示全部樓層
有沒有具體的講解啊  看不懂
回復

使用道具 舉報

ID:792374 發表于 2020-6-29 06:26 | 顯示全部樓層
很棒,仿真也清晰,講解也不錯
回復

使用道具 舉報

6#
無效樓層,該帖已經被刪除
ID:856429 發表于 2021-3-27 12:30 | 顯示全部樓層
文件里的Proteus電路圖是要自己畫嗎
回復

使用道具 舉報

ID:861258 發表于 2021-6-13 16:48 | 顯示全部樓層
謝謝!我可以試試
回復

使用道具 舉報

9#
無效樓層,該帖已經被刪除
10#
無效樓層,該帖已經被刪除
ID:1143234 發表于 2025-1-20 15:31 | 顯示全部樓層
大神,有LPC2138芯片包嗎?我也自學下單片機。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表