十天學(xué)會(huì)單片機(jī)C語言-課后習(xí)題答案_第1頁
十天學(xué)會(huì)單片機(jī)C語言-課后習(xí)題答案_第2頁
十天學(xué)會(huì)單片機(jī)C語言-課后習(xí)題答案_第3頁
十天學(xué)會(huì)單片機(jī)C語言-課后習(xí)題答案_第4頁
十天學(xué)會(huì)單片機(jī)C語言-課后習(xí)題答案_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

所有課作業(yè)+答案,特別整理,供單片機(jī)愛好與學(xué)習(xí)者使用

講次內(nèi)容細(xì)節(jié)

第一講學(xué)單片機(jī)預(yù)備知識(shí)、

如何點(diǎn)亮一個(gè)發(fā)光管單片機(jī)能做什么,基本電子知識(shí),如何用TX-1C單片機(jī)學(xué)習(xí)板學(xué)習(xí)單

片機(jī),C51知識(shí)簡(jiǎn)介,如何申請(qǐng)免費(fèi)芯片樣品。點(diǎn)亮一個(gè)發(fā)光管,

第二講流水燈設(shè)計(jì)、蜂鳴器發(fā)聲、繼電器控制簡(jiǎn)單延時(shí)程序、子程序調(diào)用、帶參數(shù)子程

序設(shè)計(jì)、流水燈同時(shí)蜂鳴器響、如何驅(qū)動(dòng)蜂鳴器,及如何驅(qū)動(dòng)繼電器,集電極開路的概念及

應(yīng)用。

第三講數(shù)碼管顯示的原理、數(shù)碼管的靜態(tài)顯示共陽、共陰數(shù)碼管顯示原理、定時(shí)器工作

方式介紹、重點(diǎn)講述工作方式2.中斷概念及中斷函數(shù)寫法、外部中斷試驗(yàn)、定時(shí)器中斷應(yīng)

第四講數(shù)碼管的動(dòng)態(tài)顯示原理及應(yīng)用實(shí)現(xiàn)動(dòng)態(tài)掃描概念、定時(shí)器、中斷加深

用單片機(jī)的定時(shí)器及中斷設(shè)計(jì)一個(gè)60秒定時(shí)器

第五講獨(dú)立鍵盤、矩陣鍵盤

的檢測(cè)原理及實(shí)現(xiàn)鍵盤用來做什么、如何鍵盤檢測(cè)、消抖、鍵盤編碼、帶返回值函數(shù)寫

法及應(yīng)用

第六講AD、DA的工作原理

及實(shí)現(xiàn)、運(yùn)放電路模擬電壓與數(shù)字電壓的關(guān)系、為什么要使用AD及DA、ADC0804的操

作方法、DAC0832的操作方法

第七講串口通訊原理及操作流程串口通訊工作方式、10位數(shù)據(jù)通訊、波特率概念、如

何根據(jù)波特率計(jì)算定時(shí)器初值、串口打印在調(diào)試程序中的應(yīng)用。

第八講1602液晶、12864液晶顯示原理及實(shí)現(xiàn)最簡(jiǎn)單液晶工作原理、如何開始對(duì)一個(gè)沒

有任何概念的芯片開始單片機(jī)的操作

第九講IIC總線AT24co2芯片工作原理IIC總線工作原理、

目前非常通用的一種通信機(jī)制

第十講利用51單片機(jī)的定時(shí)器設(shè)計(jì)一個(gè)時(shí)鐘綜合運(yùn)用51單片機(jī)知識(shí)設(shè)計(jì)一個(gè)可以隨

意調(diào)節(jié)時(shí)間、帶整點(diǎn)鬧鈴的時(shí)鐘。(其中用到定時(shí)器、中斷、按鍵、蜂鳴器、數(shù)碼管或串口

通信)

第十一講用DS12c887時(shí)鐘芯片設(shè)計(jì)一個(gè)高精度時(shí)鐘DS12c887內(nèi)部帶有鋰電池,系

統(tǒng)掉電情況下可自行精確走10年,并帶有鬧鐘功能、年、月、日、時(shí)、分、秒等.(本節(jié)由

學(xué)生自己設(shè)計(jì)電路)

第十二講使用Protell99繪制電路圖全過程Protel199軟件使用、元件庫、封裝庫設(shè)

計(jì)、繪制原理圖、錯(cuò)誤檢查、生成PCB、手動(dòng)、自動(dòng)布線、送去加工

