單片機(jī)復(fù)習(xí)題
一、填空:
在keil C51編譯器中,無符號(hào)整型變量占數(shù)據(jù)存儲(chǔ)器空間 2 字節(jié),其數(shù)值表達(dá)范圍是? 0~65535? 。
將01111100 B轉(zhuǎn)化為16進(jìn)制數(shù)據(jù)為0x 7c? ? ? 。在AT89S51的單片機(jī)標(biāo)有“24PC”,S表示 該芯片含有可串行下載功能的Flash存儲(chǔ)器 ,24代表 速度為24MHz? ? ? ?,P表示 表示塑料直插雙列DIP封裝 ,C表示 商業(yè)用品 。若MCS-51單片機(jī)從片內(nèi)程序存儲(chǔ)器執(zhí)行程序,引腳必須接 低電平 。
若MCS-51單片機(jī)從片外程序存儲(chǔ)器開始執(zhí)行程序,引腳必須接 高電平 。
引腳為? 外部程序存儲(chǔ)器選通信號(hào)使能腳(低電平有效) ,用于? 實(shí)現(xiàn)外部ROM單元的讀操作? 。
、引腳的作用是 分別是讀的時(shí)候用的引腳,寫的時(shí)候用的引腳 。(WR和RD的時(shí)序是51單片機(jī)自動(dòng)產(chǎn)生的,在執(zhí)行一條指令movx A,@dptr(讀時(shí)序)或movx @dptr,A(寫時(shí)序)都是片外傳值的,當(dāng)然讀寫的時(shí)候都是產(chǎn)生低跳變。)
XTAL1與XTAL2引腳功能為 片內(nèi)震蕩電路輸入端,片內(nèi)震蕩電路輸出端 ,用示波器觀察該引腳,在單片機(jī)正常工作時(shí),其波形應(yīng)為頻率為? 晶振寫真頻率方波? ?波形。(填寫內(nèi)容包括頻率參數(shù))
當(dāng)89C51復(fù)位時(shí),PC的內(nèi)容是:? ?0000H? ,正常工作時(shí)RST引腳的電平是:低電平 ,當(dāng)該引腳上出現(xiàn)持續(xù)2個(gè)以上的機(jī)器周期的? 高? 電平時(shí),可實(shí)現(xiàn)復(fù)位操作。
若MCS-51單片機(jī)使用晶振頻率為6MHz時(shí),其復(fù)位持續(xù)時(shí)間應(yīng)該超過? ?4us? ?。
ALE引腳為? 地址所存允許信號(hào)使能腳 ,用于 地址鎖存有效信號(hào)(使地址鎖存) ,當(dāng)不訪問外部存儲(chǔ)器時(shí),該端口以時(shí)鐘頻率的? 六分之一? 輸出固定的正脈沖信號(hào)。
P3.0和P3.1引腳還分別具有RXD和TXD的作用,在異步串行通信中,RXD引腳 串行輸入口 ,TXD 串行輸出口 。
引腳的作用:外部中斷0/外部中斷1中斷源,引入中斷請求信號(hào)。
在使用8051單片機(jī)計(jì)數(shù)器功能時(shí),外部計(jì)數(shù)脈沖從? T0/T1即P3.4/P3.5 引腳引入單片機(jī)。
MCS-51系列單片機(jī)的有_4__組并行I/O端口,其中___P0__、___P2__和___P3___具有第二功能。P0口可以作為數(shù)據(jù)總線和? ? ?低八位地址總線? ?,P2口作為 高八位地址? ? ? ? ? ?。
8051單片機(jī)P0口在作為普通IO口使用時(shí),作為輸出口需要? 上拉電阻? ?。而所有IO口在作為輸入口時(shí),需要向IO寄存器? ? 寫1? ? 。
將定時(shí)/計(jì)數(shù)器0用于定時(shí)方式,則計(jì)數(shù)脈沖來自于 內(nèi)部時(shí)鐘? ;若工作于計(jì)數(shù)方式,則計(jì)數(shù)脈沖必須來自于? ?外部脈沖 ,且計(jì)數(shù)頻率不超過晶振頻率的? ?24分之一? ?。
CPU響應(yīng)中斷后,不能自動(dòng)清除中斷請求“1”串行口中斷 。
數(shù)據(jù)存儲(chǔ)器在物理上和邏輯上都分為兩個(gè)地址空間,一個(gè)是由128B的 RAM(內(nèi)部數(shù)據(jù)存儲(chǔ)器) 和21個(gè) 特殊功能寄存器? ? ? ?。另外一個(gè)是片外最大可擴(kuò)充 64? ? KB的數(shù)據(jù)存儲(chǔ)器。其中片內(nèi)數(shù)據(jù)存儲(chǔ)區(qū)地址為? ?0030H? ? ?,劃分為 工作寄存器區(qū)? ? ? ?、? ? 位尋址區(qū)? ? ? ?以及? 通用RAM區(qū)? ? ? ? ?3部分。
8051單片機(jī)可以最大尋址的外部存儲(chǔ)器地址范圍是? 0000~FFFFH? ? ? ? ?。
8051單片機(jī)有四組工作寄存器,當(dāng)前正在使用哪一組,由特殊功能寄存器 PSW 的RS0、RS1兩位的狀態(tài)決定。
C51編程語言中,不僅可以設(shè)定變量的數(shù)據(jù)類型,還可以設(shè)定存儲(chǔ)器類型(將變量存儲(chǔ)在哪里),data、bdata(位尋址區(qū)20H~2FH)、idata、pdata(64kRAM)、xdata、code分別將變量存儲(chǔ)在什么區(qū)域。答:data idata xdata? code分別是存于片內(nèi)低128字節(jié),高128字節(jié),片外RAM中,和程序存儲(chǔ)器中。
C51編程語言中,SFR關(guān)鍵字的作用是 對(duì)51內(nèi)部寄存器定義一個(gè)地址? ,SBIT的作用是? 定義特殊功能寄存器位變量? ,
特殊功能寄存器IE用于實(shí)現(xiàn)中斷系統(tǒng)的兩級(jí)使能控制,若開啟定時(shí)器1以及外部中斷0,試寫出IE寄存器所對(duì)應(yīng)的16進(jìn)制數(shù)值? 0x89? ? ? ? ?。
若中斷優(yōu)先級(jí)控制寄存器IP的值設(shè)為0x12,請寫出此時(shí)五個(gè)中斷源的優(yōu)先級(jí)順序(由高到低)? T0? ? 、? 串行口? ? ? 、? 外部中斷0? ? ?、 外部中斷1? ? ? 、 T1? ? ? 。
特殊功能寄存器TCON中的TR0和TR1分別是T/C0和T/C1的? 啟動(dòng)/停止控制位? ? ? ? 。
TMOD寄存器中的GATE位用來? ?指定外部中斷請求是否參與對(duì)定時(shí)器/計(jì)數(shù)器的控制? ,若GATE位為1,則除了需要對(duì)應(yīng)的TRi為1之外,還需要? ? ? 引腳同時(shí)為高電平才可能啟動(dòng)相應(yīng)的定時(shí)器。
當(dāng)SCON寄存器的“REN”位設(shè)置為邏輯1時(shí),表明? ?串行口允許控制接收 。
將波特率設(shè)定成加倍,需要將特殊功能寄存器 PCON 的最高位設(shè)置成1。
IT0用于設(shè)定外部中斷0的觸發(fā)方式,當(dāng)其為邏輯0時(shí),表明 低電平觸發(fā) ,當(dāng)其為邏輯1時(shí),表明 下降沿觸發(fā)? ?。
DAC0832內(nèi)部有輸入鎖存器和DAC寄存器兩個(gè)緩沖器,由這兩個(gè)緩沖器的狀態(tài)可使DAC0832工作在 單緩沖模式? ? 、 雙緩沖模式? ?和? 直通模式? ?三種方式。
ADC0809將模擬量轉(zhuǎn)化成數(shù)字量之后,EOC引腳為 高 電平。
DAC和ADC的分辨能力都和自身位數(shù)有關(guān),位數(shù)越大,分辨能力越 強(qiáng)? 。
74LS273通常用來做簡單 輸出 接口擴(kuò)展;而74LS244則常用來做簡單 輸入 接口擴(kuò)展
在片外擴(kuò)展一片2764程序存儲(chǔ)器芯片要 13 根地址線。
二、簡答題:
1? 單片機(jī)最小系統(tǒng):含義及畫圖。
單片機(jī)正常運(yùn)行的最低配置:它有一系列模塊組成
1)復(fù)位系統(tǒng):當(dāng)引腳9出現(xiàn)2個(gè)機(jī)器周期以上高電平時(shí),單片機(jī)復(fù)位,程序從頭開始運(yùn)行.
2) 時(shí)鐘系統(tǒng):有振蕩器電路產(chǎn)生頻率等于晶振頻率,這時(shí)用的是外界晶振。
? ? ? ? ? ? 也可以又外部單獨(dú)輸入,此時(shí)XTAL2腳接地,時(shí)鐘信號(hào)由XTAL1輸入.
3) 電源系統(tǒng):VCC,和 GND引腳,供電電壓4--5.5V.

