① 關於單片機液晶屏LCD12864的程序
/*****************************************************************
*程序名稱:帶漢字型檔的12864液晶顯示模塊驅動
*程序功能:顯示字元 、漢字和圖片
*開發工具:Kile
* MCU型號:AT89S52-24PU
*時鍾頻率:11.0592MHZ
*程序作者:yuan
*版權說明:yuan
*****************************************************************/
#include<reg52.h>
#include "lcd.h"
#include "util.h"
sbit E=P1^5;//脈沖使能
sbit RW=P1^6;//讀寫選擇
sbit RS=P1^7;//數據命令選擇
sbit rst=P3^6;//12864復位
// 延時ms函數:
// 12864檢查狀態函數:
void Check12864State(void)
{
P0=0xff;
E=0;//讀狀態前三控制線的狀態
RS=0;
RW=1;
E=1;//拉高,讀狀態
while((P0&0x80)==0x80);//等待空閑
E=0;//寫命令後三控制線的狀態
RS=1;
RW=0;
}
// 12864寫命令函數:
void Write12864Command( unsigned char com)
{
Check12864State();//檢查狀態
P0=com;//賦值
E=0;//寫命令前三控制線的狀態
RS=0;
RW=0;
E=1;//拉高,寫命令
E=0;//寫命令後三控制線的狀態
RS=1;
RW=1;
}
//12864寫數據函數:
void Write12864Data( unsigned char dat)
{
Check12864State();//檢查狀態
P0=dat;//賦值
E=0;//寫數據前三控制線的狀態
RS=1;
RW=0;
E=1;//拉高,寫數據
E=0;//寫數據後三控制線的狀態
RS=0;
RW=1;
}
//在指定的位置顯示字元串(漢字和ASCII碼字元)函數:
void LCD12864DisplayString( unsigned char y,unsigned char x, unsigned char *pstr)
//y-行數值0-3,x-列數值0-7,pstr-字元串指針
//12864可以顯示32個漢字(四行每行8個),一個地址對應一個漢字
//可以顯示64個ASCII碼字元(四行每行16個),一個地址對應兩個字元
//為了實現自動換行功能,這個函數比較繁瑣
{
unsigned char row,n=0;
Write12864Command(0x30);//基本指令
Write12864Command(0x06);//地址計數器自動加以,游標右移
switch(y)//根據行號選擇行地址
{
case 0:row=0x80;break;//第一行首地址
case 1:row=0x90;break;//第二行首地址
case 2:row=0x88;break;//第三行首地址
case 3:row=0x98;break;//第四行首地址
default:;
}
Write12864Command(row+x);//寫地址
while(*pstr!='\0')
{
Write12864Data(*pstr);//寫字元
pstr++;
n++;//計數
if((n+x*2)==16)//如果一行寫完 ,繼續寫第二行
{
if(y==0) Write12864Command(0x90);//寫下一行地址
else if(y==1) Write12864Command(0x88);//寫下一行地址
else if(y==2) Write12864Command(0x98);//寫下一行地址
else ;
}
else if((n+x*2)==32)//如果第二行寫完 ,繼續寫第三行
{
if(y==0) Write12864Command(0x88);//寫下一行地址
else if(y==1) Write12864Command(0x98);//寫下一行地址
else ;
}
else if((n+x*2)==48)//如果第三行寫完 ,繼續寫第四行
{
if(y==0) Write12864Command(0x98);//寫下一行地址
else ;
}
else ;
}
}
//圖片模式清屏函數:
void Clear12864Screen()
{
unsigned char i,j;
Write12864Command(0x34);//功能設定:8位控制方式,使用擴充指令
Write12864Command(0x36);//使用擴充指令,繪圖顯示控制
for(i=0;i<32;i++)
//ST7920可控制256*32點陣(32行256列),而12864液晶實際的行地址只有0-31行,
//12864液晶的32-63行的行是0-31行地址從第128列劃分一半出來的,所以分為上下兩半屏,
//也就是說第0行和第32行同屬一行,行地址相同;第1行和第33行同屬一行,以此類推
{
Write12864Command(0x80|i);//寫行地址(垂直地址)
Write12864Command(0x80);//寫列地址(水平地址)
for(j=0;j<32;j++)
Write12864Data(0x00);//清屏
}
}
//在任意位置顯示任意大小的圖片函數:
void LCD12864DisplayPictrue(unsigned char y,unsigned char x,
unsigned char px,unsigned char py, unsigned char *pp)
//y-起始行(數值0-63),x-起始列(16位寬,數值0-7),
//px-圖片寬度,py-圖片高度,pp-指針指向圖片數組
//因為上下屏的地址不連續,要在任意位置顯示完整的圖像,處理起來比較繁瑣
{
unsigned char i,j,k;
Clear12864Screen();//清屏
if(y<32)//如果起始行在上半屏
{
k=32-y;//算出上半屏的行數
for(i=0;i<k;i++,y++)//上半屏行數
{
Write12864Command(0x80|y);//寫行地址(垂直地址)
Write12864Command(0x80|x);//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據
}
y=0;//下半屏起始行,接上半屏繼續寫數據
for(;i<py;i++,y++)//下半屏剩下的行數
{
Write12864Command(0x80|y);//寫行地址(垂直地址)
Write12864Command(0x80|(8+x));//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據
}
}
else //如果起始行在下半屏
{
for(i=0;i<py;i++,y++)//行數
{
Write12864Command(0x80|(y-32));//寫行地址(垂直地址)
Write12864Command(0x80|(8+x));//寫列地址(水平地址)
for(j=0;j<px/8;j++)
Write12864Data(pp[i*px/8+j]);//寫圖片數據
}
}
}
void Clear12864Text()
{
Write12864Command(0x34);//清屏
DelayMs(5);
Write12864Command(0x30);//清屏
DelayMs(5);
Write12864Command(0x01);//清屏
DelayMs(5);
}
//12864初始化函數:
void Initialize12864()
{
rst=0;//復位12864
DelayMs(30);
rst=1;
DelayMs(20);
Write12864Command(0x30);//功能設定:8位控制方式,使用基本指令
Write12864Command(0x08);//顯示關
Write12864Command(0x01);//清屏
Write12864Command(0x06);//地址計數器加一、游標右移
Write12864Command(0x0c);//顯示開
}
帶字型檔的驅動
② 單片機實訓心得
通過為期一周的單片機實訓,是我們對這門課有了許多新的了解,彌補了在課堂上學習的不足。相信這對我們賀廳以後的學習和工作都會有很大的幫助。我們一定要在最短的時間里對這些不足加以改正!
首先,在這次試訓中我被單片機強大的功能所震撼,以前在課堂上完全沒有能理解可編程單片機的優越性。這次通過實體模擬軟體等輔助軟體的共同效果,是這次試訓有了鮮明的活力。換是我們認識
到這次試訓不僅僅是一個軟體的應用,更多的是使我們認識到學習到很多在課堂上無法得到的東西。特別是protues軟體的功能是我們了解了當今開發系統的新方向,簡直太不可思議啦!
單片機作為一種最簡單的軟體,與我們的日常生活息息相關,了解一些單片機程序的簡單錄入是費城必要的。如:LED顯示器、鍵盤和顯示器的應用和原理。
在被刺實訓中我們每個人通過一個八位流水燈的製作,使我們深深地體會到了單片機在現實生活中的小小應用,既增強了我們的好奇心,又鞏固了我們的理論知識。更讓我們體會到了單片機手動的開
始平台的完善與成熟。只要你有想法,單片機就有可能讓他成為現實。這里我學習完protues軟體後的第一感覺是,雖然這軟體工作不穩定,但是會有相當不錯的效果出來。這對我以後的工作一定咐拍旦會有幫助的。在這次試訓中不僅只對單片機編程有了新的認識,還對整個單片機的開發平台都有了一廳的了解,這是一筆不錯的收獲。
通過這幾天的試訓,使我的感觸很深,真實「條條大路通羅馬」,要達到目的,不同的人就有不同的方法。只要你的方法不錯!五花八門都可以,而且是各有特色。走出來的結果都有各自的獨到之處
。在編程中「簡」字貫穿於整個程序設計中,越簡單越好,畢竟單片機留給用戶的資源是有限的,所以我們要充分利用這些資源,達到更好的效果,這些是我們在以後的學習生活中應值得注意的地方。
在試訓中有苦有甜,當我們為一個很難攻破的程序找出路時,心情煩躁,感覺自己很不可理喻,當程序一點一點編好後,自己從心底感覺到一點小小的安慰,看著自己的成果。感覺很欣慰,有一絲絲的
甜意,幾天的實訓使自己的思維邏輯也有了小小的進步。
2.結束了兩周的電視機實訓,我們又迎來了單片機課程設計實訓,真是讓我們受益匪淺啊?學到了很多東西,不管怎麼樣,先感謝學校給我的這么多機會.真正的學到了東西.為期一周的單片衡擾機課程設計讓我們受益匪淺.此次課程設計軟體與硬體相結合,考察了我們的焊接水平與編程能力.對於我們應用電子技術的學生而言焊接是不成問題,也很順利;可到了編程時就出現了很大的障礙,先開始的顯示時鍾還算順利,下面的報警部分就花費了相當長的時間,還有加上報警時的音樂也是我們到圖書館里查閱資料由匯編轉化成C語言得來的.本來還以為編程會很簡單的,等到實際操作起來才知道它的復雜性,沒有想像中的那麼得心應手,理解流程是有思維的前提.單片機是我們上學期開設的課程,所以很多專業知識也都忘記了.不過經過我們一步步的努力,花費的時間與精力終於沒有白費,效果漸漸地出現了.其實本身程序的思維是正確的,只是步驟中有點小錯誤,所以導致整個程序的結果很亂,在仔細修改程序之後,終於一步步地達到效果了.
我們將各個部分的程序編好後怎麼都連不起來,出不了預期的效果.對於硬體在編程過程中PCB板的接觸又是一個頭疼的問題,在進行編譯的時候,數碼顯示管上什麼都沒有,按一下旁邊與之相連的元器件時就有顯示了,所以也花費了好多時間在PCB板的重新焊接上.對於軟體我們在時鍾完成後就對其加入了報警系統,可加了之後發現程序亂了,以前的時鍾也不可以控制了.經過反復研究,發現接地接錯了位置,導致了用來報警的紅燈跟綠燈根本不亮,然後就將 接地線重新焊接了一下,功夫不負有心人,紅燈亮了,配合編好的程序,用紙板擋住了發射管與接收管之間的信號傳輸,數碼顯示管出現閃爍的效果,並且沒信號的時候綠燈亮,有信號的時候紅燈就亮了,這個現象讓我們喜出望外.經過修改時鍾程序和報警系統都被使用上了,可更大的難題就是如何讓它報警?這困擾了我們,數碼顯示管上終於有了閃爍的效果,可報警聲還沒加的上去.老師的要求是除了蜂鳴器上的報警聲再加一段音樂.翻閱了圖書館里的書籍,查出來的音樂程序都是用匯編編的,要將此程序放到主程序中就必須將匯編程序改編成C語言程序.這再次困擾了我們,雖然以前也學過匯編跟C之間的互換,可都是簡單的,從沒涉及到這么復雜的程序過,改編很是有壓力,經過研究,我們將匯編程序舍棄了,到網上下載了一段音樂程序,是C語言編的.要讓音樂在我們的紅外報警系統中唱出來可不是什麼簡單的事情,雖然找到了音樂程序,但要讓音樂程序跟我們的主程序融合在一起得花費點心思了.
最後在全組人竭盡全力,老師的精心指導下,程序基本編寫成功,這是我們共同努力的結果,在享受我們成果之時,不得不感慨單片機的重要性與高難度性,所以為期一周的單片機課程設計沒有浪費,我們從中學到了很多知識.,也讓我們對單片機有了更深一步的了解.雖然最後結果是出來了,可這與老師的精心指導是分不開的,她引導我們的思路,本來一竅不通的我們經過老師的點撥基本上通了,所以說老師是功不可抹的.
總而言之,單片機課程設計對於我們有很大的幫助,我們從中受益匪淺!
③ 簡論單片機課程中單片機實驗教學探究
簡論單片機課程中單片機實驗教學探究
論文摘要:單片機的開發與應用、學習將造就一批計算機智能化控制的工程師、科學家。一些中等院校也相繼開設了單片機課程設計及相關的課程。在單片機及介面技術課程的教學過程中,實驗教學是重要的組成部分。針對單片機課程的教學改革,不斷加強單片機課程實驗環節,改革教學方法,虛擬模擬實驗在單片機教學中的應用,實踐表明,該方法有利於激發學生的學習興趣,培養學生的工程素養和創新能力,提高了教學效果。
論文關鍵詞:單片機;教學;模擬實驗
「單片機原理」是一門理論性、邏輯性、實踐性很強的學科,是電類專業一門非常重要的專業基礎課,把微機介面部分、匯編語言部分、通信技術部分的知識點等綜合在一起,屬於邏輯性、工程性、技術性、實踐性很強的一門專業基礎課。該課程作為電類專業最重要的核心課程之一,它是電類專業高素質技能型人才所需全部自動控制類知識結構的載體,占據著非常重要的位置。
然而,傳統的單片機教學一般注重課程本身的體系結構和前後的邏輯聯系,均以學科體系為出發點,忽略了「可學性」,致使學生學得吃力,老師教得辛苦,教學效果卻沒有顯現出來。
一、研究背景及意義
目前,全國將單片機列入單獨的比賽項目,在考查中注重學生的能力培養,學生的技能素養教育成為重中之重,加之社會需求高技能人才,許多學校為了適應社會的發展和市場需求在不同的專業開設了單片機課程,然而單片機課程是一門實踐性很強的課程,要想在教學過程中取得很好的效果,就必須要求學生在學習過程中多動手實踐,但有的學校教學設備有限,怎樣解決這個問題。模擬實驗課可以讓學生在單片機工作室里做中學,真正玩轉單片機,也同時解決了學生學起來枯燥,老師教起來吃力的尷尬局面。
目前單片機教學中存在諸多問題。如單片機課程理論為主,實驗教學多是進行驗證性實驗。單片機實驗室存在場地和時間限制,學生除了課上,很難有機會接觸到所需要的設備,如模擬器、實驗板等,個人配備成本太高,個體無法承擔。而且實驗箱只能驗證試驗的基本作用和意義,就無從談起學生動手能力的訓練和提升。單片機在當今社會中的應用速度發展迅速,然而單片機教材陳舊,實驗設備很容易落後、老化等問題,必然會帶來耗資等問題。由此可見,構建成本低廉的單片機模擬實驗系統對於單片機教學意義重大。它不僅可以降低實驗設備投資,而且能培提高學生的工程素質,養學生的創新精神。在單片機控制系統的設計開發過程中,我們不單要突出設備的自動化程度及智能性,另一方面也要重視控制系統的工作穩定性,否則就無法體現控制系統的優越性。
由於單片機控制系統應用系統的工作環境往往是比較惡劣和復雜的,其應用的可靠性、安全性就成為一個非常突出的問題。單片機控制系統應用必須長期穩定、可靠地運行,否則將導致控制誤差加大,嚴重時會使系統失靈,甚至造成巨大的損失。
影響單片機控制系統應用的可靠、安全運行的主要因素是來自系統內部和外部的各種電氣干擾,以及系統結果設計、元器件選擇、安裝、製造工藝和外部環境條件等。這些因素對控制系統造成的干擾後果主要表現在下述幾個方面。(1)數據採集誤差加大。(2)控制狀態失靈。(3)數據受干擾發生變化。(4)程序運行失常。
由於受到干擾後計數器的值是隨機的,因而導致程序混亂。通常的情況是程序將執行一系列毫無意義的指令,最後進入「死循環」,這將使輸出嚴重混亂或系統失靈。
隨著單片機及其介面技術的飛速發展,目前面對職業教育存在的突出問題:質量能力與規模能力不相適應,教學信息化程度低,古老的填鴨式課堂教學模式仍應用普遍,「雙師型」教師隊伍建設機制缺乏完善性,科學管理水平和改革創新能力就提到了日程,管理制度不健全,學校基本辦學規范不健全,科學的職業教育評價標准和評價機制達不到標准,學生成長的「通道」不暢通。
從新的教學要求來看,這類課程僅在課堂上講授基本原理是不夠的,必須在教學中加強實踐環節,開出一定數量的高質量的配套實驗課活獨立的實驗課程,讓學生有足夠的實驗機會。那麼對於單片機實驗教學環境建設就相應提出了高要求。怎樣解決這個問題,單片機模擬實驗應運而生。
二、「單片機模擬實驗」初探
伴隨著計算機技術的飛速發展,在各個領域都出現了各種模擬系統,為各種實際系統的開發提供了准確可靠的保證,同時為很多學校、企業等節約了大量的人力和物力。在電子信息技術領域也同樣出現了大量的模擬工具,如課堂上用到的各種EDA工具;模數混合模擬的Protel、Multisim等常見的電子應用模擬軟體,數字系統設計的Fundation、Maxplus II、Expert等。
所謂「模擬」,就是通過開發工具真實地模擬用戶系統的運行環境,使用戶能夠在透明和可控的條件下觀察系統運行過程中的狀態和結果,模擬實際上也是一種軟體和硬體的綜合調試手段,它能提高應用系統開發的效率。
用通俗的話來描述「單片機模擬實驗」就是在一塊虛擬電路板上按照真實電路的設計構想放置一些虛擬的元器件,並模擬實際燒ROM的過程鏈接上程序代碼,「接通」電路觀察效果,如果不理想的話可以反復修改電路或程序代碼,直至符合設計要求為止。
模擬實驗的好處是顯而易見的。在沒有模擬實驗的年代,每架構一個真實的電路都需要費時費力費錢,稍有不慎還有可能前功盡棄,再加上單片機中的ROM晶元是有擦寫次數的,而一段程序可能需要修改擦寫多次,無形中減少了ROM晶元的使用壽命。模擬實驗是在計算機上進行的(可能會費點兒電),以上問題都不存在,而且就現在的模擬軟體來說,模擬出來的電路效果與真實電路一模一樣,毫不誇張地說,只要模擬是成功的,就可以直接下工廠的流水線生產了。
④ 單片機的學習方法
從剛開始接觸單片機,到現在已經有3年的時間了,在這期間學習和使用了51單片機、飛思卡爾單片機,LPC2138,PIC16F887等系列的單片機,每接觸一款單片機,都會經歷熟悉其基本開發,然後將其用於項目中的過程,對於如何學習一款單片機,自己做了如下的總結。
大家都知道,51單片機是最容易入門的,不僅因為其編程簡單,更重要的是網上的資料非常豐富。所以一般學習單片機開發的都將51單片機作為入門開發的首選。我學習51單片機的時候是採用這樣的一個步驟進行學習的:
第一步(熟悉的過程):在網上找學習資料,在網上看了很多。印像最深的要數王雲老師的雲龍51單片機視頻教程,因為這個教程從基礎到復雜的編程慢慢深入,邊講邊寫代碼,講的比較的全面,而且也生動,所以那一階段,也是我學習單片機進步最快的階段,這時對51單片機也就沒有感到陌生了。通過視頻讓我知道了該怎樣學習單片機,學習單片機,要從實驗入手,先熟悉單片機再說,開發語言開始使用的是C語言比匯編更好理解。
第二步(進階的過程):有了第一步的基礎之後,接下來的便是進階的過程,買了一款51單片機開發板,然後就開始了我的學習之旅,每次聽課的時候,按照上面的實驗,以及課堂上面調試程序時出現的一些問題,自己認真的在電腦上進行調試,並分析產生故障的原因,讓我有了一定的開發基礎。在看完了視頻教程之後,後面又對基礎的知識進行了下補習,主要是看單片機原理性的教材,因為有些細節性的東西還是要從教材上面獲得。圍繞單片機的LED燈進行控制,通過控制LED燈的亮、滅,熟悉了51單片機的內部的各種資源,這樣就能使我在很短的時間內,將51單片機內部的各個功能部件全部都使用到了。
第三步(項目實戰的階段):學習單片機的時候,雖然也編寫了一些程序,但是那些都是一些很小的模塊程序,並沒有起到綜合應用的目的,所以在這之後,我和另外一個學習硬體的同學一起組成了一個小的團隊,進行項目實踐開發,那時候,實驗室的條件比價好,有很多的器件可以自己使用。所以,我們就設計了我們的第一個作品,基於單片機的液體點滴監控系統。做這個系統時,就將以前單片機所學的知識,做了一個綜合的應用,包括有LCD1602控制,串口的控制等。
經過以上三個步驟的學習之後,對於51單片機的開發基本上就算入門了。而對於其他類型的單片機,如飛思卡爾單片機,LPC2148 ARM7單片機,PIC16F887等,雖然每個系列的功能不一樣,但是最基本的編程思想還是一樣的,不同的可能就是編譯器,程序下載的軟體等差別,所以有了51單片機的開發基礎之後,學習其他單片機所採用的方法就是一個差異化的學習,學習各種單片機不同的地方,這樣,就能很快的熟悉一款新的型號的單片機。
⑤ 請問有沒有和multisim差不多的軟體
multisim模擬和軟體免費下載
鏈接:https://pan..com/s/1m-WJf0GOte6qKKBdA8g2gw
Multisim是美國國家儀器(NI)有限公司推出的以Windows為基礎的模擬工具,適用於板級賀漏余的模擬/數字禪滾電路板的設計工作。它包含了電路原理圖的圖形輸入、電路硬體描述語言輸入方式,搜沒具有豐富的模擬分析能力。
⑥ 單片機學習網站推薦
想學單片機,現在專門的電子論壇基本都有單片機板塊,並且是按照單片機類型細分的,裡面的資料都是很多的。學習來非常方便。推薦好的單片機學習網站有:凡億課程,21IC,elecfans等。其中從零基礎入門、最全面的視頻教程則是凡億教育的凡億課堂。 網路裡面也有詳細介紹。
⑦ 單片機的原理
看書加實驗加慢慢培養感情!
1)找一本入門的書,比如高校教材,耐心的啃至少2遍。重點搞清楚啥是寄存器,單板機的內部結構是啥樣的。就是前面最枯燥,最看不懂的那幾章。後面的匯編語言倒在其次。不過如果你有耐心把後面的匯編語言也看個半懂不懂的話,會對你很有幫助,那些匯編其實是可以幫助你理解的!
2)找本C語言的書,比如清華的那個好好的啃兩遍。輔助一些實驗比如在計算機上用TC寫寫萬年歷啊等等小程序,不用特別復雜的旨在學會語句也語法的使用。
3)當你完成了以上艱辛的枯燥的時時刻刻不斷的讓利想撞牆的兩個步驟以後。可以恭喜你,你開始開始入門了。
4)找本單片機編程的書,簡單熟悉一個編譯環境,比如KEIL,IAR等等都可以。這個階段會比較輕松。
5)現在我們可以開始做實驗了,利用編譯器的模擬編程環境,試著寫寫程序,或者調試一下別人寫的程序,記住這個階段並不是說你就在寫單片機的程序,這個階段主要的目的還是讓你熟悉編譯環境,還有就是要把你寫的代碼由神鬼不識變到基本能用。
6)最後,你就說要花點血本找個實驗板開始實際操作了,實驗板你可以在學校借或者直接買個SST之類的帶串口模擬功能的MCU上網找個實驗板的圖紙自己回來焊(成本估計在50元以內)。如果你有足夠的經濟支持可以去買一個小型的實驗板,這個在淘寶上面有賣價格大概在300以內。再或者你如果有搞這方面工作的朋友找他們要一個模擬頭也是一個不錯的選擇。
7)當以上的工作你都完成了以後,你就可以連上你的MCU開始實際操作,和實際的實驗了。當你可以在MCU裡面自己寫一個萬年歷加溫度計加LED顯示程序以後,恭喜你,你已經邁入了初級水平了。後面的路就要自己慢慢走了。
完成以上7步預計那些已經打通奇經八脈的人需要2月有餘,如果是一個努力地菜鳥的話需要4--6個月!