第十三講Altiumdesigner6.5繪制電路圖全過程最頂級(jí)電路板設(shè)計(jì)軟件Altium

Designer使用、元件庫、封裝庫設(shè)計(jì)、繪制原理圖、錯(cuò)誤檢查、生成PCB、手動(dòng)、自動(dòng)布線、

送去加工

lessonl

對(duì)照TX-1C單片機(jī)學(xué)習(xí)板原理圖寫程序

用位操作和總線操作兩種方法完成以下題目

1.熟練建立KEIL工程

2.點(diǎn)亮第一個(gè)發(fā)光管.

3.點(diǎn)亮最后一個(gè)發(fā)光管

4.點(diǎn)亮1、3、5、7

5.點(diǎn)亮二、四、五、六

6.嘗試讓第一個(gè)發(fā)光管閃爍

7.嘗試設(shè)計(jì)出流水燈程序

lesson2

第一個(gè)發(fā)光管以間隔200ms閃爍

8個(gè)發(fā)光管由上至下間隔1s流動(dòng),其中每個(gè)管亮500ms,滅500ms,亮

時(shí)蜂鳴器響,滅時(shí)關(guān)閉蜂鳴器,一直重復(fù)下去。

8個(gè)發(fā)光管來回流動(dòng),每個(gè)管亮100ms,流動(dòng)時(shí)讓蜂鳴器發(fā)出“滴滴”

聲。

用8個(gè)發(fā)光管演示出8位二進(jìn)制數(shù)累加過程。

8個(gè)發(fā)光管間隔200ms由上至下,再由下至上,再重復(fù)一次,然后全

部熄滅再以300ms間隔全部閃爍5次。重復(fù)此過程。

間隔300ms第一次一個(gè)管亮流動(dòng)一次,第二次兩個(gè)管亮流動(dòng),依次到

8個(gè)管亮,然后重復(fù)整個(gè)過程。

間隔300ms先奇數(shù)亮再偶數(shù)亮,循環(huán)三次;一個(gè)燈上下循環(huán)三次;兩

個(gè)分別從兩邊往中間流動(dòng)三次;再從中間往兩邊流動(dòng)三次;8個(gè)全部

閃爍3次;關(guān)閉發(fā)光管,程序停止。

lesson3

1、利用定時(shí)/計(jì)數(shù)器TO從Pl.0輸出周期為1s的方波,讓發(fā)光二極

管以1HZ閃爍,設(shè)晶振頻率為12MHz-

2、利用定時(shí)/計(jì)數(shù)器T1產(chǎn)生定時(shí)時(shí)鐘,由P1口控制8個(gè)發(fā)光二極管,

使8個(gè)指示燈依次一個(gè)一個(gè)閃動(dòng),閃動(dòng)頻率為10次/秒(8個(gè)燈依次

亮一遍為一個(gè)周期),循環(huán)。

3、同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲,定時(shí)器0控制頻率,定時(shí)器

1控制同個(gè)頻率持續(xù)的時(shí)間,間隔300nls依次輸出1,10,50,100,

200,400,800,

lk(hz)的方波。

4、用定時(shí)器以間隔500Ms在6位數(shù)碼管上依次顯示0、1、2、3....C、

D、E、F,重復(fù)。

lesson4

1.利用動(dòng)態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的654321.

2.用動(dòng)態(tài)掃描方法和定時(shí)器1在數(shù)碼管的前三位顯示出秒表,精確到

1%秒,即后兩位顯示1%秒,一直循環(huán)下去。

3.利用動(dòng)態(tài)掃描和定時(shí)器1在數(shù)碼管上顯示出從765432開始以1/10

秒的速度往下遞減直至765398并保持顯示此數(shù),與此同時(shí)利用定時(shí)

器0以500MS速度進(jìn)行流水燈從上至下移動(dòng),當(dāng)數(shù)碼管上數(shù)減到停止

時(shí),實(shí)驗(yàn)板上流水燈也停止然后全部開始閃爍,3秒后(用T0定時(shí))

流水燈全部關(guān)閉、數(shù)碼管上顯示出“HELLO"。到此保持住。

lesson5

數(shù)碼管前三位顯示一個(gè)跑表,從000到999之間以1%秒速度運(yùn)行,

當(dāng)按下一個(gè)獨(dú)立鍵盤時(shí)跑表停止,松開手后跑表繼續(xù)運(yùn)行。(用定時(shí)

器設(shè)計(jì)表)。

