




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
郭天祥《十天學通單片機》
---“TX-1C單片機實驗板”所有課后作業(yè)+答案,特別整理,供單片機
愛好與學習者使用
第一講學單片機預備知識、
如何點亮一個發(fā)光管單片機能做什么,基本電子知識,如何用TXTC單片機學習板學
習單片機,C51知識簡介,如何申請免費芯片樣品。點亮一個發(fā)光管,
第二講流水燈設計、蜂鳴器發(fā)聲、繼電器控制簡單延時程序、子程序調用、帶參數(shù)
子程序設計、流水燈同時蜂鳴器響、如何驅動蜂鳴器,及如何驅動繼電器,集電極開路的概
念及應用。
第三講數(shù)碼管顯示的原理、數(shù)碼管的靜態(tài)顯示共陽、共陰數(shù)碼管顯示原理、定時器
工作方式介紹、重點講述工作方式2、中斷概念及中斷函數(shù)寫法、外部中斷試驗、定時器中
斷應用
第四講數(shù)碼管的動態(tài)顯示原理及應用實現(xiàn)動態(tài)掃描概念、定時器、中斷加深
用單片機的定時器及中斷設計一個60秒定時器
第五講獨立鍵盤、矩陣鍵盤
的檢測原理及實現(xiàn)鍵盤用來做什么、如何鍵盤檢測、消抖、鍵盤編碼、帶返回值函
數(shù)寫法及應用
第六講AD、DA的工作原理
及實現(xiàn)、運放電路模擬電壓與數(shù)字電壓的關系、為什么要使用AD及DA、ADC0804
的操作方法、DAC0832的操作方法
第七講串口通訊原理及操作流程串口通訊工作方式、10位數(shù)據(jù)通訊、波特率概念、
如何根據(jù)波特率計算定時器初值、串口打印在調試程序中的應用。
第八講1602液晶、12864液晶顯示原理及實現(xiàn)最簡單液晶工作原理、如何開始對一
個沒有任何概念的芯片開始單片機的操作
第九講HC總線AT24C02芯片工作原理HC總線工作原理、
目前非常通用的一種通信機制
第十講利用51單片機的定時器設計一個時鐘綜合運用51單片機知識設計一個可
以隨意調節(jié)時間、帶整點鬧鈴的時鐘。(其中用到定時器、中斷、按鍵、蜂鳴器、數(shù)碼管或
串口通信)
第H^一講用DSl2c887時鐘芯片設計一個高精度時鐘DS12C887內部帶有鋰電
池,系統(tǒng)掉電情況下可自行精確走10年,并帶有鬧鐘功能、年、月、日、時、分、秒等。
(本節(jié)由學生自己設計電路)
第十二講使用Protell99繪制電路圖全過程Protell99軟件使用、元件庫、封裝
庫設計、繪制原理圖、錯誤檢查、生成PCB、手動、自動布線、送去加工
第十三講Altiumdesigner6.5繪制電路圖全過程最頂級電路板設計軟件Altium
Designer使用、元件庫、封裝庫設計、繪制原理圖、錯誤檢查、生成PCB、手動、自動布線、
送去加工
lessonl
對照TX-1C單片機學習板原理圖寫程序,用位操作和總線操作兩種方法完成
以下題目
1.熟練建立KEIL工程
2.點亮第一個發(fā)光管.
3.點亮最后一個發(fā)光管
4.點亮1、3、5、7
5.點亮二、四、五、六
6.嘗試讓第一個發(fā)光管閃爍
7.嘗試設計出流水燈程序
lesson2
第一個發(fā)光管以間隔200ms閃爍
8個發(fā)光管由上至下間隔1s流動,其中每個管亮500ms,滅500ms,亮時蜂鳴
器響,滅時關閉蜂鳴器,一直重復下去。
8個發(fā)光管來回流動,第個管亮100ms,流動時讓蜂鳴器發(fā)出“滴滴”聲。
用8個發(fā)光管演示出8位二進制數(shù)累加過程。
8個發(fā)光管間隔200ms由上至下,再由下至上,再重復一次,然后全部熄滅
再以300ms間隔全部閃爍5次。重復此過程。
間隔300ms第一次一個管亮流動一次,第二次兩個管亮流動,依次到8個管
亮,然后重復整個過程。
間隔300ms先奇數(shù)亮再偶數(shù)亮,循環(huán)三次;一個燈上下循環(huán)三次;兩個分別
從兩邊往中間流動三次;再從中間往兩邊流動三次;8個全部閃爍3次;關閉發(fā)
光管,程序停止。
lesson3
1、利用定時/計數(shù)器T0從P1.0輸出周期為1s的方波,讓發(fā)光二極管以1HZ
閃爍,設晶振頻率為12MHz。。
2、利用定時/計數(shù)器T1產(chǎn)生定時時鐘,由P1口控制8個發(fā)光二極管,使8
個指示燈依次一個一個閃動,閃動頻率為10次/秒(8個燈依次亮一遍為一個周
期),循環(huán)。
3、同時用兩個定時器控制蜂鳴器發(fā)聲,定時器??刂祁l率,定時器1控制
同個頻率持續(xù)的時間,間隔300ms依次輸出1,10,50,100,200,400,800,
Ik(hz)的方波。
4、用定時器以間隔500Ms在6位數(shù)碼管上依次顯示0、1、2、3….C、D、E、
F,重復。
lesson4
1.利用動態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的654321.
2.用動態(tài)掃描方法和定時器1在數(shù)碼管的前三位顯示出秒表,精確到1%秒,
即后兩位顯示現(xiàn)秒,一直循環(huán)下去。
3.利用動態(tài)掃描和定時器1在數(shù)碼管上顯示出從765432開始以1/10秒的速
度往下遞減直至765398并保持顯示此數(shù),與此同時利用定時器0以500MS速度
進行流水燈從上至下移動,當數(shù)碼管上數(shù)減到停止時,實驗板上流水燈也停止然
后全部開始閃爍,3秒后(用T0定時)流水燈全部關閉、數(shù)碼管上顯示出“HELLO”。
到此保持住。
lesson5
數(shù)碼管前三位顯示一個跑表,從000到999之間以1%秒速度運行,當按下
一個獨立鍵盤時跑表停止,松開手后跑表繼續(xù)運行。(用定時器設計表)。
在上題的基礎上,用另外三個獨立鍵盤實現(xiàn)按下第一個時計時停止,按下第
二個時計時開始,按下第三個是計數(shù)值清零從頭開始。
按下16個矩陣鍵盤依次在數(shù)碼管上顯示1-16的平方。如按下第一個顯示1,
第二個顯示4...
lesson7
1.由上位機發(fā)送1給單片機時,蜂鳴器以400ms頻率發(fā)聲,發(fā)2時以200ms
頻率發(fā)聲,發(fā)3時以100ms頻率發(fā)聲,發(fā)4時關閑蜂鳴器。
1.以2400bps從計算機發(fā)送任一字節(jié)數(shù)據(jù),當單片機收到該數(shù)據(jù)后,在此數(shù)
據(jù)前加上一序號然后連同此數(shù)據(jù)一起發(fā)送至計算機,當序號超過255時歸零。
2.以16進制發(fā)送一個0-65536之間的任一數(shù),當單片機收到后在數(shù)碼管上
動態(tài)顯示出來,波特率自定。
3.用AD以1HZ的頻率采集模擬信號,然后轉換成數(shù)字量,再將其以1200bps
發(fā)送到計算機,在計算機上顯示。
4.按下矩陣鍵盤第一行時以1200bps發(fā)送,1,2,3,4,第二行時以2400bps
發(fā)送5,6,7,8,第三行以4800bps發(fā)送,9,10,11,12,第四行以9600pbs發(fā)
送,13,14,15,16.
Lessonl作業(yè)
1用位操作點亮第一個發(fā)光管.
//適用TX-1C單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
sbitiedi=pro;〃單片機管腳位聲明
voidmain()〃主函數(shù)
ledl=O;〃將單片機Pl.0口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
2/用總線操作點亮第一個發(fā)光管.
//適用TX-1C單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
voidmain()//主函數(shù)
(
Pl=0xfe;〃將單片機Pl口的8個口由高到低分別賦值為11111110
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
3//用位操作點亮最后一個發(fā)光管.
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
sbitled8=Pl~7;〃單片機管腳位聲明
voidmain()〃主函數(shù)
\
led8=0;〃將單片機P1.7口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
)
4//用總線操作點亮最后一個發(fā)光管.
//適用TX-1C單片機實驗板
//晶振為H.0592M
#include<reg52.h>//52單片機頭文件
voidmain()〃主函數(shù)
(
Pl=0x7f;〃將單片機Pl口的8個口由高到低分別賦值為01111111
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
5//用位操作點亮1,3,5,7發(fā)光管.
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
sbitledl=Pl*0;〃單片機管腳位聲明
sbitled3=Pl"2;〃單片機管腳位聲明
sbitled5=Pl"4;〃單片機管腳位聲明
sbitled7=Pl"6;〃單片機管腳位聲明
voidmain()〃主函數(shù)
(
ledl=0;〃將單片機P1.0口清零
led3=0;〃將單片機P1.2口清零
16d5=0;〃將單片機P1.4口清零
led7=0;〃將單片機P1.6口清零
while(l)〃程序停止在這里,在后面會講到為什么這樣寫。
}
6//用總線操作點亮1,3,5,7發(fā)光管.
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
voidmain()〃主函數(shù)
(
Pl=0xaa;〃將單片機Pl口的8個口由高到低分別賦值為10101010
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
7
//用位操作點亮2,4,5,6發(fā)光管.
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
sbitled2=PIT;〃單片機管腳位聲明
sbitled4=Pl"3;〃單片機管腳位聲明
sbitled5=Pl"4;〃單片機管腳位聲明
sbitled6=Pl5;〃單片機管腳位聲明
voidmain()〃主函數(shù)
t
led2=0;〃將單片機Pl.1口清零
led4=0;〃將單片機P1.3口清零
16d5=0;〃將單片機P1.4口清零
led6=0;〃將單片機P1.5口清零
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
8〃用總線操作點亮2,4,5,6發(fā)光管.
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
voidmain()〃主函數(shù)
(
Pl=0xc5;〃將單片機Pl口的8個口由高到低分別賦值為11000101
while(l);〃程序停止在這里,在后面會講到為什么這樣寫。
}
9//嘗試讓第一個發(fā)光管閃爍.(程序看不懂沒關系,后面章節(jié)會有詳細講解)
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
sbitledl=Pl0;〃單片機管腳位聲明
voidmain()〃主函數(shù)
(
unsignedinti;〃定義一個int型變量
while(l)
(
i=50000;〃變量賦初值為50000
ledl=0;〃點亮燈
while(i一);〃延時
i=50000;
ledl=l;〃熄滅燈
while(i一);
)
9//嘗試寫出流水燈程序(程序看不懂沒關系,后面章節(jié)會有詳細講解)
//適用TXTC單片機實驗板
//晶振為H.0592M
#include<reg52.h>//52單片機頭文件
voidmain()〃主函數(shù)
(
unsignedinti;〃定義一個int型變量
while(l)
i=50000;//變量賦初值為50000
Pl=0xfe;〃點亮第一個燈
while(i--);//延時
i=50000;//變量賦初值為50000
Pl=Oxfd;〃點亮第二個燈
while(i-);〃延時
i=50000;〃變量賺初值為50000
Pl=Oxfb;//點亮第三個燈
while(i-);〃延時
i=50000;//變量賦初值為50000
Pl=0xf7;//點亮第四個燈
while(i--);〃延時
i=50000;//變量賦初值為50000
Pl=0xef;〃點亮第五個燈
while(i--);//延時
i=50000;〃變量賦初值為50000
Pl=Oxdf;〃點亮第六個燈
while(i-);//延時
i=50000;〃變量賦初值為50000
Pl=0xbf;〃點亮第七個燈
while(i--);〃延時
i=50000;〃變量賦初值為50000
Pl=0x7f;〃點亮第八個燈
while(i-);〃延時
)
)
Lesson2
1//第一個發(fā)光管以間隔200ms閃爍
//適用TX-1C單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitledl=Pro:〃單片機管腳位聲明
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{〃delay(500);大約延時500ms.
uintx,y;
for(x=z;x>0;x-)
for(y=110;y>0;y-);
}
voidmain()〃主函數(shù)
while(l)〃大循環(huán)
ledl=O;〃點亮小燈
delay(200);//延時200毫秒
ledl=l;〃熄滅小燈
delay(200);〃延時200毫秒
)
)
2//8個發(fā)光管由上至下間隔1s流動
//,其中每個管亮500ms,滅500ms,亮時蜂鳴器響
//,滅時關閉蜂鳴器,一直重復下去。
//適用TXTC單片機實驗板
//晶振為11.0592M
#include<reg52.h>//52單片機頭文件
itinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P2'3;
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{〃delay(500);大約延時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;〃點亮小燈
beep=O;〃開啟蜂鳴器
delay(500);〃延時500毫秒
Pl=0xff;〃熄滅小燈
beep=l;〃關閉蜂鳴器
delay(500);〃延時500毫秒
a=_crol_(a,1);〃將a變量循環(huán)左移一位
)
)
3/*
8個發(fā)光管來回流動,
每個管亮100ms,流動時讓蜂鳴器發(fā)出〃滴滴〃聲。
*/
#include<reg52.h>//52單片機頭文件
tfinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P23;
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{//delay(500);大約延時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;〃點亮小燈
beep=O;〃開啟蜂鳴器
delay(50);〃延時50毫秒
beep=l;〃關閉蜂鳴器
delay(50);〃再延時50毫秒
a=_crol_(a,1);〃將a變量循環(huán)左移一位
)
a=0x7f;
for(i=0;i<8;i++)〃右移
(
Pl=a;〃點亮小燈
beep=0;〃開啟蜂鳴器
delay(50);〃延時50毫秒
beep=l;〃關閉蜂鳴器
delay(50);〃再延時50毫秒
a=_cror_(a,1);//將a變量循環(huán)右移一位
)
)
}
4/*
用8個發(fā)光管演示出8位二進制數(shù)累加過程。
*/
#include<reg52.h>//52單片機頭文件
#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint//宏定義
#defineucharunsignedchar〃宏定義
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{//delay(500);大約延時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個發(fā)光管間隔200ms由上至下,
再由下至上,再重復一次,
然后全部熄滅再以300ms間隔
全部閃爍5次。重復此過程
*/
#include<reg52.h>//52單片機頭文件
^include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{//delay(500);大約延時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;//點亮小燈
delay(200);〃延時200毫秒
a=_crol_(a,1);〃將a變量循環(huán)左移一位
)
a=0x7f;
for(i=0;i<8;i++)〃右移
(
Pl=a;//點亮小燈
delay(200);//延時200毫秒
a=_cror_(a,1);〃將a變量循環(huán)右移一位
}
Pl=Oxff;〃全部熄滅
for(j=0;j<10;j++)
(
delay(300);〃延時
P1=~P1;〃全部取反10次,既閃爍5次
)
)
)
6/*
間隔300ms第一次一個管亮流動一次,
第二次兩個管亮流動,依次到8個管亮,
然后重復整個過程。
*/
#include<reg52.h>//52單片機頭文件
itinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
Sdefineucharunsignedchar〃宏定義
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
{〃delay(500);大約延時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;//點亮小燈
delay(200);//延時200毫秒
a=_crol_(a,1);〃將a變量循環(huán)左移一位
}
a=_crol_(a,j);〃補齊,方便下面的左移一位
Pl=0xff;〃全部關閉
a=a?l;//左移一位讓多一個燈點亮
)
)
}
7/*
間隔3001ns先奇數(shù)亮再偶數(shù)亮,
循環(huán)三次;一個燈上下循環(huán)三次;
兩個分別從兩邊往中間流動三次;
再從中間往兩邊流動三次;8個全部閃爍3次;
關閉發(fā)光管,程序停止。
*/
#include<reg52.h>//52單片機頭文件
#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
^defineuintunsignedint〃宏定義
Wdefineucharunsignedchar〃宏定義
voiddelay(uintz)〃延時函數(shù),z的取值為這個函數(shù)的延時ms數(shù),如delay(200);
大約延時200ms.
//delay(500);大約延時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;〃點亮小燈
delay(300);〃延時300毫秒
Pl=0xaa;
delay(300);〃延時300毫秒
)
for(j=0;j<3;j++)〃流水燈
(
a=0xfe;
for(i=0;i<8;i++)
(
Pl=a;〃點亮小燈
delay(300);〃延時300毫秒
a=_crol_(a,1);
}
)
Pl=0xff;
for(j=0;j<3;j++)//從兩邊往中間流
(
Pl=0x7e;〃點亮小燈
delay(300);〃延時300毫秒
Pl=Oxbd;
delay(300);〃延時300毫秒
Pl=Oxdb;〃點亮小燈
delay(300);〃延時300毫秒
Pl=0xe7;
delay(300);〃延時300毫秒
)
Pl=Oxff;
for(j=0;j<3;j++)〃從中間往兩邊流
(
Pl=0xe7;〃點亮小燈
delay(300);//延時300毫秒
Pl=Oxdb;
delay(300);〃延時300毫秒
Pl=Oxbd;〃點亮小燈
delay(300);〃延時300毫秒
Pl=0x7e;
delay(300);〃延時300毫秒
)
Pl=Oxff;
for(j=0;j<6;j++)〃全部閃爍
(
P1=~P1;//點亮小燈
delay(300);//延時300毫秒
)
Pl=Oxff;
while(l);
}
Lesson3
1/*
利用定時/計數(shù)器TO從P1.0輸出周期為1s的方波,
讓發(fā)光二極管以1HZ閃爍,
設晶振頻率為12MHz。?
*/
#include<reg52.h>//52單片機頭文件
^include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
Sdefineuintunsignedint//宏定義
Sdefineucharunsignedchar//宏定義
sbitP1_O=P1_O;
uchartt;
voidmain()〃主函數(shù)
(
TM0D=0x01;〃設置定時器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時器。中斷
TRO=1;//啟動定時器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ù)器T1產(chǎn)生定時時鐘,
由P1口控制8個發(fā)光二極管,
使8個指示燈依次一個一個閃動,
閃動頻率為10次/秒(8個燈依次亮一遍為一個周期),循環(huán)。
設晶振頻率為12MHz。
*/
ttinclude<reg52.h>//52單片機頭文件
ttinclude<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
ttdefineuintunsignedint//宏定義
#defineucharunsignedchar〃宏定義
sbitPl_O=PrO;
uchartt,a;
voidmain()〃主函數(shù)
(
TM0D=0x01;〃設置定時器0為工作方式1
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時器。中斷
TRO=1;〃啟動定時器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/*
同時用兩個定時器控制蜂鳴器發(fā)聲,
定時器??刂祁l率,定時器1控制同個
頻率持續(xù)的時間,間隔2s依次輸出
1,10,50,100,200,400,800,
Ik(hz)的方波?
設晶振頻率為12MHzo
*/
#include<reg52.h>//52單片機頭文件
#include<intrins.h>〃包含有左右循環(huán)移位子函數(shù)的庫
#defineuintunsignedint〃宏定義
#defineucharunsignedchar〃宏定義
sbitbeep=P23;
uchartt;
uintfre,flag;
voidmain()〃主函數(shù)
fre=50000;
beep=0;
TM0D=0xll;//設置定時器0,定時器1為工作方式1
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
TII1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;//開定時器。中斷
ET1=1;
TR1=1;
TRO=1;//啟動定時器0
while(l);//等待中斷產(chǎn)生
voidtimerOOinterrupt1〃定時器0中斷
(
TRO=O;〃進中斷后先把定時器0中斷關閉,防止內部程序過多而造成中斷丟失
TH0=(65536-fre)/256;
TL0=(65536-fre)%256;
tt++;
if(flag<40)〃以下幾個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〃定時器1中斷用來產(chǎn)生2秒時間定時
(
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
flag++;
if(flag==360)
flag=0;
fre=50000;
)
4/*
用定時器以間隔500MS在6位數(shù)碼管上依次顯示
0、1、2、3....C、D、E、F,重復。
設時鐘頻率為12M
*/
#include<reg52.h>//52單片機頭文件
^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;//設置定時器0為工作方式1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;〃開總中斷
ETO=1;〃開定時器0中斷
TRO=1;〃啟動定時器0
dula=l;
P0=0x3f;〃給段開始送顯示0。
dula=0;〃關閉段選鎖存端,防止開始時出現(xiàn)亂碼。
wela=l;//11101010
P0=0xc0;//打開六個數(shù)碼管位選
wela=0;
while(l)
(
if(tt==10)〃每進入10次中斷即為500ms,執(zhí)行一次顯示變化。
(
tt=0;
num++;
if(num==16)
num=0;
dula=l;
P0=table[num];
dula=0;
)
)
voidexterO()interrupt1//定時器0中斷
(
TII0=(65536-50000)/256;
TLO=(65536-50000)%256;
tt++;
}
Lesson4
1/*
利用動態(tài)掃描方法在六位數(shù)碼管上顯示出穩(wěn)定的65432L
時鐘頻率為1L0592M
*/
#include<reg52.h>//52單片機頭文件
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ù)前關閉所有顯示,防止打開位選鎖存后段選數(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ù)
(
uintx,y;
for(x=z;x>0;x-)
for(y=110;y>0;y-);
}
2/*
用動態(tài)掃描方法和定時器1在數(shù)碼管的前三位顯示出秒表,
精確到1%秒,即最后一位顯示1%秒,一直循環(huán)下去
設時鐘頻率為12M
*/
#include<reg52.h>//52單片機頭文件
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;〃設置定時器1為工作方式1
TH1=(65536-10000)/256;
TL1=(65536-10000)%256;
EA=1;〃開總中斷
ET1=1;〃開定時器1中斷
TR1=1;〃啟動定時器1
while(l)
(
display(bai,shi,ge);
)
}
voidexterO()interrupt3//定時器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ù)前關閉所有顯示,防止打開位選鎖存后段選數(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ù)
(
uintx,y;
for(x=z;x>0;x-)
for(y=110;y>0;y-);
}
3/*
利用動態(tài)掃描和定時器1在數(shù)碼管上顯示
出從765432開始以1/10秒的速度往下遞減
直至765398并保持顯示此數(shù),與此同時利
用定時器0以500Ms速度進行流水燈從上至
下移動,當數(shù)碼管上數(shù)減到停止時,實驗
板上流水燈也停止然后全部開始閃爍,3秒
后(用TO定時)流水燈全部關閉、數(shù)碼管上
顯示出"HELLO"。到此保持住。
設晶振頻率為12MHz0
*/
#include<reg52.h>//52單片機頭文件
^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ù)
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;〃定時器初始化
TLO=(65536-50000)%256;
TH1=(65536-50000)/256;
TLl=(65536-50000)%256;
EA=1;
ETO=1;
ET1=1;
TRO=1;
TR1=1;
voidtimerO0interrupt1//定時器0中斷
THO=(65536-50000)/256;
TLO=(65536-50000)%256;
t0++;
if(flag!=l)//flag不等于1時進行流水燈
(
if(t0==10)
(
t0=l;
temp=crol(temp,1);
Pl=temp;
}
)
else〃否則進行燈閃爍
(
if(t0%4==0)〃小燈每200毫秒變化一次
P1=~P1;
if(t0==60)
(
TRO=O;〃3秒后關閉定時器0,關閉燈,并置flag=l
Pl=Oxff;
flagl=l;
}
voidtimerl()interrupt3〃定時器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)〃當?shù)?98時把原來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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年漁家傲試題及答案
- 2025年專升碩英語試題及答案
- 5年級下冊英語第5單元
- 嘉興風機吊裝施工方案
- 登鸛雀樓寫了詩人的所見
- arm芯片霍爾信號
- 2025年天然植物纖維及人造纖維編織工藝品合作協(xié)議書
- 2025年內蒙古通遼市單招職業(yè)傾向性測試題庫1套
- 2025年重慶青年職業(yè)技術學院單招職業(yè)傾向性測試題庫及參考答案1套
- 2025年攀枝花攀西職業(yè)學院單招職業(yè)技能測試題庫審定版
- 2025年度KTV娛樂門店轉讓協(xié)議
- 機電一體化專業(yè)課程改革調研報告及改革建議
- 2025年甘肅甘南州國控資產(chǎn)投資管理集團有限公司招聘筆試參考題庫附帶答案詳解
- 《市場營銷STP戰(zhàn)略》課件
- 《S中學宿舍樓工程量清單計價編制(附三維圖)》30000字
- 全國運動員注冊協(xié)議書范本(2篇)
- 《高點全景視頻監(jiān)控聯(lián)網(wǎng)技術要求》
- 白云山生態(tài)停車場工程施工組織設計施工方案
- 2024年四川省綿陽市中考語文試卷(附真題答案)
- 【MOOC】Office高級應用-成都信息工程大學 中國大學慕課MOOC答案
- 足球英語課件
評論
0/150
提交評論