版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
郭天祥《十天學(xué)通單片機(jī)》
---“TX-1C單片機(jī)實(shí)驗(yàn)板”所有課后作業(yè)+答案,特別整理,供單片機(jī)
愛好與學(xué)習(xí)者使用
第一講學(xué)單片機(jī)預(yù)備知識、
如何點(diǎn)亮一個(gè)發(fā)光管單片機(jī)能做什么,基本電子知識,如何用TXTC單片機(jī)學(xué)習(xí)板學(xué)
習(xí)單片機(jī),C51知識簡介,如何申請免費(fèi)芯片樣品。點(diǎn)亮一個(gè)發(fā)光管,
第二講流水燈設(shè)計(jì)、蜂鳴器發(fā)聲、繼電器控制簡單延時(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ú)立鍵盤、矩陣鍵盤
的檢測原理及實(shí)現(xiàn)鍵盤用來做什么、如何鍵盤檢測、消抖、鍵盤編碼、帶返回值函
數(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)最簡單液晶工作原理、如何開始對一
個(gè)沒有任何概念的芯片開始單片機(jī)的操作
第九講HC總線AT24C02芯片工作原理HC總線工作原理、
目前非常通用的一種通信機(jī)制
第十講利用51單片機(jī)的定時(shí)器設(shè)計(jì)一個(gè)時(shí)鐘綜合運(yùn)用51單片機(jī)知識設(shè)計(jì)一個(gè)可
以隨意調(diào)節(jié)時(shí)間、帶整點(diǎn)鬧鈴的時(shí)鐘。(其中用到定時(shí)器、中斷、按鍵、蜂鳴器、數(shù)碼管或
串口通信)
第H^一講用DSl2c887時(shí)鐘芯片設(shè)計(jì)一個(gè)高精度時(shí)鐘DS12C887內(nèi)部帶有鋰電
池,系統(tǒng)掉電情況下可自行精確走10年,并帶有鬧鐘功能、年、月、日、時(shí)、分、秒等。
(本節(jié)由學(xué)生自己設(shè)計(jì)電路)
第十二講使用Protell99繪制電路圖全過程Protell99軟件使用、元件庫、封裝
庫設(shè)計(jì)、繪制原理圖、錯(cuò)誤檢查、生成PCB、手動(dòng)、自動(dòng)布線、送去加工
第十三講Altiumdesigner6.5繪制電路圖全過程最頂級電路板設(shè)計(jì)軟件Altium
Designer使用、元件庫、封裝庫設(shè)計(jì)、繪制原理圖、錯(cuò)誤檢查、生成PCB、手動(dòng)、自動(dòng)布線、
送去加工
lessonl
對照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,亮?xí)r蜂鳴
器響,滅時(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ù)器T0從P1.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í)器。控制頻率,定時(shí)器1控制
同個(gè)頻率持續(xù)的時(shí)間,間隔300ms依次輸出1,10,50,100,200,400,800,
Ik(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%秒,
即后兩位顯示現(xiàn)秒,一直循環(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ù)前加上一序號然后連同此數(shù)據(jù)一起發(fā)送至計(jì)算機(jī),當(dāng)序號超過255時(shí)歸零。
2.以16進(jìn)制發(fā)送一個(gè)0-65536之間的任一數(shù),當(dāng)單片機(jī)收到后在數(shù)碼管上
動(dòng)態(tài)顯示出來,波特率自定。
3.用AD以1HZ的頻率采集模擬信號,然后轉(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
#include<reg52.h>//52單片機(jī)頭文件
sbitiedi=pro;〃單片機(jī)管腳位聲明
voidmain()〃主函數(shù)
ledl=O;〃將單片機(jī)Pl.0口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
2/用總線操作點(diǎn)亮第一個(gè)發(fā)光管.
//適用TX-1C單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
voidmain()//主函數(shù)
(
Pl=0xfe;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為11111110
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
3//用位操作點(diǎn)亮最后一個(gè)發(fā)光管.
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
sbitled8=Pl~7;〃單片機(jī)管腳位聲明
voidmain()〃主函數(shù)
\
led8=0;〃將單片機(jī)P1.7口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
)
4//用總線操作點(diǎn)亮最后一個(gè)發(fā)光管.
//適用TX-1C單片機(jī)實(shí)驗(yàn)板
//晶振為H.0592M
#include<reg52.h>//52單片機(jī)頭文件
voidmain()〃主函數(shù)
(
Pl=0x7f;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為01111111
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
5//用位操作點(diǎn)亮1,3,5,7發(fā)光管.
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
sbitledl=Pl*0;〃單片機(jī)管腳位聲明
sbitled3=Pl"2;〃單片機(jī)管腳位聲明
sbitled5=Pl"4;〃單片機(jī)管腳位聲明
sbitled7=Pl"6;〃單片機(jī)管腳位聲明
voidmain()〃主函數(shù)
(
ledl=0;〃將單片機(jī)P1.0口清零
led3=0;〃將單片機(jī)P1.2口清零
16d5=0;〃將單片機(jī)P1.4口清零
led7=0;〃將單片機(jī)P1.6口清零
while(l)〃程序停止在這里,在后面會講到為什么這樣寫。
}
6//用總線操作點(diǎn)亮1,3,5,7發(fā)光管.
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
voidmain()〃主函數(shù)
(
Pl=0xaa;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為10101010
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
7
//用位操作點(diǎn)亮2,4,5,6發(fā)光管.
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
sbitled2=PIT;〃單片機(jī)管腳位聲明
sbitled4=Pl"3;〃單片機(jī)管腳位聲明
sbitled5=Pl"4;〃單片機(jī)管腳位聲明
sbitled6=Pl5;〃單片機(jī)管腳位聲明
voidmain()〃主函數(shù)
t
led2=0;〃將單片機(jī)Pl.1口清零
led4=0;〃將單片機(jī)P1.3口清零
16d5=0;〃將單片機(jī)P1.4口清零
led6=0;〃將單片機(jī)P1.5口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
8〃用總線操作點(diǎn)亮2,4,5,6發(fā)光管.
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
voidmain()〃主函數(shù)
(
Pl=0xc5;〃將單片機(jī)Pl口的8個(gè)口由高到低分別賦值為11000101
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
9//嘗試讓第一個(gè)發(fā)光管閃爍.(程序看不懂沒關(guān)系,后面章節(jié)會有詳細(xì)講解)
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
sbitledl=Pl0;〃單片機(jī)管腳位聲明
voidmain()〃主函數(shù)
(
unsignedinti;〃定義一個(gè)int型變量
while(l)
(
i=50000;〃變量賦初值為50000
ledl=0;〃點(diǎn)亮燈
while(i一);〃延時(shí)
i=50000;
ledl=l;〃熄滅燈
while(i一);
)
9//嘗試寫出流水燈程序(程序看不懂沒關(guān)系,后面章節(jié)會有詳細(xì)講解)
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為H.0592M
#include<reg52.h>//52單片機(jī)頭文件
voidmain()〃主函數(shù)
(
unsignedinti;〃定義一個(gè)int型變量
while(l)
i=50000;//變量賦初值為50000
Pl=0xfe;〃點(diǎn)亮第一個(gè)燈
while(i--);//延時(shí)
i=50000;//變量賦初值為50000
Pl=Oxfd;〃點(diǎn)亮第二個(gè)燈
while(i-);〃延時(shí)
i=50000;〃變量賺初值為50000
Pl=Oxfb;//點(diǎn)亮第三個(gè)燈
while(i-);〃延時(shí)
i=50000;//變量賦初值為50000
Pl=0xf7;//點(diǎn)亮第四個(gè)燈
while(i--);〃延時(shí)
i=50000;//變量賦初值為50000
Pl=0xef;〃點(diǎn)亮第五個(gè)燈
while(i--);//延時(shí)
i=50000;〃變量賦初值為50000
Pl=Oxdf;〃點(diǎn)亮第六個(gè)燈
while(i-);//延時(shí)
i=50000;〃變量賦初值為50000
Pl=0xbf;〃點(diǎn)亮第七個(gè)燈
while(i--);〃延時(shí)
i=50000;〃變量賦初值為50000
Pl=0x7f;〃點(diǎn)亮第八個(gè)燈
while(i-);〃延時(shí)
)
)
Lesson2
1//第一個(gè)發(fā)光管以間隔200ms閃爍
//適用TX-1C單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitledl=Pro:〃單片機(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=O;〃點(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ù)下去。
//適用TXTC單片機(jī)實(shí)驗(yàn)板
//晶振為11.0592M
#include<reg52.h>//52單片機(jī)頭文件
itinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P2'3;
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;
a=Oxfe;
while(l)〃大循環(huán)
(
Pl=a;〃點(diǎn)亮小燈
beep=O;〃開啟蜂鳴器
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ā)出〃滴滴〃聲。
*/
#include<reg52.h>//52單片機(jī)頭文件
tfinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P23;
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;
while(l)〃大循環(huán)
(
a=Oxfe;〃賦初值
for(i=0;i<8;i++)〃左移
(
Pl=a;〃點(diǎn)亮小燈
beep=O;〃開啟蜂鳴器
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-);
}
voidmain()〃主函數(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ù)的庫
ttdefineuintunsignedint〃宏定義
#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(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=Oxff;〃全部熄滅
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ī)頭文件
itinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
Sdefineucharunsignedchar〃宏定義
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(l)〃大循環(huán)
a=Oxfe;〃賦初值
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/*
間隔3001ns先奇數(shù)亮再偶數(shù)亮,
循環(huán)三次;一個(gè)燈上下循環(huán)三次;
兩個(gè)分別從兩邊往中間流動(dòng)三次;
再從中間往兩邊流動(dòng)三次;8個(gè)全部閃爍3次;
關(guān)閉發(fā)光管,程序停止。
*/
#include<reg52.h>//52單片機(jī)頭文件
#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
^defineuintunsignedint〃宏定義
Wdefineucharunsignedchar〃宏定義
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=Oxbd;
delay(300);〃延時(shí)300毫秒
Pl=Oxdb;〃點(diǎn)亮小燈
delay(300);〃延時(shí)300毫秒
Pl=0xe7;
delay(300);〃延時(shí)300毫秒
)
Pl=Oxff;
for(j=0;j<3;j++)〃從中間往兩邊流
(
Pl=0xe7;〃點(diǎn)亮小燈
delay(300);//延時(shí)300毫秒
Pl=Oxdb;
delay(300);〃延時(shí)300毫秒
Pl=Oxbd;〃點(diǎn)亮小燈
delay(300);〃延時(shí)300毫秒
Pl=0x7e;
delay(300);〃延時(shí)300毫秒
)
Pl=Oxff;
for(j=0;j<6;j++)〃全部閃爍
(
P1=~P1;//點(diǎn)亮小燈
delay(300);//延時(shí)300毫秒
)
Pl=Oxff;
while(l);
}
Lesson3
1/*
利用定時(shí)/計(jì)數(shù)器TO從P1.0輸出周期為1s的方波,
讓發(fā)光二極管以1HZ閃爍,
設(shè)晶振頻率為12MHz。?
*/
#include<reg52.h>//52單片機(jī)頭文件
^include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
Sdefineuintunsignedint//宏定義
Sdefineucharunsignedchar//宏定義
sbitP1_O=P1_O;
uchartt;
voidmain()〃主函數(shù)
(
TM0D=0x01;〃設(shè)置定時(shí)器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時(shí)器。中斷
TRO=1;//啟動(dòng)定時(shí)器0
while(1);//等待中斷產(chǎn)生
voidtimerO()interrupt1
{
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
tt++;
if(tt=20)
tt=O;
P1_O=>1_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。
*/
ttinclude<reg52.h>//52單片機(jī)頭文件
ttinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
#defineucharunsignedchar〃宏定義
sbitPl_O=PrO;
uchartt,a;
voidmain()〃主函數(shù)
(
TM0D=0x01;〃設(shè)置定時(shí)器0為工作方式1
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時(shí)器。中斷
TRO=1;〃啟動(dòng)定時(shí)器0
a=0xfe;
while(l);//等待中斷產(chǎn)生
voidtimerO()interrupt1
TII0=(65536-50000)/256;
TLO=(65536-50000)%256;
tt++;
if(tt==2)
(
tt=O;
Pl=a;
a=_crol_(a,1);
)
)
3/*
同時(shí)用兩個(gè)定時(shí)器控制蜂鳴器發(fā)聲,
定時(shí)器。控制頻率,定時(shí)器1控制同個(gè)
頻率持續(xù)的時(shí)間,間隔2s依次輸出
1,10,50,100,200,400,800,
Ik(hz)的方波?
設(shè)晶振頻率為12MHzo
*/
#include<reg52.h>//52單片機(jī)頭文件
#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P23;
uchartt;
uintfre,flag;
voidmain()〃主函數(shù)
fre=50000;
beep=0;
TM0D=0xll;//設(shè)置定時(shí)器0,定時(shí)器1為工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TII1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;//開定時(shí)器。中斷
ET1=1;
TR1=1;
TRO=1;//啟動(dòng)定時(shí)器0
while(l);//等待中斷產(chǎn)生
voidtimerOOinterrupt1〃定時(shí)器0中斷
(
TRO=O;〃進(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)
(
tt=O;
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)
(
tt=0;
fre=5000;
beep=~beep;
)
if(flag>=160&&flag<200)
(
tt=0;
fre=2500;
beep="beep;
)
if(flag>-200&&flag<240)
(
tt=0;
fre=1250;
beep=beep;
if(flag>=240&&flag<280)
!
tt=O;
fre=625;
beep=^beep;
)
if(flag>=280&&flag<320)
(
tt=O;
fre=312;
beep="beep;
)
if(flag>=320&&flag<360)
(
tt=O;
fre=156;
beep:beep;
)
TRO=1;
}
voidtimerl()interrupt3〃定時(shí)器1中斷用來產(chǎn)生2秒時(shí)間定時(shí)
(
TH1=(65536-50000)/256;
TL1=(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
*/
#include<reg52.h>//52單片機(jī)頭文件
^include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitdula=P2'6;〃數(shù)碼管段選鎖存端
sbitwela=P2"7;〃〃數(shù)碼管位選鎖存端
ucharnum,tt;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71);
voidmain()
(
num=0;
tt=0;
TMODRxOl;//設(shè)置定時(shí)器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時(shí)器0中斷
TRO=1;〃啟動(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(l)
(
if(tt==10)〃每進(jìn)入10次中斷即為500ms,執(zhí)行一次顯示變化。
(
tt=0;
num++;
if(num==16)
num=0;
dula=l;
P0=table[num];
dula=0;
)
)
voidexterO()interrupt1//定時(shí)器0中斷
(
TII0=(65536-50000)/256;
TLO=(65536-50000)%256;
tt++;
}
Lesson4
1/*
利用動(dòng)態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的65432L
時(shí)鐘頻率為1L0592M
*/
#include<reg52.h>//52單片機(jī)頭文件
ttinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitdula=P2-6;〃數(shù)碼管段選鎖存端
sbitwela=P2M;〃〃數(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);
voidmain()
(
while(l)
(
display(6,5,4,3,2,1);〃始終顯示
)
}
voiddisplay(ucharone,uchartwo,ucharthree,ucharfour,ucharfive,ucharsix)
dula=l;
PO=table[one];〃送段數(shù)據(jù)
dula=0;
PO=Oxff;〃送位數(shù)據(jù)前關(guān)閉所有顯示,防止打開位選鎖存后段選數(shù)據(jù)
通過位選鎖存器
wela=l;
P0=0xfe;
wela=O;
delay(1);
dula=l;
PO=table[two];
dula=0;
PO=Oxff;
wela=l;
PO=Oxfd;
wela=0;
delay(1);
dula=l;
P0=table[three];
dula=0;
PO=Oxff;
wela=l;
PO=Oxfb;
wela=0;
delay(1);
dula=l;
PO二table[four];
dula=O;
PO=Oxff;
wela=l;
P0=0xf7;
wela=O;
delay(l);
dula=l;
PO=table[five];
dula=0;
PO=Oxff;
wela=l;
PO=Oxef;
wela=0;
delay(1);
dula=l;
PO=table[six];
dula=0;
PO=Oxff;
wela=l;
PO二Oxdf;
wela=0;
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ī)頭文件
ttinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitdula=P2^6;〃數(shù)碼管段選鎖存端
sbitwela=P2^7;〃〃數(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);
voidmain()
(
TMOD=0x10;〃設(shè)置定時(shí)器1為工作方式1
TH1=(65536-10000)/256;
TL1=(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中斷
(
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
tt++;
if(tt==1000)
tt=O;
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;
P0=0xfe;
wela=0;
delay(1);
dula=l;
PO=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);
)
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秒
后(用TO定時(shí))流水燈全部關(guān)閉、數(shù)碼管上
顯示出"HELLO"。到此保持住。
設(shè)晶振頻率為12MHz0
*/
#include<reg52.h>//52單片機(jī)頭文件
^include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitdula=P26;
sbitwela=P2c7;
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,tO,tl,bai,shi,ge,flag,flagl;
uintshu;
voidinitO;〃函數(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-);
}
voidmainO〃主函數(shù)
(
init();
while(l)
(
if(flagl!=l)〃如果flagi不再等于1則顯示數(shù)據(jù)
display(7,6,5,bai,shi,ge);
else
display(16,17,18,18,19,20);〃否則顯示hello
voidinit()〃初始化函數(shù)
(
shu=432;
temp=0xfe;
Pl=temp;
TM0D=0xll;
TH0=(65536-50000)/256;〃定時(shí)器初始化
TLO=(65536-50000)%256;
TH1=(65536-50000)/256;
TLl=(65536-50000)%256;
EA=1;
ETO=1;
ET1=1;
TRO=1;
TR1=1;
voidtimerO0interrupt1//定時(shí)器0中斷
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
t0++;
if(flag!=l)//flag不等于1時(shí)進(jìn)行流水燈
(
if(t0==10)
(
t0=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ù)
TH1=(65536-50000)/256;
TU=(65536-50000)%256;
tl++;
if(tl==2)
(
tl=0;
shu—;
bai=shu/100;
shi=shu%100/10;
ge=shu%10;
if(shu-398)〃當(dāng)?shù)?98時(shí)把原來TO中的數(shù)清除,重新加裁初值讓
小燈閃爍
(
TRO=O;
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
TRO=1;
flag=l;
t0=0;
Pl=0xff;
TR1=O;
}
)
)
voiddisplay(ucharaa,ucharbb,ucharcc,ucharbai,ucharshi,ucharge)〃顯不
子函數(shù)
dula=l;
P0=table[aa];
dula=O;
PO=Oxff;
wela=l;
PO=Oxfe;
wela=O;
delay(1);
dula=l;
PO=table[bb];
dula=O;
PO=Oxff;
wela=l;
PO=Oxfd;
wela=O;
delay(1);
dula=l;
PO=table[cc];
dula=O;
PO=Oxff;
wela=l;
PO=Oxfb;
wela=O;
delay(1);
dula=l;
PO=table[bai];
dula=O;
PO=Oxff;
wela=l;
P0=0xf7;
wela=O;
delay(1);
dula=l;
PO=table[shi];
dula=O;
PO=Oxff;
wela=l;
PO=Oxef;
wela=O;
delay(1);
dula=l;
PO=table[ge];
dula=0;
PO=Oxff;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 售后客服個(gè)人工作總結(jié)范文模板大全【5篇】
- 人教版三年級數(shù)學(xué)下冊全冊導(dǎo)學(xué)案
- 仁愛英語九年級總復(fù)習(xí)教案
- 部編版2024-2025學(xué)年 語文六年級上冊期末測試卷(含答案)
- 浙江語文高考6篇
- 全國運(yùn)動(dòng)員注冊協(xié)議書范本(2篇)
- 2025年電力金具合作協(xié)議書
- 冷藏庫租賃合同書
- 辦公場所租房協(xié)議
- 廣西汽車租賃合同范本汽車租賃合同范本
- 零工市場(驛站)運(yùn)營管理 投標(biāo)方案(技術(shù)方案)
- 植物病蟲害防治技能大賽理論題及答案
- 2024年垃圾分類知識競賽題庫和答案
- 2024-2025學(xué)年六年級科學(xué)上冊第二單元《地球的運(yùn)動(dòng)》測試卷(教科版)
- 【課件】城鎮(zhèn)與鄉(xiāng)村課件2024-2025學(xué)年人教版地理七年級上冊
- 傳感器與執(zhí)行元件制造考核試卷
- 2024年高考英語概要寫作高分范文全
- (正式版)SH∕T 3541-2024 石油化工泵組施工及驗(yàn)收規(guī)范
- 學(xué)校幼兒園食堂從業(yè)人員考試試題
- 2023年春外研版四年級英語下冊全冊完整課件
- 《現(xiàn)行制度下高新技術(shù)企業(yè)的稅收籌劃-以華為為例》
評論
0/150
提交評論