在上題的基礎(chǔ)上,用另外三個(gè)獨(dú)立鍵盤實(shí)現(xiàn)按下第一個(gè)時(shí)計(jì)時(shí)停止,

按下第二個(gè)時(shí)計(jì)時(shí)開始,按下第三個(gè)是計(jì)數(shù)值清零從頭開始。

按下16個(gè)矩陣鍵盤依次在數(shù)碼管上顯示1-16的平方。如按下第一個(gè)

顯示1,第二個(gè)顯示4...

lesson7

1.由上位機(jī)發(fā)送1給單片機(jī)時(shí),蜂鳴器以400ms頻率發(fā)聲,發(fā)2時(shí)以

200ms頻率發(fā)聲,發(fā)3時(shí)以100ms頻率發(fā)聲,發(fā)4時(shí)關(guān)閑蜂鳴器。

1.以2400bps從計(jì)算機(jī)發(fā)送任一字節(jié)數(shù)據(jù),當(dāng)單片機(jī)收到該數(shù)據(jù)后,

在此數(shù)據(jù)前加上一序號(hào)然后連同此數(shù)據(jù)一起發(fā)送至計(jì)算機(jī),當(dāng)序號(hào)超

過255時(shí)歸零.

2.以16進(jìn)制發(fā)送一個(gè)0-65536之間的任一數(shù),當(dāng)單片機(jī)收到后在數(shù)

碼管上動(dòng)態(tài)顯示出來,波特率自定。

3.用AD以1HZ的頻率采集模擬信號(hào),然后轉(zhuǎn)換成數(shù)字量,再將其以

1200bps發(fā)送到計(jì)算機(jī),在計(jì)算機(jī)上顯示。

4.按下矩陣鍵盤第一行時(shí)以1200bps發(fā)送,1,2,3,4,第二行時(shí)以

2400bps發(fā)送5,6,7,8,第三行以4800bps發(fā)送,9,10,11,12,

第四行以9600pbs發(fā)送,13,14,15,16.

Lessonl作業(yè)

1用位操作點(diǎn)亮第一個(gè)發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

I*********************************************************I

#include<reg52.h>//52單片機(jī)頭文件

sbitledl=PlA0;〃單片機(jī)管腳位聲明

voidmain0〃主函數(shù)

ledl=O;〃將單片機(jī)PL0口清零

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

)

2/用總線操作點(diǎn)亮第一個(gè)發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

I*********************************************************I

#include<reg52.h>〃52單片機(jī)頭文件

voidmain()〃主函數(shù)

(

Pl=0xfe;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為11111110

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

3//用位操作點(diǎn)亮最后一個(gè)發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

sbitled8=PlA7;〃單片機(jī)管腳位聲明

voidmain()//主函數(shù)

(

led8=0;〃將單片機(jī)Pl.7口清零

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

)

4//用總線操作點(diǎn)亮最后一個(gè)發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>〃52單片機(jī)頭文件

voidmain()//主函數(shù)

(

Pl=0x7f;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為01111111

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫.

)

5//用位操作點(diǎn)亮1,3,5,7發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>〃52單片機(jī)頭文件

sbitledl=PlAO;〃單片機(jī)管腳位聲明

sbitled3=PlA2;〃單片機(jī)管腳位聲明

sbitled5=PlA4;〃單片機(jī)管腳位聲明

sbitled7=PlA6;〃單片機(jī)管腳位聲明

voidmain0//主函數(shù)

(

ledl=0;〃將單片機(jī)PL0口清零

led3=0;〃將單片機(jī)Pl.2口清零

led5=0;〃將單片機(jī)PL4口清零

led7=0;//將單片機(jī)Pl.6口清零

whiled);〃程序停止在這里,在后面會(huì)講到為什么這樣寫.

)

6//用總線操作點(diǎn)亮1,3,5,7發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>〃52單片機(jī)頭文件

voidmain0//主函數(shù)

Pl=0xaa;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為10101010

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

//用位操作點(diǎn)亮2,4,5,6發(fā)光管.

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

!*********************************************************I

#include<reg52.h>//52單片機(jī)頭文件

sbitled2=PlAl;//單片機(jī)管腳位聲明

sbitled4=PlA3;//單片機(jī)管腳位聲明

sbitled5=PlA4;//單片機(jī)管腳位聲明

sbitled6=PlA5;//單片機(jī)管腳位聲明

voidmain0//主函數(shù)

