} }
5、采用T0定时方式2在P1.0口输出周期为0.5ms的方波(设fosc=12MHz)。 分析:计数初值TL0= ((256-250)*12/12)%6 = 0x06, TMOD = 0x02 (1)查询方式 (2)中断方式 #include
6、设计0~9秒的简易秒表。(用T1,采用方式1编写1s延时函数,系统晶振12M。) #include
R3R4R5R6R7R8R9220220.220220220220220
7、通过按键改变灯的显示方式。要求正常情况是8个灯依次点亮,循环显示。按键按下后,8个灯同时亮灭一次,按键动作采用外部中断INT0实现。 #include
void delay(unsigned char t) { unsigned char i,j;
C1 for(i=200;i>0;i--) X1 for(j=t;j>0;j--); U1C2D1}
D2void int_0() interrupt 0 R10{ P1=0x00; D3C3 delay(250); D4 P1=0xff; U2:AD5 delay(250);
D6}
D7U2:Bvoid main()
D8{ unsigned k,w; EA=1;
R8R7R6R5R4R3R2R1 EX0=1; IT0=1; while(1) { w=0x01;
for(k=0;k<8;k++) { P1=~w; w<<=1; delay(100); } }}
8、定时中断方式实现键控的电子秒表:单片机控制2位数码管实现00~59的简易秒表,并C1C2X1利用3个独立按键实现秒表的启动、停止和复位功能。 U1#include
unsigned char t=0; //定义中断次数 C3unsigned char second=0; //定义秒
R1unsigned char code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 启动//定时器0中断函数
暂停timer0() interrupt 1{ 清零 TH0 =0x3c; //初值重装载 TL0 =0xb0; R16-R18/1K t++; //中断次数增1
if(t==20){ //若中断20次,相当于1秒 t=0; //中断次数计数器清零
30pFCRYSTAL19XTAL130pF18XTAL2LED-RED9RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7LED-RED10kLED-RED29303122uFPSENALEEALED-REDP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15LED-RED18161412Y0Y1Y2Y3A0A1A2A324681OELED-RED74LS24012345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDAT89C51LED-RED9753Y0Y1Y2Y3A0A1A2A31113151719LED-REDOE74LS2401k1k1k1k1k1k1k1k393837363534333221222324252627281011121314151617R910k30pF30pF19R2-R7/1kXTAL1CRYSTAL18XTAL29RSTP0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7393837363534333221222324252627281011121314151617P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.0P0.1P0.2P0.3P0.4P0.5P0.6PULLUPP2.0P2.1P2.2P2.3P2.4P2.5P2.610uF10k293031PSENALEEAP2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P2.0P2.1P2.2P2.3P2.4P2.5P2.6P0.0P0.1P0.2P0.3P0.4P0.5P0.612345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RDLED1LED280C51 second++; //秒计数器清零 }
if(second==60) second=0; //若秒计数器=60,清零 }
main(){
TMOD=0x01; //定义T0定时方式1 TH0 =0x3c; //50ms溢出初值 TL0 =0xb0;
ET0=1; //打开定时器0中断 EA=1; //打开总中断 while(1)
{ P0=table[second/10]; //P0口输出显示 P2=table[second]; //P2口输出显示 P1=P1&0x07; if(P1==0x06) TR0=1; if(P1==0x05) TR0=0; if(P1==0x03)
{ TR0=0; t=0; second=0; } } }
9、利用74LS164扩展并行输出口,并实现LED由上向下循环 。 #include
void delay() { unsigned int i; for (i=0; i<20000; i++) ; }
void main() {
unsigned char index, LED; //定义LED指针和显示字模 SCON = 0; //设置串行模块工作在方式0
MR = 1; // CLEAR端=1,允许输入数据 while (1) { LED=0x7f; for (index=0; index < 8; index++) {
SBUF = LED; //控制L0灯点亮
do {} while(!TI); //通过TI查询判别数据是否输出结束 LED = ((LED>>1)|0x80); //左移1位,末位置1 TI=0; delay(); }
}}
10、根据如下电路,利用DAC0832编程实现两路锯齿波发生器的功能。 U1+5VU2Y1P2.01939120P0.0/AD0CSVCC38219Y2WRU4 XTAL1P0.1/AD1WR1ILE(BY1/BY2)Y337318WRP0.2/AD2GNDWR2Y4Y41836417P0.3/AD3DI3XFERP2.4Y5Y3355163 XTAL2P0.4/AD4DI2DI4Y6Y2346156P0.5/AD5DI1DI5VXY7Y1337142P0.6/AD6DI0DI6Y8+5V32813 9RSTP0.7/AD7VREFDI7741912RFBIOUT2P2.0VX102111P2.0/A8GNDIOUT122P2.1 P2.1/A9VX23DAC0832P2.2/A10A2924P2.4PSENP2.3/A1110kVY3025 ALEP2.4/A12B3126RV1EAP2.5/A13U327P2.6/A14CP2.128120 P2.7/A15CSVCCWR219WR1ILE(BY1/BY2)+5VD110318WRP1.0P3.0/RXDGNDWR2+12V211Y4417 3P1.1P3.1/TXDDI3XFERP2.4Y312516U5P1.2P3.2/INT0DI2DI4Y24136153P1.3P3.3/INT1DI1DI5Y1147146P1.4P3.4/T0DI0DI6VY 5+5V8615132P1.5P3.5/T1VREFDI7WR716912P3.6/WRRFBIOUT2741VY101711P1.7P3.7/RDGNDIOUT1 8P1.680C51DAC0832 net=D910k RV2 +12V #include #include
#define DAC1 XBYTE[0xfeff] //设置1#DAC0832输入锁存器的访问地址 #define DAC2 XBYTE[0xfdff] //设置2#DAC0832输入锁存器的访问地址 #define DAOUT XBYTE[0xefff] //两个DAC0832的DAC寄存器访问地址 void main (void){
unsigned char num; //需要转换的数据 while(1){
for(num =0; num <=255; num++){
DAC1 = num; //上锯齿送入1#DAC DAC2 = 255-num; //下锯齿送入2#DAC
DAOUT = num; //两路同时进行D/A转换输出 } } }
Y8Y7Y6Y5Y8Y7Y6Y5
六、编程分析题:
1、单片机控制单灯闪烁。 #include
void delay(unsigned char k); sbit p1_0=P1^0; main()
C130pF1941550t1550%7U1X1CRYSTALXTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0393837363534333221222324252627281011121314C230pF18XTAL29C322uFRSTR11k293031PSENALEEAR2220D1LED-RED12345P1.0P1.1P1.2P1.3P1.4{ while(1) { p1_0=0; delay(200); p1_0=1; delay(200); }}
void delay(unsigned char k) { unsigned char i,j; for(i=0;i<255;i++) for(j=0;j 2:如下图,编程实现开关控制 LED 说明:开关 S1 和 S2 分别控制 LED1 和 LED2 #include { LED1=S1; LED2=S2; } } 3:如下图,编程实现8个发光二极管先按状态1的形式点亮,经过一段时间延时,再按状态2的形式点亮,点亮形式见下表 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 P1口引脚 灭 亮 灭 亮 灭 亮 灭 亮 对应灯的状态1 对应灯的状态2 亮 灭 #include void main( ) { while(1) { P1=0xaa; 亮 灭 亮 灭 亮 灭 C130pFX1CRYSTALU1C2D1LED-REDD29LED-REDD3RST30pF18XTAL219XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD393837363534333221222324252627281011121314151617R10C310k293031PSENALEEALED-REDD422uFLED-REDD5U2:A18161412Y0Y1Y2Y3A0A1A2A3OE2468112345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51A0A1A2A3OE1113151719LED-REDD6LED-REDD7975374LS240U2:BY0Y1Y2Y3LED-REDD8LED-REDR81kR71kR61kR51kR41kR31kR21kR11k74LS240 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C51语言复习题参考答案88(3)在线全文阅读。
相关推荐: