實驗一: 一、實驗目的: 1、學會使用Keil、Proteus仿真軟件; 2、掌握P口的輸入、輸出工作方式,學會C51編程與調試方法; 3、掌握發光二極管的控制方法。
二、實驗內容: 如圖1所示,要求采用軟件延時、查表方法控制指示燈,指示燈的花樣至少4個以上;
三、實驗步驟:
1、在Keil軟件下輸入源程序,然后編譯生成HEX文件; (放調試好的程序,希望有注釋) - #include<reg51.h>
- #include<intrins.h>
- Unsignchar led[] =
- {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff };/*LED字模*/
- unsigned int count = 0;/*流水花樣序號*/
- unsigned int speed=20000;/*流水燈初速度*/
- void delay(unsigned inttime){ /*不可變延時函數*/
- unsigned char c=250;
- for( ;time>0;time--)
- for( ;c>0;c--);
- }
- void key1() interrupt 0using 1/*K0中斷*/
- {
- EX0 = 0;
- count++;
- if (count == 4) { count = 0; }
- EX0 = 1;
- }
- void key2() interrupt 2 using2/*K1中斷*/
- {
- speed = speed - 10000;
- if (speed <= 0) {
- speed = 20000;
- }
- delay(3500);
- }
- void main() {
- int i;
- unsigned char Num = 0xff;
- IT0 = 1; /*脈沖觸發方式*/
- IT1 = 1;
- EX0 = 1; /*開中斷*/
- EX1 = 1;
- EA = 1;
- while (1) {
- if (count == 0) { /*花樣1*/
- for (i = 0; i<= 8;i++){ P0 = 0xff;delay(speed); P0 = 0x00;delay(speed);}
- }
- else if (count == 1) { /*花樣2*/
- for (i = 8;i >= 0;i--) { P0 = led[i ];delay(speed); }
- }
- else if (count == 2) { /*花樣3*/
- P0 = Num;delay(speed);Num--;
- }
- else if (count == 3) {/*花樣4*/
- for( i = 0;i < 8;i++) { P0 = led[ i];delay(speed); }
- }
- }
- }
復制代碼
2、在Proteus軟件下畫出電路圖,然后裝載HEX文件運行,反復調試直到看到結果。
(放運行下的圖)
S_3{ITYJ64]YL1(_Q9C5CXV.png (143.9 KB, 下載次數: 84)
下載附件
2017-6-9 09:55 上傳
四、實驗心得:這是我第一次接觸單片機實驗,覺得很有趣,在這個過程中也學到了不少東西。學會了使用proteus和keil兩個軟件,學會基本的畫圖,知道畫圖中也有許多細節的部分,例如如何劃斜線,這些畫圖就像女孩子繡花一個道理,要追求美觀,簡短。怎樣才可以低成本的畫出來等等,都是一個細心活。再有就是寫編程,一開始我就是一個菜鳥,什么都不會,幸虧開始接觸的不是很難,要不然就要崩潰了。想學好編程,第一步就是要看懂別人怎么寫,為什么要這樣寫。然后自己跟著那思路畫一次,接下來就是自己學會創造,怎么寫更加簡單明了 |