(

led2=0;〃將單片機(jī)Pl.1口清零

led4=0;"將單片機(jī)PL3口清零

led5=0;//將單片機(jī)Pl.4口清零

led6=0;//將單片機(jī)Pl.5口清零

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

)

8//用總線操作點(diǎn)亮2,4,5,6發(fā)光管.

〃適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>〃52單片機(jī)頭文件

voidmain0//主函數(shù)

(

Pl=0xc5;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為11000101

while(l);〃程序停止在這里,在后面會(huì)講到為什么這樣寫。

)

9〃嘗試讓第一個(gè)發(fā)光管閃爍.(程序看不懂沒關(guān)系,后面章節(jié)會(huì)有詳細(xì)講解)

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>〃52單片機(jī)頭文件

sbitledl=PlA0;〃單片機(jī)管腳位聲明

voidmain()//主函數(shù)

unsignedinti;〃定義一個(gè)int型變量

while(1)

i=50000;〃變量賦初值為50000

ledl=0;//點(diǎn)亮燈

while(i一);//延時(shí)

i=50000;

ledl=l;〃熄滅燈

whiled—);

9//嘗試寫出流水燈程序(程序看不懂沒關(guān)系,后面章節(jié)會(huì)有詳細(xì)講解)

//適用TXTC單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

voidmain0〃主函數(shù)

(

unsignedinti;〃定義一個(gè)int型變量

while(1)

i=50000;//變量賦初值為50000

Pl=0xfe;〃點(diǎn)亮第一個(gè)燈

whi1e(i-);〃延時(shí)

i=50000;〃變量賦初值為50000

Pl=0xfd;〃點(diǎn)亮第二個(gè)燈

whi1e(i-);//延時(shí)

i=50000;//變量賦初值為50000

Pl=0xfb;〃點(diǎn)亮第三個(gè)燈

whiled—);//延時(shí)

i=50000;//變量賦初值為50000

Pl=0xf7;〃點(diǎn)亮第四個(gè)燈

whi1e(i-);//延時(shí)

i=50000;//變量賦初值為50000

Pl=0xef;//點(diǎn)亮第五個(gè)燈

while(i一);〃延時(shí)

i=50000;〃變量賦初值為50000

Pl=0xdf;〃點(diǎn)亮第六個(gè)燈

whi1e(i-);//延時(shí)

i=50000;//變量賦初值為50000

Pl=0xbf;//點(diǎn)亮第七個(gè)燈

whiled―);//延時(shí)

i=50000;〃變量賦初值為50000

Pl=0x7f;//點(diǎn)亮第八個(gè)燈

whi1e(i-);//延時(shí)

)

Lesson2

1//第一個(gè)發(fā)光管以間隔200ms閃爍

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitledl=PlA0;〃單片機(jī)管腳位聲明

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{//delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

voidmain()//主函數(shù)

while(l)//大循環(huán)

(

ledl=0;〃點(diǎn)亮小燈

delay(200);〃延時(shí)200毫秒

ledl=l;//熄滅小燈

delay(200);〃延時(shí)200毫秒

)

)

2//8個(gè)發(fā)光管由上至下間隔1s流動(dòng)

//,其中每個(gè)管亮500ms,滅500ms,亮?xí)r蜂鳴器響

〃,滅時(shí)關(guān)閉蜂鳴器,一直重復(fù)下去。

//適用TX-1C單片機(jī)實(shí)驗(yàn)板

//晶振為11.0592M

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint//宏定義

#defineucharunsignedchar〃宏定義