2? 掃描法識(shí)別矩陣式鍵盤的程序步驟。

3? 8051單片機(jī)串行通信中主從式多機(jī)通信原理。

4? 8051單片機(jī)有幾個(gè)中斷源,有幾級(jí)中斷優(yōu)先等級(jí)?如果所有中斷源處于同一優(yōu)先等級(jí),且同時(shí)產(chǎn)生中斷請求,CPU將按照何種順序響應(yīng)中斷?
8051單片機(jī)有五個(gè)中斷源,兩個(gè)中斷優(yōu)先等級(jí);
CPU將按照自然優(yōu)先級(jí)(高到低):外部中斷0,定時(shí)器/計(jì)數(shù)器中斷0,外部中斷1,定時(shí)器/計(jì)數(shù)器中斷1,串行口。
5? 8051單片機(jī)各中斷源的中斷標(biāo)志是什么?如何產(chǎn)生?如何清除的?串口中斷,外部中斷標(biāo)志是IF0,IF1 ;定時(shí)器中斷標(biāo)志是TF0,TF1;串口中斷標(biāo)志是RI,TI ;外部中斷和定時(shí)器中斷硬件置位,硬件清零,軟件不用管,串口中斷必須使用軟件清零(向TI和RI寫0)
TF1和TF0:分別為兩個(gè)定時(shí)/計(jì)數(shù)器中斷標(biāo)志,當(dāng)定時(shí)/計(jì)數(shù)器計(jì)數(shù)值滿產(chǎn)生溢出時(shí),由硬件自動(dòng)置1,并向CPU申請中斷。該
標(biāo)志位一直保持到CPU響應(yīng)中斷后,由硬件自動(dòng)清0;
IE1和IE0:為外部中斷1和外部中斷0的中斷請求標(biāo)志位,當(dāng)外部中斷源發(fā)出中斷請求時(shí),由硬件自動(dòng)置1,并向CPU申請中斷。該標(biāo)志位一直保持到CPU響應(yīng)中斷后,由硬件自動(dòng)清0;
RI和TI:分別是串口發(fā)送/接受標(biāo)志。在方式0下,發(fā)送/接受完第八位數(shù)據(jù)位時(shí),由硬件置位;在其它方式下,當(dāng)開始發(fā)送停止位時(shí),由硬件將T1置位,即向CPU申請中斷;當(dāng)接受到停止位時(shí),R1置位,必須由軟件清0;
6? 8051單片機(jī)串行通信中,奇偶校驗(yàn)原理。
設(shè)置串口工作模式為2或3,可以用第9位數(shù)據(jù)位作奇偶檢驗(yàn)位,例如發(fā)送一字節(jié)若這字節(jié)為奇檢驗(yàn)位則將第9位數(shù)據(jù)位置1,此時(shí)必須通過改變奇偶校驗(yàn)位TB8這樣在另一單片機(jī)接收時(shí)判斷第9位數(shù)據(jù)位為一時(shí)才接收就能完成奇檢驗(yàn)。(僅供參考)
7? 什么是數(shù)碼管的動(dòng)態(tài)顯示?
答:所謂動(dòng)態(tài)顯示就是一位一位輪流點(diǎn)亮每位顯示器,在同一時(shí)刻只有一位顯示器在工作,但由于人眼的視覺殘留效應(yīng)和發(fā)光二極管熄滅時(shí)的余暉,將出現(xiàn)多個(gè)字符“同時(shí)”點(diǎn)亮的現(xiàn)象。
8? 8051單片機(jī)定時(shí)器有幾種工作方式?各方式中的計(jì)數(shù)寄存器是幾位的?
定時(shí)器0有方式0,1,2,3共四種工作方式,而定時(shí)器0有方式0,1,2共三種工作方式;
(只要定時(shí)器0工作在方式3,定時(shí)器1,停止工作);
方式0,高八位,低五位共13位;
方式1,高八位,低八位共16位;
方式2,只有八位;
方式3,兩個(gè)八位;
9? 簡述8051單片機(jī)串行口有幾種工作方式,各自特點(diǎn)是什么?
方式1,
方式2.
方式3,
10 串口初始化編程,如:已知fosc=11.0592MHz,定時(shí)器1工作在方式2下,波特率欲設(shè)定為9600bps,請寫出串口初始化程序。
? ? ?MOV TMOD,#20H
? ? ?MOV TL1,#0FDH
? MOV TH1,#0FDH
? SETB TR1
? MOV SCON,#50H
? MOV R0,#55H
? SETB EA
? SETB ES
11 8051單片機(jī)的三總線結(jié)構(gòu)是什么?
數(shù)據(jù)總線,地址總線,控制總線。稱為三總線

