版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 小額信用借款合同書樣本
- 醫(yī)療器材合作合同樣本
- 農(nóng)村宅基地買賣合同樣本
- 夫妻雙方自愿離婚協(xié)議書撰寫要點(diǎn)
- 2024大學(xué)生就業(yè)協(xié)議書范例
- 離婚標(biāo)準(zhǔn)協(xié)議書815672024年
- 股東之間的投資合作協(xié)議
- 汽車買賣合同書樣本
- 電視劇動(dòng)畫制作合作協(xié)議
- 合同擔(dān)保書樣本
- 2021年大慶精神鐵人精神知識(shí)競(jìng)賽題庫
- 浙江泰隆商業(yè)銀行員工手冊(cè)
- 審計(jì)技能實(shí)訓(xùn)教程(喻竹 第二版) 教案全套 1.1-9.2 業(yè)務(wù)承接與評(píng)價(jià)-審計(jì)底稿歸檔
- 徐州市2023-2024學(xué)年八年級(jí)上學(xué)期期末數(shù)學(xué)試卷(含答案解析)
- 生涯發(fā)展報(bào)告通用模板
- 越人歌音樂分析報(bào)告
- 2024年湖北省工業(yè)建筑集團(tuán)有限公司招聘筆試參考題庫含答案解析
- 年輕干部?jī)?yōu)勢(shì)分析報(bào)告
- 社區(qū)家庭教育活動(dòng)指導(dǎo)方案
- 《浮點(diǎn)數(shù)計(jì)算方法》課件
- 蘇州市2022-2023學(xué)年高二下學(xué)期期中考試化學(xué)試題(原卷版)
評(píng)論
0/150
提交評(píng)論