sbitbeep=P2A3;

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{//delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

voidmain0〃主函數(shù)

(

uchara;

a=0xfe;

while(1)〃大循環(huán)

(

Pl=a;〃點(diǎn)亮小燈

beep=0;〃開啟蜂鳴器

delay(500);〃延時(shí)500毫秒

Pl=0xff;〃熄滅小燈

beep=l;〃關(guān)閉蜂鳴器

delay(500);〃延時(shí)500毫秒

a=_crol.(a,1);//將a變量循環(huán)左移一位

)

3/*

8個(gè)發(fā)光管來回流動(dòng),

每個(gè)管亮100ms,流動(dòng)時(shí)讓蜂鳴器發(fā)出"滴滴"聲.

I*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitbeep=P2A3;

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{“delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

voidmain0〃主函數(shù)

(

uchara,i;

while(l)〃大循環(huán)

(

a=0xfe;〃賦初值

for(i=0;i<8;i++)〃左移

Pl=a;〃點(diǎn)亮小燈

beep=0;〃開啟蜂鳴器

delay(50);〃延時(shí)50毫秒

beep=l;〃關(guān)閉蜂鳴器

delay(50);//再延時(shí)50毫秒

a=_crol_(a,1);//將a變量循環(huán)左移一位

a=0x7f;

for(i=0;i<8;i++)〃右移

Pl=a;〃點(diǎn)亮小燈

beep=0;〃開啟蜂鳴器

delay(50);〃延時(shí)50毫秒

beep=l;〃關(guān)閉蜂鳴器

delay(50);//再延時(shí)50毫秒

a=_cror_(a,1);〃將a變量循環(huán)右移一位

)

)

4/*

用8個(gè)發(fā)光管演示出8位二進(jìn)制數(shù)累加過程。

*/

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{//delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

voidmain0〃主函數(shù)

(

uchara;

while(l)〃大循環(huán)

(

a++;

Pl=a;

delay(200);

)

)

5/*

8個(gè)發(fā)光管間隔200ms由上至下,

再由下至上,再重復(fù)一次,

然后全部熄滅再以300ms間隔

全部閃爍5次。重復(fù)此過程

*/

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{//delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

voidmain0//主函數(shù)

uchara,i,j;

while(l)//大循環(huán)

(

for(j=0;j<2;j++)

(

a=0xfe;〃賦初值

for(i=0;i<8;i++)〃左移

(

Pl=a;〃點(diǎn)亮小燈

delay(200);〃延時(shí)200毫秒

a=-crol-(a,1);〃將a變量循環(huán)左移一位

)

a=0x7f;

for(i=0;i<8;i++)//右移

(

Pl=a;〃點(diǎn)亮小燈

delay(200);〃延時(shí)200毫秒

a=.cror.(a,1);〃將a變量循環(huán)右移一位

)

)

Pl=0xff;〃全部熄滅

for(j=0;j<10;j++)

(

delay(300);〃延時(shí)

P1="P1;//全部取反10次,既閃爍5次

)

)

)

6/*

間隔300ms第一次一個(gè)管亮流動(dòng)一次,

第二次兩個(gè)管亮流動(dòng),依次到8個(gè)管亮,

然后重復(fù)整個(gè)過程。

*/

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

voiddelay(uintz)〃延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

//delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

voidmain()//主函數(shù)

(

uchara,i,j;

while⑴〃大循環(huán)

(

a=0xfe;〃賦初值

for(j=0;j<8;j++)

(

for(i=0;i<8-j;i++)〃左移

(

Pl=a;〃點(diǎn)亮小燈

delay(200);〃延時(shí)200毫秒

a=-crol-(a,1);〃將a變量循環(huán)左移一位

)

a=-crol-(a,j);〃補(bǔ)齊,方便下面的左移一位

Pl=0xff;〃全部關(guān)閉

a=a?l;//左移一位讓多一個(gè)燈點(diǎn)亮

)

7/*

間隔300ms先奇數(shù)亮再偶數(shù)亮,

循環(huán)三次;一個(gè)燈上下循環(huán)三次;

兩個(gè)分別從兩邊往中間流動(dòng)三次;

再從中間往兩邊流動(dòng)三次;8個(gè)全部閃爍3次;

關(guān)閉發(fā)光管,程序停止.

*/

I*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

voiddelay(uintz)//延時(shí)函數(shù),z的取值為這個(gè)函數(shù)的延時(shí)ms數(shù),如delay(200);大約

延時(shí)200ms.

{“delay(500);大約延時(shí)500ms.

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

voidmainO〃主函數(shù)

uchara,i,j;

for(j=0;j<3;j++)//寄偶交替

(

Pl=0x55;"點(diǎn)亮小燈

delay(300);〃延時(shí)300毫秒

Pl=0xaa;

delay(300);〃延時(shí)300毫秒

}

for(j=0;j<3;j++)〃流水燈

a=0xfe;

for(i=0;i<8;i++)

(

Pl=a;〃點(diǎn)亮小燈

delay(300);〃延時(shí)300毫秒

a=_crol_(a,1);

)

Pl=0xff;

for(j=0;j<3;j++)〃從兩邊往中間流

(

Pl=0x7e;//點(diǎn)亮小燈

delay(300);//延時(shí)300毫秒

Pl=0xbd;

delay(300);〃延時(shí)300毫秒

Pl=0xdb;〃點(diǎn)亮小燈

delay(300);〃延時(shí)300毫秒

Pl=0xe7;

delay(300);〃延時(shí)300毫秒

)

Pl=0xff;

for(j=0;j<3;j++)//從中間往兩邊流

(

Pl=0xe7;//點(diǎn)亮小燈

delay(300);〃延時(shí)300毫秒

Pl=0xdb;

delay(300);〃延時(shí)300毫秒

Pl=0xbd;//點(diǎn)亮小燈

delay(300);//延時(shí)300毫秒

Pl=0x7e;

delay(300);〃延時(shí)300毫秒

)

Pl=0xff;

for(j=0;j<6;j++)〃全部閃爍

P1="P1;//點(diǎn)亮小燈

delay(300);〃延時(shí)300毫秒

)

Pl=0xff;

while(l);

)

Lesson3

i/*

利用定時(shí)/計(jì)數(shù)器TO從Pl.0輸出周期為1s的方波,

讓發(fā)光二極管以1HZ閃爍,

設(shè)晶振頻率為12MHz。?

*/

/*********************************************************

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar//宏定義

sbitP1_O=P1AO;

uchar11;

voidmain0〃主函數(shù)

(

TMOD=0x01;〃設(shè)置定時(shí)器0為工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;//開總中斷

ETO=1;〃開定時(shí)器0中斷

TRO=1;〃啟動(dòng)定時(shí)器0

while(l);〃等待中斷產(chǎn)生

voidtimerO0interrupt1

(

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==20)

(

11=0;

P1-O=_P1_O;

2/*

利用定時(shí)/計(jì)數(shù)器T1產(chǎn)生定時(shí)時(shí)鐘,

由P1口控制8個(gè)發(fā)光二極管,

使8個(gè)指示燈依次一個(gè)一個(gè)閃動(dòng),

閃動(dòng)頻率為10次/秒(8個(gè)燈依次亮一遍為一個(gè)周期),循環(huán)。

設(shè)晶振頻率為12MHz.

*/

y*********************************************************

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitPl_0=PlA0;

uchar11,a;

voidmain()〃主函數(shù)

(

TMOD=0x01;//設(shè)置定時(shí)器0為工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;〃開總中斷

ET0=l;//開定時(shí)器0中斷

TR0=l;//啟動(dòng)定時(shí)器0

a=0xfe;

while(l);〃等待中斷產(chǎn)生

voidtimerO0interrupt1

I

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

if(tt==2)

(

11=0;

Pl=a;

a=_crol_(a,1);

)

)

3/*

同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲,

定時(shí)器0控制頻率,定時(shí)器1控制同個(gè)

頻率持續(xù)的時(shí)間,間隔2s依次輸出

1,10,50,100,200,400,800,

Ik(hz)的方波?

設(shè)晶振頻率為12MHz.

*/

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitbeep=P2A3;

uchar11;

uintfre,flag;

voidmain0〃主函數(shù)

(

fre=50000;

beep=0;

TMOD=Oxll;〃設(shè)置定時(shí)器0,定時(shí)器1為工作方式1

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

THl=(65536-50000)/256;

TLl=(65536-50000)%256;

EA=1;〃開總中斷

ET0=l;//開定時(shí)器。中斷

ET1=1;

TR1=1;

TR0=l;//啟動(dòng)定時(shí)器0

while⑴;〃等待中斷產(chǎn)生

voidtimerO()interrupt1〃定時(shí)器0中斷

(

TR0=0;〃進(jìn)中斷后先把定時(shí)器0中斷關(guān)閉,防止內(nèi)部程序過多而造成中斷丟失

TH0=(65536-fre)/256;

TL0=(65536-fre)%256;

tt++;

if(flag<40)//以下幾個(gè)if分別用來選取不同的頻率

if(tt==10)

(

11=0;

fre=50000;

beep=beep;

)

if(flag>=40&&flag<80)

tt=O;

fre=50000;

beep=beep;

)

if(flag>=80&&flag<120)

(

tt=O;

fre=10000;

beep=beep;

)

if(flag>=120&&flag<160)

(

11=0;

fre=5000;

beep=beep;

)

if(flag>=160&&flag<200)

(

11=0;

fre=2500;

beep=beep;

)

if(flag>=200&&flag<240)

(

11=0;

fre=1250;

beep=beep;

)

if(flag>=240&&flag<280)

(

tt=O;

fre=625;

beep=beep;

)

if(flag>=2804&flag<320)

(

tt=O;

fre=312;

beep=beep;

)

if(flag>=320&&flag<360)

tt=O;

fre=156;

beep=beep;

)

TRO=1;

)

voidtimerl0interrupt3//定時(shí)器1中斷用來產(chǎn)生2秒時(shí)間定時(shí)

(

THl=(65536-50000)/256;

TLl=(65536-50000)%256;

flag++;

if(flag==360)

(

flag=0;

fre=50000;

)

)

4/*

用定時(shí)器以間隔500Ms在6位數(shù)碼管上依次顯示

0、1、2、3…,C、D、E、F,重復(fù)。

設(shè)時(shí)鐘頻率為12M

*/

I*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitdula=P2A6;//數(shù)碼管段選鎖存端

sbitwela=P2A7;/〃/數(shù)碼管位選鎖存端

ucharnum,tt;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71);

voidmain0

(

num=0;

tt=O;

TMOD=Ox()l;〃設(shè)置定時(shí)器0為工作方式1

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

EA=1;〃開總中斷

ET0=l;//開定時(shí)器0中斷

TR0=l;//啟動(dòng)定時(shí)器0

dula=l;

P0=0x3f;〃給段開始送顯示0。

dula=0;〃關(guān)閉段選鎖存端,防止開始時(shí)出現(xiàn)亂碼。

wela=l;//11101010

P0=0xc0;//打開六個(gè)數(shù)碼管位選

wela=0;

while(1)

(

if(tt==10)//每進(jìn)入10次中斷即為500ms,執(zhí)行一次顯示變化。

11=0;

num++;

if(num==16)

num=0;

dula=l;

P0=table[num];

dula=0;

voidexterO()interrupt1//定時(shí)器0中斷

(

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

tt++;

)

Lesson4

利用動(dòng)態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的654321.

時(shí)鐘頻率為11.0592M

/*********************************************************/

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitdula=P2A6;//數(shù)碼管段選鎖存端

sbitwela=P2A7;〃//數(shù)碼管位選鎖存端

ucharcodetable[]={〃數(shù)碼管顯示編碼

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voiddisplay(uchar,uchar,uchar,uchar,uchar,uchar);〃函數(shù)聲明

voiddelay(uint);

voidmain0

(

while(1)

(

display(6,5,4,3,2,1);〃始終顯示

)

)

voiddisplay(ucharone,uchartwo,ucharthree,ucharfour,ucharfive,ucharsix)

(

dula=l;

P0=table[one];〃送段數(shù)據(jù)

dula=0;

P0=0xff;//送位數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存后段選數(shù)據(jù)通過

位選鎖存器

wela=l;

P0=0xfe;

wela=0;

delay(1);

dula=l;

P0=table[two];

dula=0;

P0=0xff;

wela=l;

P0=0xfd;

wela=0;

delay(1);

dula=l;

P0=table[three];

dula=0;

P0=0xff;

wela=l;

P0=0xfb;

wela=0;

delay(1);

dula=l;

P0=table[four];

dula=O;

PO=Oxff;

wela=l;

P0=0xf7;

wela=O;

delay(1);

dula=l;

PO=table[five];

dula=O;

PO=Oxff;

wela=l;

PO=Oxef;

wela=O;

delay(1);

dula=l;

PO=table[six];

dula=O;

PO=Oxff;

wela=l;

PO=Oxdf;

wela=O;

delay(1);

)

voiddelay(uintz)//延時(shí)子函數(shù)

(

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y--);

)

2/*

用動(dòng)態(tài)掃描方法和定時(shí)器1在數(shù)碼管的前三位顯示出秒表,

精確到1%秒,即最后一位顯示1%秒,一直循環(huán)下去

設(shè)時(shí)鐘頻率為12M

*/

^*********************************************************

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar//宏定義

sbitdula=P2A6;//數(shù)碼管段選鎖存端

sbitwela=P2A7;//〃數(shù)碼管位選鎖存端

ucharge,shi,bai;

uinttt;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

voiddisplay(uchar,uchar,uchar);〃函數(shù)聲明

voiddelay(uint);

voidmain0

(

TMOD=OxlO;〃設(shè)置定時(shí)器1為工作方式1

THl=(65536-10000)/256;

TLl=(65536-10000)%256;

EA=1;//開總中斷

ET1=1;//開定時(shí)器1中斷

TR1=1;//啟動(dòng)定時(shí)器1

while(l)

(

display(bai,shi,ge);

)

voidexterO()interrupt3//定時(shí)器1中斷

(

THl=(65536-10000)/256;

TLl=(65536-10000)%256;

tt++;

if(tt==1000)

11=0;

bai=tt/100;

shi=tt%100/10;

ge=tt%10;

)

voiddisplay(ucharone,uchartwo,ucharthree)

(

dula=l;

P0=table[one];//送段數(shù)據(jù)

dula=0;

P0=0xff;〃送位數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存后段選數(shù)據(jù)通過

位選鎖存器

wela=l;

PO=Oxfe;

wela=O;

delay(1);

dula=l;

PO=table[two];

dula=0;

P0=0xff;

wela=l;

P0=0xfd;

wela=0;

delay(1);

dula=l;

PO=table[three];

dula=0;

P0=0xff;

wela=l;

P0=0xfb;

wela=0;

delay(1);

)

voiddelay(uintz)〃延時(shí)子函數(shù)

(

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

)

3/*

利用動(dòng)態(tài)掃描和定時(shí)器1在數(shù)碼管上顯示

出從765432開始以1/10秒的速度往下遞減

直至765398并保持顯示此數(shù),與此同時(shí)利

用定時(shí)器0以500MS速度進(jìn)行流水燈從上至

下移動(dòng),當(dāng)數(shù)碼管上數(shù)減到停止時(shí),實(shí)驗(yàn)

板上流水燈也停止然后全部開始閃爍,3秒

后(用T0定時(shí))流水燈全部關(guān)閉、數(shù)碼管上

顯示出"HELLO"。到此保持住。

設(shè)晶振頻率為12MHz.

*/

/*********************************************************

#include<reg52.h>//52單片機(jī)頭文件

#include<intrins.h>//包含有左右循環(huán)移位子函數(shù)的庫

#defineuintunsignedint〃宏定義

#defineucharunsignedchar〃宏定義

sbitdula=P2A6;

sbitwela=P2A7;

ucharcodetable[]={//顯示數(shù)據(jù)編碼

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

0x76,0x79,0x38,0x3f,0);

uchartemp,10,tl,bai,shi,ge,flag,flagl;

uintshu;

voidinit0;〃函數(shù)聲明

voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge);

voiddelay(uintz)〃延時(shí)子函數(shù)

(

uintx,y;

for(x=z;x>0;x-)

for(y=110;y>0;y-);

}

voidmain()〃主函數(shù)

(

init();

while(1)

(

if(flagl!=l)//如果flagi不再等于1則顯示數(shù)據(jù)

display(7,6,5,bai,shi,ge);

else

display(16,17,18,18,19,20);〃否則顯示hello

)

)

voidinit0〃初始化函數(shù)

(

shu=432;

temp=0xfe;

Pl=temp;

TMOD=0xll;

TH0=(65536-50000)/256;〃定時(shí)器初始化

TL0=(65536-50000)%256;

TH1=(65536-50000)/256;

TLl=(65536-50000)%256;

EA=1;

ET0=l;

ET1=1;

TRO=1;

TR1=1;

voidtimerO()interrupt1〃定時(shí)器0中斷

(

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

t0++;

if(flag!=l)//flag不等于1時(shí)進(jìn)行流水燈

(

if(t0==10)

(

tO=l;

temp=_crol.(temp,1);

Pl=temp;

)

)

else〃否則進(jìn)行燈閃爍

(

if(t0%4==0)//小燈每200毫秒變化一次

P1=-P1;

if(t0==60)

(

TRO=O;〃3秒后關(guān)閉定時(shí)器0,關(guān)閉燈,并置flag=l

Pl=Oxff;

flagl=l;

)

)

voidtimerl()interrupt3〃定時(shí)器1中斷函數(shù)

(

THl=(65536-50000)/256;

TLl=(65536-50000)%256;

tl++;

if(tl==2)

(

tl=0;

shu—;

bai=shu/100;

shi=shu%l00/10;

ge=shu%10;

if(shu==398)〃當(dāng)?shù)?98時(shí)把原來TO中的數(shù)清除,重新加裁初值讓小燈

閃爍

TRO=O;

THO=(65536-50000)/256;

TL0=(65536-50000)%256;

TR0=l;

flag=l;

t0=0;

Pl=0xff;

TR1=O;

)

)

voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge)〃顯示子函

數(shù)

(

dula=l;

P0=table[aa];

dula=0;

P0=0xff;

wela=l;

P0=0xfe;

wela=0;

delay(1);

dula=l;

P0=table[bb];

dula=0;

P0=0xff;

wela=l;

P0=0xfd;

wela=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論