學單片機要是有人引導一下,那是最快掌握編程的一種途徑,當然也不能全讓別人來出力出時間來為你工作,自己要做好請教問題的材料,特別是圖文并茂的那種,高手就可以因勢利導指點迷津了,所以我先就準備了我這款單片機的系統原理圖,我想先從點亮LED3開始,簡單的點亮一顆LED應該是比較容易上手的吧,對于新手來說,能掌握這點就算是一腳跨進去了,其他的就不難了。但是萬事開頭難,用C寫程序特別是簡單的IO口操作雖然容易做到,但是從手里開始拿到一款芯片,找到該芯片數據手冊,然后用對應的編輯軟件開始編寫第一句程序往往要花費大量的冤枉寶貴時間,一旦掌握了之后回過頭來看其實很簡單,這個問題就差在沒人直接對癥指導,還有關鍵是自己沒做好讓有心幫忙的大俠能下手幫忙的著手點。我就從這里開始吧。點亮圖中LED3,編輯軟件Keil Uv4...
STC15W204S單片機,開始學編程,請高手指導。。。有圖
寫了那么多,亂了,不要誤以為我是來指導別人的哦,我是來請教各位大師的,特別是用過STC的高手,請教你們的一些經驗,比如你們是用什么編輯軟件的,怎么開始創建一個工程新建一個.c文件,然后又該怎么設置編輯軟件里的一些關鍵設置的@#@#¥%%#,又問的太多了,你只要說一點就夠,然后又有人愿意補充一些...這樣就把頭緒理出來了,我這里上傳一個Keil Uv4
C51.haozip04
C51.haozip05
C51.haozip06
C51.haozip07
C51.haozip08
C51.haozip09
C51.haozip10
C51.haozip11
C51.haozip12
UV4.haozip01
UV4.haozip02
UV4.haozip03
UV4.haozip04
C51.haozip01
C51.haozip02
C51.haozip03
本分卷由2345好壓 編輯軟件,方便跟我一樣需要的新手吧,希望我們共同進步!。上面這些解壓到C盤根目錄新建的一個Keil文件夾下:
版區剛剛成立,希望大家能一起學習,一起進步。
我就先一步一步把我的做法貼出來吧,不對的地方請大俠指導一下:
我在STC官網http://www.mcu-memory.com/上面先下載了這個stc-isp-15xx-v6.53 軟件,然后把我上面的UV4編輯軟件解壓到C盤根目錄下新建的一個叫keil的文件夾下
為什么要這么做我也不知道,好像我是哪個論壇里看到的說要這么做才可以方便STC單片機型號導入什么的,以后再去了解吧,有知道的也說說是不是這樣。然后解壓上面這個stc-isp-15xx-v6.53軟件并雙擊運行打開,打開后界面是這樣的:
點擊右上角小箭頭,出現頭文件欄目后繼續點擊中間出現的按鍵框,“添加MCU型號到Keil中”
太晚了,明天再做了,路過的大俠指導一下啊?。。?/p>
繼續加油
對于這款STC單片機,我跟你一樣一無所知,所以你可以從現在開始跟我一起學,我也在試著學會它,沒學過C語言沒事,你可以上網查上論壇看,多發帖請教,論壇好人多,但記住自己也要勤快點。
經過這段時間的折磨我終于了解了一點這款單片機。并如愿的實現了點亮上面原理圖中的LED3指示燈。
#include "STC15F2K60S2.h"
sbit LEDCONTROL=P1^5;//先定義P1.5這個IO口用LEDCONTROL表示,這個LEDCONTROL可以用別的自己認為好記的代替,比如LEDKZ=P1^5;
sbit LED3=P1^4; //這里定義P1.4這個IO口用LED3表示
void main()
{
while(1)
{
LEDCONTROL=0; //P1.5這個IO口設置為低電平,從原理圖分析這個IO口控制的是
//一個PNP型三極管,拉低后三極管導通,其控制的LED3陽極就有了5V工作電壓
LED3=0; //P1.4這個IO口也設置為低電平,這樣LED3這個指示燈有有電流流通點亮發光了。
}
}
上面只是這個指示燈一直亮著,那么要讓這個指示燈動起來,一亮一滅的好看一點就要用到延時程序了,下面這個就可以做到這個功能:
#include "STC15F2K60S2.h"
sbit LEDCONTROL=P1^5;//先定義P1.4這個IO口用LEDCONTROL表示,這個LEDCONTROL可以用別的自己認為好記的代替,比如LEDKZ=P1^4;
sbit LED3=P1^4; //這里定義P1.5這個IO口用LED3表示
void delay()
{
int i, j;
for (i=0; i<800; i++)
for (j=0; j<500; j++);
}
void main()
{
while(1)
{
LEDCONTROL=0;//P1.5這個IO口設置為低電平,從原理圖分析這個IO口控制的是一個PNP型三極管,拉低后三極管導通,其控制的LED3陽極就有了5V工作電壓
LED3=0; //P1.4這個IO口也設置為低電平,這樣LED3這個指示燈有有電流流通點亮發光了。
delay(); //延時一段時間,也就是上面的LED3=0;這句程序表示LED3這個指示燈亮的狀態延時保持一段時間
LED3=1; //經過上面一段時間延時后,程序運行到這句指令就把P1.4這個IO口拉高了,指示燈就沒回路而熄滅。
}
} //上面這個while(1)是個死循環,就是這幾句指令周而復始一直循環運行下去,那么LED3這個指示燈就一亮一滅的了,直到關閉總電源。
STC給我寄的USB轉串口線是壞的,暈死,難怪一直不能燒芯片,幸虧有臺帶串口輸出的臺式電腦,才驗證了我的程序。
哎,也不見高手來指導一下,是天氣太熱了是吧,沒人想出來逛了,我倒是希望跟我一樣剛學的新手快快的學起來這款芯片,來跟我一起交流學習,接下來我就要寫整個數碼管的數字顯示程序了,有想學的新手如果有不懂上面的可以直接發帖問,不然下面的數碼管你就跟不上了,呵呵。我還想等著你們反過來教教我啊。
沒高手來我就只有硬著頭皮慢慢揣摩了。。。
出于節能與CPU的考慮,delay延時是否可以不要呢,加一句PCON = 0X01;
再搭配定時器使用延時。
還真不知道按什么排版原則發帖跟帖才不會亂,試試跟第一帖效果怎么樣,有論壇發帖經驗的高手也指導一下咱,新手們也學習學習。
下面是我成功數碼顯示功能的程序,新手們可要好好分析了,別小看我這個新手,我可是花了不少時間才琢磨出來的,這個原理圖對單片機的IO口操作很有代表性,我覺得^_^。這就是傳說中的IO口復用吧,當然還有更精辟的IO口復用,咱慢慢來,學單片機就要先分析硬件原理,這里用兩個共陽數碼管顯示,兩組LED的共陰極相同段并在一起,兩組的陽極是分開的,這樣我們顯示時先顯示其中一個數碼管,另外一個關閉,延時幾個毫秒后關閉這個開啟另外那個數碼管,這樣我們眼睛看到的就是兩個數碼管是一起顯示的了,眼睛是分辨不出兩個數碼管其實是輪流顯示的。
#include "STC15W204S.h"
sbit LED=P1^5; //定義控制3個LED的IO口,數碼管顯示的時候這個IO口必須為高電平,否則3個LED就有機會發光了。
sbit ANJIAN=P3^0; //定義控制按鍵的IO口,同樣的道理,數碼管顯示的時候按鍵輸出的IO口也設置為高,經過按鍵隔離電阻后就不影響數碼管顯示了
sbit SHUMA1=P1^1; //定義控制數碼管1的IO口
sbit SHUMA2=P5^5; //定義控制數碼管2的IO口
#define uchar unsigned char
#define uint unsigned int
uchar a=0,b=0;//定義全局變量,也可以在main主函數里局部定義,只是我以后要在別的函數和中斷函數里要用到這個變量。
const unsigned char table1[]={0xEA,0xEF,0xFA,0xEE,0xEF,0xEE,0xEA,0xEF,0xEA,0xEE,0xFF}; //這里數組等我有空了分析給跟我一樣的新手看
const unsigned char table3[]={0xB5,0xFD,0x75,0x75,0x3D,0x37,0x37,0xF5,0x35,0x35,0xFF};
void delay(uchar ms) //延時函數,具體多少時間我不知道,呵呵,不要緊這個時間自己可以修改里面的數字,時間長LED亮度高,相反LED就較暗。
{
uchar i,j;
for(i=0;i
{
for(j=0;j<50;j++);
}
}
void show(uchar xs,uchar k) //顯示函數,把顯示部分分離出來更清晰方便模塊化。
{
LED=1; //控制3個LED三極管Q1的IO口拉高。
P1=0xFF; //P1口全部拉高,這樣其上的LED或數碼管都不亮,
P3=0xFF; //同上,其中還包含了控制按鍵拉高,就是說在顯示函數里屏蔽其他功能以免造成影響。
P5=0xFF; //控制數碼管陽極的Q2的IO口拉高,其控制的數碼管不亮。
if(k==1){SHUMA1&=0;}//這句話的意思就是如果是主函數運行到show(a,1)這個顯示函數那么就是要顯示數碼管1的數字,這是就要開啟控制數碼管1的那個陽極的那個三極管
if(k==0){SHUMA2&=k;}//這句話的意思就是如果是主函數運行到show(b,0)這個顯示函數那么就是要顯示數碼管2的數字,這是就要開啟控制數碼管2的那個陽極的那個三極管
P1&=table1[xs];
P3&=table3[xs];
delay(5);
}
/////////其中的a是代表數碼管的個位,b是代表數碼管的十位。
void main()
{
;
while (1)
{
uint jj;
b=(a==10)?b+1:b;
a=(a==10)?0:a;
b=(b==10)?0:b;
a=(a>9)?9:a;
show(a,1);
show(b,0);
jj++;
if(jj==3100){a=a+1;jj=0;}
}
}
這里上傳這個原理圖的99SE版.schSTC15W204S