单片机实验例题
- 格式:docx
- 大小:23.20 KB
- 文档页数:16
1.P3.0按键控制P1.0灯亮灭2.按键1数码管显示1,按键2数码管显示2,按键3数码管显示3,按键4数码管显示43.用两位数码管显示一个十进制数,变化范围为00-60,开始时显示00,按键S1每按下一次,数值加1;按键S2每按下一次,数值减1;按键S3每按下一次,数值归零。
4.矩阵键盘,数码管显示各个序号5.P3.0控制灯全亮,P3.1全灭。
中断口0控制流水灯向下,中断口1控制流水灯向上6.流水灯7.数码管显示1238.数码管三位分别从0显示到F9.数码管从0显示到999910.中断控制LED灯前四盏灭和后四盏亮11.中断口1控制l ed灯闪烁12.定时器0延时1S控制第一盏灯闪烁13.中断口0控制数码管从0到60显示14.按键KEY1进行调分、调时状态切换,进入调整状态时,时钟停止走动,这时按下按键KEY2可实现分、时的调整。
按键使用外部中断来产生。
15.串口初始化16.中断,定时总结1.P3.0按键控制P1.0灯亮灭#includ e<reg51.h>#d efine LED P1sbit Key=P3^0;//按键定义void Delayxms(unsigned int xms){ unsigned int i,j;for(i=xms;i>0;i--){for(j=110;j>0;j--);}}void main(){Key=1;whil e(1){if(Key==0){Delayxms(10);if(!Key){LED=~LED;}}}}2.按键1数码管显示1,按键2数码管显示2,按键3数码管显示3,按键4数码管显示4#includ e<reg51.h>#d efine LED P1unsigned char cod e led[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71}; sbit Key1=P3^0;sbit Key2=P3^1;sbit Key3=P3^2;sbit Key4=P3^3;void display(unsigned char num){P2=0xf0;P0=l ed[num];}void Delayxms(unsigned int xms){unsigned int i,j;for(i=xms;i<0;i--){for(j=110;j>0;j--);}}unsigned char Key_scan(){unsigned char KeyValue;P3 |=0xf0;if(Key1==0){Delayxms(10);if(!Key1){KeyValue=1;whil e(!Key1);}}if(Key2==0){Delayxms(10);if(!Key2){KeyValue=2;whil e(!Key2);}}if(Key3==0){Delayxms(10);if(!Key3){KeyValue=3;whil e(!Key3);}}if(Key4==0){Delayxms(10);if(!Key4){KeyValue=4;whil e(!Key4);}}return KeyValue;}void main(){whil e(1){display(Key_scan());}}3.用两位数码管显示一个十进制数,变化范围为00-60,开始时显示00,按键S1每按下一次,数值加1;按键S2每按下一次,数值减1;按键S3每按下一次,数值归零。
1.把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位物外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车或整个字符串传送完毕。
试编程实现。
ORG 0030H MOV R0,#inbuf MOV R1,#outbuf MOV R4,#10HLOOP:MOV A,@R0 ; 从内部RAM取数 CJNE A,#0DH,LL ;是否为回车符CRSJMP STOP ;是转停止传送 LL: MOVX @R1,A ;不是则传送到外部RAMINC R0 INC R1 DJNZ R4,LL;沒传送完则循环 STOP: SJMP $2、内部RAM从list单元开始存放一正数表,表中之数作无序排列,并以“-1”作结束标志。
编程实现在表中找出最小数。
(3AH存放在运行程序时的最小的数)ORG 0030HMOV R0,#listMOV A,@R0 ;取第一个正数LOOP: INC R0 ;指向下一个正数MOV 3AH,@R0CJNE A,3AH,CHK ;前一个数与后一个数比较CHK: JC LOOP1 ;前一个数小,则转MOV A,@R0 ;前一个数大,取后一个数LOOP1: XCH A,3AHCJNE A,#0FFH,LOOPXCH A,3AH ;取最小数MOV 3BH,A SJMP $3.内部RAM的X,Y 单元中各存放一个带符号的数,试编程实现按如下条件进行的运算,并将结果存入Z单元中。
若X为正奇数,Z =X+Y;若X为正偶数,Z =X∨Y;若X为负奇数,Z =X∧Y;若X为负偶数,Z =X⊕Y。
分析:负数:第7位为1,正数:第7位为0 奇数:第0位为1,偶数:第0位为0 ORG 0000H MOV A,20H CLR C RL A JC FS ;移到负数处处理RR A RR A ;第0位移到C 再判定一下是不是1 JC ZJS ;到正奇数处MOV A,20H ORL A,21H MOV 22H,A SJMP OKZJS: MOV A,20H ADD A,21H MOV 22H,A SJMP OKFS: MOV A,20H CLR C RR A JC FJS ;第0位是1,移到正奇数处理MOV A,20H XRL A,21H MOV 22H,A SJMP OKFJS: MOV A,20H ANL A,21H MOV 22H,A OK: END4、把一个8位二进制数的各位用ASCII码表示之(亦即为“0”的位用30H表示,为“1”的位用31H表示)。
单片机设计与开发实操题交通灯控制模拟(一) 功能简述随着各种陆路交通运输工具的飞速发展,交通灯也在我们的日常生活中,发挥了越来越大的作用。
本试验通过单片机控制LED以及数码管,来模拟现实生活中的交通灯工作情形。
模拟试验中,南北方向的红绿灯分别用LED1和LED2表示,东西方向的红绿灯用LED5 和LED6表示,用数码管显示倒计时时间。
交通灯的控制可以分为自动控制方式和人工控制方式:正常情况下,交通灯处于自动控制方式,此时东西方向和南北方向的交通灯轮流导通;特殊情况下,可以通过人工控制方式延长南北方向或东西方向交通灯的导通时间。
(二) 设计要求1.设计三个按键K1、K2、K3;K1为“自动”方式,K2位“南北”方向交通导通,K3为“东西”方向交通导通2.用四个LED模拟交通灯:LED1为南北方向“红”灯;LED2为南北方向“绿”灯;LED5为东西方向“红”灯;LED6为东西方向“绿”灯3.系统开始上电后,系统处于自动控制方式:A.系统上电后,首先是南北方向交通导通,LED1灭、LED2亮、LED5亮、LED6灭,数码管从60秒开始倒计时,每隔1秒减1B.倒计时到10秒时,南北方向绿灯(LED2)开始闪烁,闪烁间隔为0.5秒(亮、灭各0.5秒)C.60秒倒计时结束之后,东西方向交通导通:LED1亮、LED2灭、LED5灭、LED6亮;数码管重新开始从60秒倒计时,每隔1秒减1D.倒计时到10秒时,东西方向绿灯(LED6)开始闪烁,闪烁间隔为0.5秒(亮、灭各0.5秒)E.60秒倒计时结束之后,操作同步骤A4.在自动控制方式过程中,若按键K2或K3按下,则系统进入人工控制方式:A.若K2键按下,则强制南北方向交通导通。
此时若系统处于东西方向交通导通状态,则数码管从10秒开始倒计时,操作同步骤3 D,倒计时完成后进入南北交通导通状态,数码管显示“9999”,不递减B.若K3键按下,则强制东西方向交通导通。
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第 01 篇基础程序设计01 闪烁的LED/*名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h〉#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x-—){for(i=0;i〈120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include〈reg51。
h〉#include<intrins。
h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x—-){for(i=0;i〈120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/*名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include〈intrins.h>#define uchar unsigned char #define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x——){for(i=0;i〈120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i〈7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51。
单片机试题(附答案)一、单选题(共107题,每题1分,共107分)1.8051单片机的P0口可以驱动()个LSTTL负载。
A、4B、16C、8D、2正确答案:C2.在51系列单片机应用系统中启动ADC0809进行A/D转换时,使用()指令。
A、MOVXB、(B)MOVXC、MOVD、MOVE、A,@A+DPTR正确答案:A3.8051单片机的P0口做为输出口在驱动NMOS负载时必须接()。
A、下拉电阻B、上拉电阻C、地D、电源正确答案:B4.8051单片机的工作频率为6MHz,其内部定时器的最大定时时间是()。
A、8192μSB、131072μSC、256μSD、65536μS正确答案:B5.MCS-51单片机复位后程序计数器PC=()。
A、0FFFFB、2000C、0100D、0000H正确答案:D6.对于MCS-51单片机来说,上电复位所需的最短时间是振荡周期建立时间加上()个机器周期时间。
A、1B、2C、4D、8正确答案:B7.对于MCS-51单片机来说,上电复位所需的最短时间是振荡周期建立时间加上()个机器周期时间。
A、2B、4C、8D、16正确答案:A8.累加器A的内容是0ADH,执行RLA指令后累加器的内容变为()。
A、56B、5AC、(C)5BD、不确定正确答案:C9.堆栈指针的英文缩写是()。
A、STB、SPC、SD、S正确答案:B10.累加器A的内容是89H,执行RLA指令后累加器的内容变为()。
A、10B、11C、12D、13H正确答案:D11.下列芯片中属于单片机的芯片是()。
A、Z80B、8086C、80586D、M68HC08正确答案:D12.对于8751单片机,当其引脚EA接低电平时,可扩展的外部程序存储器最大为()k字节。
A、64B、60C、32D、16正确答案:A13.LJMP跳转空间最大可达到()。
A、2KB、(B)256C、(C)128D、64KB正确答案:D14.对于MCS-51单片机来说,上电复位所需的最短时间是振荡周期建立时间加上()个机器周期时间。
单片机实训试题及答案一、单项选择题(每题 2 分,共 20 分)1. 下列哪个不是单片机的组成部分?A. 中央处理器(CPU)B. 存储器C. 输入/输出接口D. 打印机答案:D2. 8051单片机的内部数据存储器的容量是多少?A. 256BB. 128BC. 512BD. 1024B答案:A3. 8051单片机的定时器/计数器有几个?A. 1个B. 2个C. 3个D. 4个答案:B4. 8051单片机的外部中断有几个?A. 1个B. 2个C. 3个D. 4个答案:B5. 8051单片机的串行通信中,波特率的设置是通过哪个寄存器完成的?A. TCONB. TMODC. SCOND. PCON答案:C6. 8051单片机中,哪个寄存器用于设置定时器的工作模式?A. TCONB. TMODC. SCOND. PCON答案:B7. 8051单片机的P1口有多少个引脚?A. 8个B. 10个C. 12个D. 14个答案:A8. 8051单片机中,哪个寄存器用于设置串行通信的控制?A. TCONB. TMODC. SCOND. PCON答案:C9. 8051单片机的外部中断0的触发方式是什么?A. 电平触发B. 边沿触发C. 定时触发D. 计数触发答案:B10. 8051单片机中,哪个寄存器用于设置电源控制?A. TCONB. TMODC. SCOND. PCON答案:D二、多项选择题(每题 2 分,共 20 分)1. 以下哪些是单片机的特点?A. 体积小B. 集成度高C. 功能强D. 价格高答案:ABC2. 8051单片机的定时器/计数器可以用于以下哪些功能?A. 定时B. 计数C. 串行通信D. 并行通信答案:AB3. 8051单片机的中断系统包括哪些?A. 外部中断B. 定时器中断C. 串行通信中断D. 看门狗中断答案:ABC4. 8051单片机的串行通信可以设置为以下哪些模式?A. 8位可变波特率B. 9位可变波特率C. 8位固定波特率D. 9位固定波特率答案:ABCD5. 8051单片机的I/O口可以配置为以下哪些模式?A. 推挽输出B. 开漏输出C. 输入模式D. 高阻态答案:ABCD6. 8051单片机的存储器包括以下哪些类型?A. 程序存储器B. 数据存储器C. 扩展存储器D. 缓存存储器答案:ABC7. 8051单片机的中断优先级可以设置为以下哪些?A. 高B. 中C. 低D. 不可中断答案:ACD8. 8051单片机的看门狗定时器可以用于以下哪些功能?A. 系统监控B. 定时重启C. 错误检测D. 串行通信答案:ABC9. 8051单片机的外部中断可以设置为以下哪些触发方式?A. 电平触发B. 边沿触发C. 定时触发D. 计数触发答案:AB10. 8051单片机的电源电压范围是多少?A. 3.3V-5.5VB. 4.5V-5.5VC. 5V-12VD. 9V-12V答案:B三、判断题(每题 2 分,共 20 分)1. 8051单片机的P0口可以作为外部扩展存储器的数据线。
单片机实验第二次实验:图见实验题1.P1.0~P1.7这八个发光二极管全部点亮#include#define uchar unsigned char#define uint unsigned intsbit greenLed=P1^0;Delay(uint cnt){ uchar i;do{for(i=0;i<165;i++);}while(cnt--);}main(){ while(1){ greenLed=0;Delay(1000);greenLed=1;Delay(1000);}}2. P1.0~P1.7这八个发光二极管循环点亮#include delay(unsigned char cnt){ unsigned int i;do{for(i=0;i<6000;i++);}while(cnt--);}main(){ unsigned char a;P1=~a;while(1){if(a!=0){ delay(5);a<<=1;P1=~a;}else{a=0x01;P1=~a;}}}3.通过外部中断控制八盏灯分别右移,左移,闪烁,双灯同时左移。
#include#define uchar unsigned charuchar code LedTable[]= {0x03,0x0c,0x30,0xc0};uchar led_flag = 4;uchar a; Delay(uchar cnt){ unsigned int i;do{ for(i=0;i<6000;i++);}while(cnt--);}void Led_rr(void)//led右移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x80;P1 = ~a;a >>= 1;}}void Led_rl(void)//led左移函数{ uchar i;for(i=0;i<8;i++){ if(a == 0) a= 0x01;P1 = ~a;a <<= 1;Delay(10);}}void Led_spark(void){ P1 = 0xff;Delay(10);P1 = 0;Delay(10);}void Led_lr_doble(){ uchar i;for (i=0;i<4;i++){ P1= ~LedTable[i];Delay(10);}}void int1(void) interrupt 2 //中断服务函数{ led_flag++;if(led_flag >= 3) led_flag = 0;}void main(void){ EA = 1;EX1 = 1;IT1 = 1;while(1){ if(led_flag ==4){ Led_spark();}if(led_flag == 0){ Led_rl();}if(led_flag == 1){ Led_rr();}if(led_flag == 2){ Led_lr_doble();}}第三次实验:1.设单片机的=12MHz,要求用定时器/计数器T0以方式1在P1.0脚上输出周期为4ms的方波。
1234,要求用按键修改数码管上的值一个按键作位选键、一个作加1键。
0000,要求实现电子钟功能,只显示分秒,按键用来校正电子钟的时间,一个按键作位选键、一个作加1键。
3、如下图所示,数码管初始显示12345678,要求用按键修改数码管上的值一个按键作位选键、一个作加1键。
4、如下图所示,甲乙两单片机,在甲单片机上有两按键,在乙单片机上有4只数码管,初始显示1234,要求用甲单片机的按键修改乙单片机上数码管的值一个按键作位选键、一个作加1键。
信号发生器,产生频率为1K的信号,用单片机测出此信号源的频率,并将频率值用16进制的方式显示在4位数码管上。
信号,此信号频率为1K,用单片机测出此信号源的每个周期中高电平的持续时间(测脉宽),并将测脉宽值用16进制的方式显示在4位数码管上。
一、数码管+按键disbuf0 equ 30hdisbuf1 equ 31hdisbuf2 equ 32hdisbuf3 equ 33hORG 0000hajmp mainmain:mov sp, #70hmov disbuf0, #4mov disbuf1, #3mov disbuf2, #2mov disbuf3, #1mov r4, #0mov r5, #0loop:call displaycall keyajmp loopdisplay:mov p2, #-1mov a, #disbuf0add a, r5mov r0, amov a, @r0mov dptr, #disptabmovc a, @a+dptrmov p0, amov dptr, #weitabmov a, r5movc a, @a+dptrmov p2, ainc r5cjne r5, #4, dispokmov r5, #0dispok:retdisptab:DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FHweitab:DB 0F7H,0FBH,0FDH,0FEHkey:jnb p3.0, key_seljnb p3.1, key_incajmp keyokkey_sel:inc r4cjne r4, #4, sel_upmov r4, #0sel_up:jnb p3.0, $ajmp keyokkey_inc:mov a, #disbuf0add a, r4mov r0, ainc @r0cjne @r0, #10, inc_upmov @r0, #0inc_up:jnb p3.1, $ajmp keyokkeyok:retend二、电子钟buf0 EQU 30Hbuf1 EQU 31Hbuf2 EQU 32Hbuf3 EQU 33Hcount_S EQU 40Hcount_M EQU 41HORG 0000HAjmp MainORG 001BHAjmp inter_T1 ;R5数码管个数;R0,R1送地址中的值Main: ;R2计数CALL init_T1MOV sp, #70HMOV R5, #0MOV buf0, #0MOV buf1, #0MOV buf2, #0MOV buf3, #0Loop:CALL DisplayAJMP Loopinit_T1:MOV A, TMODANL A, #0FH ;高四位清零,低四位保留ORL A, #10HMOV TMOD, AMOV TH1, #HIGH(-10000)MOV TL1, #LOW(-10000)SETB ET1SETB EASETB TR1RETinter_T1:PUSH ACCPUSH PSWINC R2CJNE R2, #100, Wait_SMOV R2, #0INC count_SMOV A, count_SCJNE A, #60, dealnumMOV count_S, #0INC count_MMOV A, count_MCJNE A, #60, dealnumMOV count_M, #0dealnum:CALL HextoBCDWait_s:MOV TH1, #HIGH(-10000)MOV TL1, #LOW(-10000)POP PSWPOP ACCRETIHextoBCD:MOV A, count_MMOV B, #10DIV ABMOV buf3, AMOV buf2, BMOV A, count_SMOV B, #10DIV ABMOV buf1, AMOV buf0, BRETDisplay:MOV P2,#-1MOV A, #buf0ADD A, R5MOV R0, AMOV A, @R0MOV DPTR, #DispTabMOVC A, @A+DPTRMOV P0, AMOV DPTR, #WeiTabMOV A, R5MOVC A, @A+DPTRMOV P2, AINC R5CJNE R5, #4, DispokMOV R5, #0Dispok:RETDispTab:DB 3FH, 06H, 5BH, 4FH, 66H, 6DHDB 7DH, 07H, 7FH, 6FH, 76H WeiTab:DB 0F7H,0FBH,0FDH,0FEHEND三、八位数码管+573disbuf0 equ 30hdisbuf1 equ 31hdisbuf2 equ 32hdisbuf3 equ 33hdisbuf4 equ 34hdisbuf5 equ 35hdisbuf6 equ 36hdisbuf7 equ 37hORG 0000Hajmp mainmain: mov sp,#70hmov disbuf0,#8mov disbuf1,#7mov disbuf2,#6mov disbuf3,#5mov disbuf4,#4mov disbuf5,#3mov disbuf6,#2mov disbuf7,#1mov r5,#0mov r4,#0loop: call disp;call delaycall keyajmp loopdisp: mov a,#disbuf0add a,r5mov r0,amov a,@r0mov p0,#-1setb p3.0clr p3.0mov dptr,#distabmovc a,@a+dptrmov p0,asetb p2.0clr p2.0mov dptr,#weitabmov a,r5movc a,@a+dptrmov p0,asetb p3.0clr p3.0inc r5cjne r5,#8,disokmov r5,#0disok: retkey: jnb p3.6,key_seljnb p3.7,key_incretkey_sel: inc r4cjne r4,#8,key_upmov r4,#0key_up: jnb p3.6,$retkey_inc: mov a,#disbuf0add a,r4mov r0,amov a,@r0inc acjne a,#10,upmov a,#0up: jnb p3.7,$mov @r0,aret;delay: mov r7,#0fh;l1: mov r6,#0fh; djnz r6,$; djnz r7,l1; retdistab: db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhweitab: db 07fh,0bfh,0dfh,0efh,0f7h,0fbh,0fdh,0fehend四、串行通信- 按键ORG 0000Hajmp mainmain:mov sp, #70call init_esloop:call keyajmp loopkey:jnb P1.6, key_seljnb p1.7, key_incajmp keyokkey_sel:jnb p1.6, $mov a, #01hmov sbuf ,ajnb ti, $clr tiajmp keyokkey_inc:jnb p1.7, $mov a, #02hmov sbuf, ajnb ti, $clr tikeyok:retinit_es:mov a, tmodanl a, #0fhorl a, #20hmov tmod,amov scon, #50hmov th1, #(-11059200/(384*9600))setb essetb easetb tr1retend串行通信-接收disbuf0 equ 30hdisbuf1 equ 31hdisbuf2 equ 32hdisbuf3 equ 33horg 0000hajmp mainorg 0023hajmp inter_esmain:mov sp, #70hmov r4, #0mov r5, #0mov disbuf0, #1mov disbuf1, #2mov disbuf2, #3mov disbuf3, #4call init_esloop:call displayajmp loopinit_es:mov a, tmodanl a, #0fhorl a, #20hmov tmod, amov scon, #50hmov th1, #(-11059200/(384*9600))setb essetb easetb tr1retinter_es:push accpush pswclr rimov a, sbufcjne a, #01h, next_incinc r4cjne r4, #4, interokmov r4, #0ajmp interoknext_inc:cjne a, #02h, interokmov a, #disbuf0add a, r4mov r0, ainc @r0cjne @r0, #10, interokmov @r0, #0interok:pop pswpop accretidisplay:mov a, #disbuf0add a, r5mov r0, amov a, @r0mov p2, #-1mov dptr, #disptabmovc a, @a+dptrmov p0, amov dptr, #weitabmov a, r5movc a, @a+dptrmov p2, ainc r5cjne r5, #4, dispokmov r5, #0dispok:retdisptab:db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h, 7fh, 6fh weitab:db 0f7h, 0fbh, 0fdh, 0fehend五、测频率disbuf0 equ 30hdisbuf1 equ 31hdisbuf2 equ 32hdisbuf3 equ 33horg 0000hajmp mainorg 001bhajmp inter_t1main:mov sp, #70hcall init_t1loop:call displayajmp loopinit_t1:mov tmod, #15hmov th0, #0mov tl0, #0mov th1, #high(-10000)mov tl1, #low(-10000)setb et1setb easetb tr1setb tr0retinter_t1:push accpush pswinc r2mov th1, #high(-10000)mov tl1, #low(-10000)cjne r2, #100, okmov r2, #0clr tr0clr tr1call hextobcdmov th0, #0mov tl0, #0setb tr1setb tr0ok:pop pswpop accretihextobcd:mov a, th0mov b, #16div abmov disbuf3, amov disbuf2, bmov a, tl0mov b, #16div abmov disbuf1, amov disbuf0, bretdisplay:mov p2, #-1mov a, #disbuf0add a, r5mov r0, amov a, @r0mov dptr, #disptabmovc a, @a+dptrmov p0, amov dptr, #weitabmov a, r5movc a, @a+dptrmov p2, ainc r5cjne r5, #4, dispokmov r5, #0dispok:retdisptab:DB 3fh,06h, 5bh,4fh, 66h, 6dh, 7dh, 07h, 7fh, 6fh, 77h,7CH, 49H, 51H, 79H, 71Hweitab:DB 0F7H,0FBH,0FDH,0FEHEnd六、测脉宽disbuf0 equ 30hdisbuf1 equ 31hdisbuf2 equ 32hdisbuf3 equ 33horg 0000hajmp mainmain:mov sp, #70call init_t1loop:call pulsecall displayajmp loopinit_t1:mov a, tmodanl a, #0fhorl a, #90hmov tmod, aretpulse:mov th1, #0mov tl1, #0jb p3.3, $jnb p3.3, $setb tr1jb p3.3, $clr tr1call hextobcdhextobcd:mov a, th1mov b, #16div abmov disbuf3, amov disbuf2, bmov a, tl1mov b, #16div abmov disbuf1, amov disbuf0, bretdisplay:mov p2, #-1mov a, #disbuf0add a, r5mov r0, amov a, @r0mov dptr, #disptabmovc a, @a+dptrmov p0, amov dptr, #weitabmov a, r5movc a, @a+dptrmov p2, ainc r5cjne r5, #4, dispokmov r5, #0dispok:retdisptab:DB 3FH, 06H, 5BH, 4FH, 66H, 6DHDB 7DH, 07H, 7FH, 6FH, 77H, 7CH, 49H, 5EH, 79H, 71HWeiTab:DB 0F7H,0FBH,0FDH,0FEHEND。
乙机发送,甲机接收。
请画出电路图并写出初始化发送(查询)和接收(中断方式)程序。
2、口线P1.0接一个发光二极管,由定时器0控制,用于演示1秒钟亮、1秒钟暗的效果。
3、给80C51单片机扩展一片6116,0809和8155,要求0809采用中断方式,8通道工作;采用138译码选择芯片。
请画出系统连接图,写出各芯片的地址范围并写出8155内各口及其内部的RAM地址范围。
4、已知系统的连接如图所示,试编写程序实现下列功能:(1).编写上电显示程序,显示“123456”。
(2).编写主程序,功能为:当有键按下(0~7号)时,都显示键号;无键按下,保持原有显示状态。
5、选用DAC0832芯片产生一个三角波,要求幅值为0~2.5V。
1200bps,甲机发送数据88H(查询方式),乙机接收(中断方式)。
请画出电路图并编程实现上述功能。
7、已知一单片机应用系统如下图所示。
试回答问题并编写显示程序,以1秒为间隔,亮暗相间,显示“88888888”。
(1).写出各口的地址和控制字A口地址:B口地址:C口地址:控制口地址:控制字:(2).显示程序8、已知ADC0809单片机的连接如下图所示,试写出启动0809第3通道A/D转换的程序段。
(1)、把外部2000H内容送到内部RAM的20H单元。
(2)、找出20H~22H三个单元中的最大数,放在A累加器中。
9、编写程序完成以下功能:每响应一次外部中断,发光二极管亮一秒钟。
六、简单编程题:(1)、用间接寻址方式,把外部20H内容送到内部RAM的20H单元。
(2)、依据第四题接线图,写出启动0809第3通道A/D转换的程序段。
(3)、编写串行口方式1串行发送初始化程序。
(省略波特率发生器初始化)。
10、假定甲乙机以方式1进行串行数据通信,晶振=6MHz,要求波特率为1200。
甲机发送,乙机接收。
请画出电路图并计算出波特率,写出初始化发送和接收程序。
11、当系统选用12MHz晶体振荡器时,由定时器0控制产生周期为4ms(脉冲宽度为2ms)的方波序列(采用中断方式),并由P1.0输出,请编写实验程序。
实验1 LED单灯跑动ORG 0000HAJMP MAINORG 0030HMAIN:MOV A,#0FEHMOV R0,#9 ;循环九次,8个灯亮及1次灯全灭START:MOV P0,A ;输出到P0口连接的LED灯上SETB C ;置进位CRLC A;带进位左移CALL D ELAY ;延时一段时间DJNZ R0,START ;反复循环AJMP MAIN ;重新开始;延时子程序DELAY:MOV R1,#15D1: MOV R2,#100D2: MOV R3,#100DJNZ R3,$DJNZ R2,D2DJNZ R1,D1RETEND实验2****************************步进电机的驱动*************************************;FOSC = 12MHz;---------------------------------------------------------------------------------; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!; 本步进电机步进角为5.625度. 一圈360 度, 需要64个脉冲完成!!! ;---------------------------------------------------------------------------------; A组线圈对应P0.0; B组线圈对应P0.1; C组线圈对应P0.2; D组线圈对应P0.3; 正转次序: AB组--BC组--CD组--DA组(即一个脉冲,正转5.625度) ;----------------------------------------------------------------------------------ORG 0000HLJMP MAINORG 0100HMAIN:;----------------------------正转--------------------------MOV R3,#192 ;正转3圈共192个脉冲START:MOV R0,#00HSTART1:MOV P0,#00HMOV A,R0MOV DPTR,#TABLEMOVC A,@A+DPTRJZ START ;对A的判断,当A=0时则转到STARTMOV P0,ALCALL DELAYINC R0DJNZ R3,START1MOV P0,#00HLCALL DELAY1;-----------------------------反转------------------------MOV R3,#128 ;反转2圈共128个脉冲START2:MOV P0,#00HMOV R0,#05START3:MOV A,R0MOV DPTR,#TABLEMOVC A,@A+DPTRJZ START2MOV P0,ACALL D ELAYINC R0DJNZ R3,START3MOV P0,#00HLCALL DELAY1LJMP MAIN;---------------------------转速控制-----------------------DELAY: MOV R7,#10 ;步进电机的转速M3: MOV R6,#248DJNZ R6,$DJNZ R7,M3RET;---------------------------延时控制----------------------DELAY1: MOV R4,#5 ;2S 延时子程序DEL2: MOV R3,#200DEL3: MOV R2,#250DJNZ R2,$DJNZ R3,DEL3DJNZ R4,DEL2RET;---------------------------正反转表----------------------TABLE:DB 03H,06H,0CH,09H; 正转表DB 00; 正转结束DB 03H,09H,0CH,06H; 反转表DB 00; 反转结束END实验3 8个数码管轮流显示;;重要说明:数码管在循环轮流显示的时候,喇叭跟继电器会有规律的发出声音跟吸合,;解决的办法可以将SE8(SPEAKER),SE2(RELAY)跳线设置为OFF,或者在软件上加入CLR P3.7 就可以解决ORG 0000HAJMP MAINORG 0030HMAIN:CLR P3.7 ;锁定继电器喇叭数据锁存器MOV P0,#0c0h ;送0的段码到数码管CLR P2.0 ;跟P2.0连接的那位数码管点亮CALL D ELAY ;延时SETB P2.0 ;关闭P2.0连接的数码管显示CLR P2.1 ;跟P2.1连接的那位数码管点亮CALL D ELAY ;延时SETB P2.1 ;关闭P2.1连接的数码管显示CLR P2.2 ;跟P2.2连接的那位数码管点亮CALL D ELAY ;延时SETB P2.2 ;关闭P2.2连接的数码管显示CLR P2.3 ;跟P2.3连接的那位数码管点亮CALL D ELAY ;延时SETB P2.3 ;关闭P2.3连接的数码管显示CLR P2.4 ;跟P2.4连接的那位数码管点亮CALL D ELAY ;延时SETB P2.4 ;关闭P2.4连接的数码管显示CLR P2.5 ;跟P2.5连接的那位数码管点亮CALL D ELAY ;延时SETB P2.5 ;关闭P2.5连接的数码管显示CLR P2.6 ;跟P2.6连接的那位数码管点亮CALL D ELAY ;延时SETB P2.6 ;关闭P2.6连接的数码管显示CLR P2.7 ;跟P2.7连接的那位数码管点亮CALL D ELAY ;延时SETB P2.7 ;关闭P2.7连接的数码管显示AJMP MAIN ;重新开始;延时子程序DELAY:MOV R5,#30D1: MOV R6,#100D2: MOV R7,#100DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND实验4P10P11和LED显示;说明:本程序必须要把开发板上的SE2跳线设置为2-3短接;说明:P1.1键为继电器放开键P1.0为吸合键;端口定义KEY1 BIT P1.0KEY2 BIT P1.1RELAY BIT P2.6SLED_LATCH BIT P3.6 ;数码管锁存器LE脚LED BIT P0.0ORG 0000HAJMP MAINORG 0030HMAIN:CLR SLED_LATCH ;锁定数码管锁存器,数码管不输出数据。
JB KEY1,MAIN1 ;按键P1.0没有按下,跳到MAIN1执行CALL D ELAY ;按键延时去抖动JB KEY1,MAIN1 ;再次检测按键P1.0是否按下,如果没有按下跳到MAIN1处执行CLR RELAY ;控制继电器吸合CLR LED ;点亮LEDMAIN1:JB KEY2,MAIN2 ;按键P1.1没有按下,跳到MAIN2执行CALL D ELAY ;按键延时去抖动JB KEY2,MAIN2 ;再次检测按键P1.1是否按下,如果没有按下跳到MAIN2处执行SETB R ELAY ;控制继电器放开SETB L ED ;熄灭LEDMAIN2:AJMP MAIN ;重新开始;延时子程序DELAY:D1: MOV R2,#100D2: MOV R3,#100DJNZ R3,$DJNZ R2,D2RETEND/*程序名:使用11.0592M晶体频率接收9012 编码方式红外信号9012编码规则:引导码8位用户码重发8位用户码按键码按键码反码顺序发送其中:1)引导码由4.5MS低电平+4.5MS高电平组成;2)数据码如果是周期为1.12毫秒:0.56毫秒低电平+0.56毫秒高电平为0如果是周期为2.24毫秒:0.56毫秒低电平+1.68毫秒高电平为13)数据码发送为低位在前,高位在后遥控器设置9012编码输出方式:(1)TV68 “长虹专用”请同时按下设置+电源键(2个红色键),等待红色指示灯亮起后输入006代码。
长虹专用遥控器011代码时候输出的用户码为08 08 TV68 “创维专用”请同时按下设置+电源键(2个红色键),等待红色指示灯亮起后输入006代码。
创维专用遥控器016代码时候输出的用户码为0A 0ARM-1288 万能遥控器请按下设置键(绿色键)约3秒,等待红色指示灯亮起后输入033代码RM1288 遥控器033代码时候输出的用户码为0E 0E开发板设置:SE10:断开SE11:断开SE9:闭合*/user_code0 equ 1AH ;定义接收到低8位用户码的存贮地址user_code1 equ 1BH ;高8位用户码data_code0 equ 1CH ;定义接收到按键码的存贮地址data_code1 equ 1DH ;按键码反码/*user_code0 user_code1 data_code0 data_code1 为4个连续地址的RAM区*/IR_PORT EQU P3.2 ;遥控接收端口IR_BIT EQU 34H ;遥控接收成功0为无接收1为成功接收一个遥控码IR_FASHI EQU 35H ;遥控发送方式:0为非连发方式1为连发方式LCD_RS equ P1.7 ;//LCD RS 端口LCD_RW equ P1.6 ;//LCD RW 端口LCD_E equ p2.4 ;//LCD E 端口LCD_DPORT equ P0 ;//LCD 数据端口LCD_DATA equ 30h ;//LCD 数据缓冲区LCD_Command equ 31h ;//LCD 命令字缓冲区LCD_XPOS equ 32h ;//LCD列方向地址指针LCD_YPOS equ 33h ;//LCD行方向地址指针ORG 0000HLJMP STARTORG 0003HLJMP IR ;外部中断入口ORG 0030HSTART:MOV user_code0,#0MOV user_code1,#0MOV data_code0,#0MOV data_code1,#0CALL L CD_RST ;LCD1602初始化START00:MOV DPTR,#Line0_TAB ;LCD1602的第一行显示:user:00 00 MOV R1,#16MOV R0,#0MOV LCD_YPOS,#0START03:MOV A,R0MOVC A,@A+DPTRMOV LCD_DATA,AMOV LCD_XPOS,R0CALL L CD_wdINC R0DJNZ R1,START03MOV DPTR,#Line1_TAB ;LCD1602的第二行显示:data:00 00 MOV R1,#16MOV R0,#0MOV LCD_YPOS,#1START04:MOV A,R0MOVC A,@A+DPTRMOV LCD_DATA,AMOV LCD_XPOS,R0CALL L CD_wdINC R0DJNZ R1,START04MOV IR_BIT,#0SETB I T0 ;外部中断0参数设置,下降沿触发SETB E X0 ;允许外部中断SETB E A ;开总中断MAIN:MOV A,IR_BITCJNE A,#1,MAIN00 ;判断IR_BIT 位是否为1 ,则是否有遥控接收。