數(shù)據(jù)總線,地址總線,控制總線。稱為三總線
12 8051單片機(jī)的主要特性是什么?
8051是MCS-51系列單片機(jī)中的代表產(chǎn)品,它內(nèi)部集成
了功能強(qiáng)大的中央處理器,包含了硬件乘除法器、21個(gè)
專用控制寄存器、4kB的程序存儲(chǔ)器、128字節(jié)的數(shù)據(jù)存
儲(chǔ)器、4組8位的并行口、兩個(gè)16位的可編程
定時(shí)/計(jì)數(shù)器、一個(gè)全雙工的串行口以及布爾處理器。
8051中集成了完善的各種中斷源,用戶可十分方便地
控制和使用其功能,使得它的應(yīng)用范圍加大,可以說
它可以滿足絕大部分的應(yīng)用場合。
三、程序設(shè)計(jì)類題目:
1要求:編寫基于定時(shí)器的LED流水燈閃爍程序,每1S燈的狀態(tài)變化一次。

1c語言
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint t=0,n=0;
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main(void)
{
? ? TH0=0X3C;?
? ? TL0=0XB0;
? ? EA=1;??
? ? ET0=1;
? ? TR0=1;
? ? TMOD=0X01;?
? ? P1=0xff;
while(1)
{
if(n==10)
{
n=0;
P1=table[t];
t++;
if(t==8) t=0;
}
}
}
void timer0()interrupt 1
{
n++;
TH0=0X3C;
TL0=0XB0;
}
2要求:根據(jù)按鍵的不同、要求編寫LED燈的變化程序。例如:當(dāng)?shù)谝粋€(gè)按鍵按下時(shí)、實(shí)現(xiàn)8個(gè)LED燈依次閃滅(流水燈),每個(gè)燈的閃滅間隔為0.5秒。第二個(gè)按鍵按下時(shí),實(shí)現(xiàn)從左面開始奇數(shù)號(hào)燈亮滅,閃爍頻率為1Hz。當(dāng)?shù)谌齻€(gè)按鍵按下時(shí),實(shí)現(xiàn)從左面開始偶數(shù)個(gè)燈亮滅,閃爍頻率為2Hz,當(dāng)所有按鍵全部按下時(shí),實(shí)現(xiàn)LED燈逐個(gè)點(diǎn)亮,然后再依次點(diǎn)滅。循環(huán)往復(fù)。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
uint m;
uchar code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code b[]={0x55,0xff};
uchar code c[]={0xaa,0xff};
uchar code d[]={1,3,7,15,31,63,127,255};
void DelayMS(uint x)
{
? uchar i;
?while(x--)
?{
? ?for(i=60;i>0;i--);
?}
}
void main()
{
P3=0xff;
while(1)
{
P1=0x00;
while(key1==0&&key2==0&&key3==0)
{
for(m=0;m<8;m++)
? ? {
P1=(d[m])%256;
DelayMS(50);
? }
for(m=0;m<8;m++)
? ? {
P1=(d[m])%256;
P1=~P1;
DelayMS(50);
? }
}
? ? while(key1==0)
?{
if((key1==0)&&(key2==0)&&(key3==0)==1)
? ?{break;}
for(m=0;m<8;m++)
{
P1 = a[m];
P1 = ~P1;
DelayMS(50);
? ?}
?}
? ? while(key2==0)
{
if((key1==0)&&(key2==0)&&(key3==0)==1)
? ? ? {break;}
for(m=0;m<2;m++)
{
P1 = b[m];
DelayMS(500);
? ?}
}
while(key3==0)
{
if((key1==0)&&(key2==0)&&(key3==0)==1)
? ? ? {break;}
for(m=0;m<2;m++)
{
P1 = c[m];
DelayMS(1000);
? ?}
}
}
}
3要求:編寫基于外部中斷顯示控制程序,要求初始顯示“001000”,完成基于外部中斷的數(shù)字顯示與調(diào)整程序。要求按下int0所對(duì)應(yīng)的按鈕,數(shù)字加1;按下int1對(duì)應(yīng)按鈕,數(shù)字減1。(數(shù)碼管顯示電路不一定這么復(fù)雜)

3c語言
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit a1=P2^0;
sbit a2=P2^1;
sbit a3=P2^2;
sbit a4=P2^3;
sbit a5=P2^4;
sbit a6=P2^5;
uchar tt=0,count=160;
uint m=1000;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void init()
{
EA=1;
EX1=1;
EX0=1;
IP=0x08;
P2=0xff;
}
?
void delay(uint ms)
{
????uint x,y;
????for(x=ms;x>0;x--)
????????for(y=110;y>0;y--);
}
?
void display(uint num)
{
????uchar ge,shi,bai,qian,wan,shiwan;
????ge=num%10+0;
????shi=(num/10)%10+0;
??bai=(num/100)%10+0;
??qian=(num/1000)%10+0;
??wan=(num/10000)%10+0;
??shiwan=(num/100000)%10+0;
????a1=1;
????P0=table[shiwan];
????delay(1);
????a1=0;
????a2=1;
????P0=table[wan];
????delay(1);
????a2=0;
??a3=1;
????P0=table[qian];
????delay(1);
????a3=0;
??a4=1;
????P0=table[bai];
????delay(1);
????a4=0;
a5=1;
????P0=table[shi];
????delay(1);
????a5=0;
a6=1;
????P0=table[ge];
????delay(1);
????a6=0;
}
??
main()
{
init();
while(1)
{
??display(m);
}
}
void timer0() interrupt 0
{
??m=m++;
display(m);
}
void timer1() interrupt 2
{
m=m--;
display(m);
}
4要求:外部中斷改變流水燈的流動(dòng)方向和狀態(tài)轉(zhuǎn)換的延遲時(shí)間。

#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
void Delay(uint z)
{
? uint x,y;
? for(x=z;x>0;x--){
? ?for(y=110;y>0;y--){
}}}
?
void main()
{
? EX0=1;
? IT0=1;
? EX1=1;
? IT1=1;
? EA=1;
while(1)
{
P1=0xff;
}
}
void? into() interrupt 0
{
? uint i;
? for(i=0;i<4;i++)
? {
? ? P1=0x00;
? ? Delay(100);
? ? P1=0xff;
Delay(100);
? }
}
?
void? intr() interrupt 1
{?
? uint i;
? for(i=0;i<4;i++)
? {
P1=0xfe;
Delay(50);
P1=0xfd;
Delay(50);
P1=0xfb;
Delay(50);
P1=0xf7;
Delay(50);
P1=0xef;
Delay(50);
P1=0xdf;
Delay(50);
P1=0xbf;
Delay(50);
P1=0x7f;
Delay(50);
? }
}
5要求:數(shù)碼管動(dòng)態(tài)顯示默認(rèn)數(shù)字(如654321)。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit a1=P2^0;
sbit a2=P2^1;
sbit a3=P2^2;
sbit a4=P2^3;
sbit a5=P2^4;
sbit a6=P2^5;
unsigned long m=654321;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void init()
{
EA=1;
EX1=1;
EX0=1;
IT0=1;
IT1=1;
IP=0x08;
P2=0xff;
}
?
void delay(uint ms)
{
????uint x,y;
????for(x=ms;x>0;x--)
????????for(y=110;y>0;y--);
}
?
void display(unsigned long num)
{
????uchar ge,shi,bai,qian,wan,shiwan;
????ge=num%10+0;
????shi=(num/10)%10+0;
??bai=(num/100)%10+0;
??qian=(num/1000)%10+0;
??wan=(num/10000)%10+0;
??shiwan=(num/100000)%10+0;
????a1=1;
????P0=table[shiwan];
????delay(1);
????a1=0;
????a2=1;
????P0=table[wan];
????delay(1);
????a2=0;
??a3=1;
????P0=table[qian];
????delay(1);
????a3=0;
??a4=1;
????P0=table[bai];
????delay(1);
????a4=0;
a5=1;
????P0=table[shi];
????delay(1);
????a5=0;
a6=1;
????P0=table[ge];
????delay(1);
????a6=0;
}
??
main()
{
init();
while(1)
{
??display(m);
}}
void timer0() interrupt 0
{m=m++;
display(m);}
void timer1() interrupt 2
{m=m--;display(m);}
6要求:編寫基于定時(shí)器的LED指示燈閃爍程序。LED亮1秒,熄滅N(大于等于1的整數(shù))秒。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
uint t=0,i=0;
uint N=4;
void main(void)
{
????TH0=0X3C;
????TL0=0XB0;
????EA=1; ?
????ET0=1;
????TR0=1;
????TMOD=0X01;
while(1)
{ P10=0;
while(1)
{
if(t==10)
{
i=0;
P10=1;
}
if(i==10*N)
{
i=0;
t=0;
P10=0;
}
}
??}
}
void timer0()interrupt 1
{
t++;
i++;
TH0=0X3C;
TL0=0XB0;
}
7要求:利用定時(shí)器T1的中斷來使P1.7控制蜂鳴器發(fā)出1kHz的音頻信號(hào),假設(shè)系統(tǒng)時(shí)鐘頻率為12MHz。編寫定時(shí)器的方波發(fā)生器,要求采用定時(shí)器工作方式0。(具體方式可能變化)

#include <reg52.h>
sbit P17=P1^7;
main()
{
????TH0=(8192-500)/32;
????TL0=(8192-500)%32;
????EA=1; ?
????ET0=1;
????TR0=1;
????TMOD=0X00;
????P17=0;
while(1);
}
void timer0()interrupt 1
{
??P17=!P17;
????TH0=(8192-5000)/32;
????TL0=(8192-5000)%32;
}
?
8要求:編寫基于定時(shí)器方式1的LED單個(gè)數(shù)碼管顯示程序,要求以每隔1s數(shù)字加1,當(dāng)數(shù)字大于9時(shí),清0。
?

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
uint t=0,num=0;
void main(void)
{
????TH0=0x3c;
????TL0=0xb0;
????EA=1; ?
????ET0=1;
????TR0=1;
????TMOD=0X01;
??while(1)
{
if(t==10)
{
if(num>9)num=0;
t=0;
P0=~table[num];
num++;
}
}
}
void timer0()interrupt 1
{
??t++;
????TH0=0x3c;
????TL0=0xb0;
}
9要求:編寫基于定時(shí)器方式1的LED兩個(gè)數(shù)碼管顯示程序,要求初始顯示“00”,每按下一次按鍵數(shù)字加1,當(dāng)數(shù)字大于99時(shí),清0;小于0時(shí),保持不變。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key1=P3^7;
sbit key2=P3^6;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
int num=20;
void delay(uint ms)
{
????uint x,y;
????for(x=ms;x>0;x--)
????for(y=110;y>0;y--);
}
void main(void)
{
??key1=1;
??key2=1;
??while(1)
{
??P0=table[(num/10)%10];
P2=table[num%10];
if(key1==0)
{
delay(100);
if(num>99)num=0;
P0=table[(num/10)%10];
P2=table[num%10];
num++;
}
if(key2==0)
{
num--;
delay(100);
if(num<0)num=0;
P0=table[(num/10)%10];
P2=table[num%10];
}
}
}

10要求:利用定時(shí)器功能編寫時(shí)、分、秒顯示程序。

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit a1=P2^0;
sbit a2=P2^1;
sbit a3=P2^2;
sbit a4=P2^3;
sbit a5=P2^4;
sbit a6=P2^5;
uint tt=0;
unsigned long m=32,f=23,s=13;
uchar code table[]={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90};
void init()
{
????TH0=0X3C;
????TL0=0XB0;
????EA=1; ?
????ET0=1; ??????
????TMOD=0X01; ???????
????TR0=1; ????
????P1=0x00;
}
void delay(uint ms)
{
????uint x,y;
????for(x=ms;x>0;x--)
????for(y=110;y>0;y--);
}
void display(unsigned long num)
{
????unsigned long ge,shi,bai,qian,wan,shiwan;
????ge=num%10+0;
????shi=(num/10)%10+0;
??bai=(num/100)%10+0;
??qian=(num/1000)%10+0;
??wan=(num/10000)%10+0;
??shiwan=(num/100000)%10+0;
????a1=1;
????P0=table[shiwan];
??delay(2);
????a1=0;
????a2=1;
????P0=(table[wan])+0x80;
????delay(2);
????a2=0;
??a3=1;
????P0=table[qian];
????delay(2);
????a3=0;
??a4=1;
????P0=(table[bai])+0x80;
????delay(2);
????a4=0;
a5=1;
????P0=table[shi];
????delay(2);
????a5=0;
a6=1;
????P0=table[ge];
????delay(2);
????a6=0;
}
?
main()
{
init();
while(1)
{if(tt>=10)
{tt=0;m++;
if(m>=60){m=0;f++;}
if(f>=60){f=0;s++;}
if(s>=24){s=0;}
??}
??display(m+100*f+ 10000*s);
}
}
void timer0() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
tt++;
}

11要求:利用74LS165和串行口工作方式0,實(shí)現(xiàn)開關(guān)控制對(duì)應(yīng)LED的亮滅。

12要求:利用74LS164和串行口工作方式0擴(kuò)展單片機(jī)IO口,使多個(gè)數(shù)碼管顯示。

13要求:編寫基于串口方式1的雙機(jī)通信程序,要求左側(cè)單片機(jī)不斷發(fā)出0x55;右側(cè)單片機(jī)接收到數(shù)據(jù)后判斷是否是0x55,如果是,向左側(cè)機(jī)回0xaa。兩種編程方式的考察:查詢方式和中斷方式。

14要求:編寫AD0809的模擬量采集源程序,實(shí)現(xiàn)將所選通道的0~5V電壓以LED燈的形式顯示。延遲方式、中斷方式或查詢方式。

15要求:基于DAC0832輸出三角波,正弦波波形

16要求:利用74LS273、74LS244擴(kuò)展IO口,實(shí)現(xiàn)每個(gè)開關(guān)控制對(duì)應(yīng)的LED亮滅。
