您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页单片微机原理与接口技术实验指导(ok)

单片微机原理与接口技术实验指导(ok)

来源:筏尚旅游网


单片微机原理与接口技术实验指导

实验一 用户程序的编辑、编译与仿真调试

1. 实验目的

(1)学会给keil C集成开发环境添加STC系列单片机型号、头文件以及在线仿真驱动数据库。

(2)学会用keil C集成开发环境编辑、编译用户程序,并生成用户程序的机器代码。

(3)学会用keil C集成开发环境模拟仿真调试用户程序。

2. 预习与思考

预习3.1节内容,并根据实验内容制定好实验步骤。

3. 实验电路原理及硬件连线

本实验只需PC机和keil C集成开发环境工具,无须其它硬件电路。

2. 4. 实验内容

1

(1)实验程序功能与参考程序

本实验程序功能是一流水灯控制,控制信号从P1口输出,低电平驱动,轮流点亮P1控制的LED灯,时间间隔为1s,参考程序如下:

#include //STC15系列单片机头文件

#include

#include //I/O初始化文件,详见附录六

#define uchar unsigned char

#define uint unsigned int

uchar x=0xfe;

/*---------1000ms延时函数,从STC-ISP工具中获得---------*/

void Delay1000ms() //@11.0592MHz

{

2

unsigned char i, j, k;

_nop_();

_nop_();

i = 43;

j = 6;

k = 203;

do

{

do

{

while (--k);

} while (--j);

3

} while (--i);

}

/*------------主函数---------------*/

void main(void)

{

GPIO();

while(1)

{

P1=x;

Delay1000ms();

x=_crol_(x,1);

}

4

}

(2)用Keil Vision2开发工具输入、编辑与编译上述实验程序,并生成该程序的机器代码。

(3)用Keil Vision2开发工具的软件模拟仿真功能调试本实验程序。

5. 程序调试及效果分析

(1)从项目文件夹中,查看生成的机器代码,默认情况下,其默认文件名取决于哪里。

(2)用Keil Vision2开发工具的软件模拟仿真功能调试本实验程序的效果。

6. 实验报告要求

(1)总结给Keil Vision2开发工具添加STC系列单片机型号、头文件以及STC在线仿真驱动数据库的方法。

(2)总结应用Keil Vision2开发工具编辑、编译用户程序,生成用户程序机器代码的操作步骤。

实验二 用户程序的在线编程与在线仿真

1. 实验目的

5

(1) 理解STC单片机与PC机USB接口的通信线路及学会加载USB转串口的驱动程序。

(2)学会用STC-ISP在线编程工具给单片机加载用户程序与在系统调试。

(3)学会应用Keil Vision4开发工具与STC15实验板进行用户程序的在线仿真调试。

2. 预习与思考

(1)预习3.2节内容,理解STC单片机与PC机USB接口的通信线路,以及加载USB转串口驱动程序的方法。

(2)预习3.2节内容,掌握用STC_ISP在线编程工具下载用户程序的方法。

(3)预习3.2节内容,掌握STC单片机在线仿真的方法,包括如何设置仿真芯片以及Keil Vision4开发工具在线硬件仿真的设置。

(4)分析demo.c的程序功能。

3. 实验参考程序(demo.c)

#include

#include

6

#include

#define uchar unsigned char

#define uint unsigned int

/*---------1ms延时函数,从STC-ISP工具中获得---------*/

void Delay1ms() //@11.0592MHz

{

unsigned char i, j;

_nop_();

_nop_();

_nop_();

i = 11;

j = 190;

7

do

{

while (--j);

} while (--i);

}

/*------------xms延时函数---------------*/

void delay(uint x) //@11.0592MHz

{

uint i;

for(i=0;i{

Delay1ms();

8

}

}

/*------------主函数---------------*/

void main(void)

{

GPIO();

while(1)

{

P17 = 0;

delay(1000);

P17 = 1;

P16 = 0;

9

delay(1000);

P16 = 1;

P47 = 0;

delay(1000);

P47 = 1;

P46 = 0;

delay(1000);

P46 = 1;

}

}

4. 实验电路原理及硬件连线

本实验基于STC15开发板上实施,硬件线路包括STC单片机与PC机USB接口的通信线路,以及

10

LED7、LED8、LED9、LED10等LED灯。

5. 实验内容

(1)用Keil Vision2开发工具编辑、编译demo.c程序,并生成机器代码。

(2)用STC_ISP在线编程工具给STC15单片机开发板下载用户程序,运行用户程序,验证程序功能是否符合程序要求。

(3)应用Keil Vision2开发工具与STC15实验板进行用户程序的在线仿真调试,验证程序功能是否符合程序要求。

6. 程序调试及效果分析

(1)在系统调试,分析程序运行效果。

(2)在线仿真调试,分析程序运行效果。

7. 实验报告要求

(1)总结STC单片机在线编程的操作步骤与在系统调试方法。

(2)总结STC单片机在线仿真方法。

11

(3)总结STC单片机在线仿真有什么优势?

实验三 IAP15W4K58S4单片机外部中断的应用编程与调试

1. 实验目的

(1)进一步掌握中断技术的原理。

(2)掌握外部中断触发方式的设置与应用编程。

2. 预习与思考

预习7.1~7.3节内容,分析INT01.ASM与int01.c,根据程序功能制定程序调试方案。

3. 实验参考程序

(1)INT01.ASM

$include(stc15.inc) ;STC15新增特殊功能寄存器的定义文件,详见附录六

ORG 0000H

LJMP MAIN

12

ORG 0003H

LJMP INT0_ISR

ORG 0013H

LJMP INT1_ISR

MAIN:

LCALL GPIO SETB IT0

SETB IT1

SETB EX0

SETB EX1

SETB EA

SJMP $

;调用初始化程序

13

INT0_ISR:

CPL P1.7

RETI

INT1_ISR:

CPL P4.7

RETI

$include(gpio.inc) END

(2)int01.c

#include #include

#include

;STC15 I/O口的初始化文件

//包含支持IAP15W4K58S4单片机的头文件 //I/O初始化文件

14

#define uchar unsigned char

#define uint unsigned int

void ex01_init()

{

IT0=1;

IT1=1;

EX0=1;

EX1=1;

EA=1;

}

void main()

{

15

GPIO();

ex01_init();

while(1);

}

void int0_isr() interrupt 0

{

P17=~P17;

}

void int1_isr() interrupt 2

{

P47=~P47;

}

16

4. 实验电路原理及硬件连线

基于STC15单片机开发板实施,采用LED7、LED9显示,采用SW17、SW18输入外部中断0和外部中断1中断请求信号。

5. 实验内容

(1)完成INT01.ASM程序的编辑、编译与调试。

(2)完成int01.c程序的编辑、编译与调试。

6. 程序调试及效果分析

(1)调试INT01.ASM程序,记录与分析程序运行效果。

(2)调试int01.c程序,记录与分析程序运行效果。

7. 实验报告要求

(1)总结外部中断的触发方式设置与工作特点。

(2)总结按键输入外部中断请求信号存在的问题与解决方法。

17

实验四 IAP15W4K58S4单片机定时器/计数器定时功能的应用编程与调试

1. 实验目的

(1)进一步掌握IAP15W4K58S4单片机定时器/计数器的电路结构与工作原理。

(2)掌握IAP15W4K58S4单片机定时器/计数器定时功能的应用编程。

2. 预习与思考

(1)预习8.1~8.3节内容,掌握IAP15W4K58S4单片机定时器/计数器TMOD、TCON的设置与应用编程。

(2)预习8.4节内容,分析参考程序FLASH.ASM与flash.c。

3. 实验参考程序

(1)FLASH.ASM

$include(stc15.inc) ;STC15新增特殊功能寄存器的定义文件

ORG 0000H

18

LJMP MAIN

ORG 001BH

LJMP T1_ISR

MAIN:

LCALL GPIO MOV R3,#20 MOV TMOD,#00H MOV TH1,#3CH MOV TL1,#0B0H

SETB ET1 SETB EA

SETB TR1

;调用初始化程序

;置50ms计数循环初值

;设定时器1为方式0定时 ;置50ms定时器初值

;开放T1中断

;启动T1

19

SJMP $ ;原地踏步

T1_ISR:

DJNZ R3,T1_QUIT ;未到1s继续循环

MOV R3, #20

CPL P1.6

CPL P1.7

CPL P4.6

CPL P4.7

T1_QUIT:

RETI

$include(gpio.inc) END

;STC15 I/O口的初始化文件

20

(2)Flash.c

#include //包含支持IAP15W4K58S4单片机的头文件

#include

#include //I/O初始化文件

#define uchar unsigned char

#define uint unsigned int

uchar i = 0;

void main(void)

{

GPIO(); //初始化函数

TMOD=0x00;

TH1=0x3c;

21

TL1=0xb0;

ET1=1;

EA=1;

TR1=1;

while(1);

}

void T1_isr() interrupt 3

{

i++;

if(i==20)

{

i=0;

22

P16=~P16; //LED灯的驱动取反输出

P17=~P17;

P46=~P46;

P47=~P47;

}

}

4. 实验电路原理及硬件连线

基于STC15开发板,采用数码管显示秒表值。

5. 实验内容

完成SECOND.ASM与second.c程序的编辑、编译与调试。

6. 程序调试及效果分析

(1)调试SECOND.ASM程序,观察与记录程序运行结果。

23

(2)调试second.c程序,观察与记录程序运行结果。

7. 实验报告要求

(1)以IAP15W4K58S4单片机定时器/计数器方式0的电路结构,分析IAP15W4K58S4单片机定时器/计数器的工作原理。

(2)分析FLASH.ASM.ASM与flash.c的程序功能。

实验五 IAP15W4K58S4单片机双机通信的应用编程与调试

1. 实验目的

(1)巩固串行通信的基本概念与基本知识。

(2)掌握IAP15W4K58S4单片机串行口1工作方式的设置与应用编程。

2. 预习与思考

(1)预习9.1节内容,掌握串行通信的基本知识。

(2)预习9.2节内容,掌握IAP15W4K58S4单片机串行口1的工作方式与应用编程。

24

(3)分析例参考程序UART.ASM与uart.c,根据程序功能制定程序的调试方案。

3. 实验电路原理及硬件连线

(1)UART.ASM

$include(stc15.inc) ORG 0000H

LJMP MAIN

ORG 0023H

LJMP S_ISR

MAIN:

LCALL GPIO

LCALL UARTINIT

SETB ES

;STC15新增特殊功能寄存器的定义文件,详见附录六25

SETB EA

ORL P3,#00001100B

LOOP:

MOV A, P3

ANL A, #00001100B

MOV SBUF, A

JNB TI, $

CLR TI

LCALL DELAY100MS SJMP LOOP

S_ISR:

PUSH ACC

;设置发送间隔

26

JNB RI, S_QUIT

CLR RI

MOV A, SBUF

ANL A, #00001100B

CJNE A, #00H, NEXT1

CLR P1.7

SETB P1.6

SETB P4.7

SETB P4.6

SJMP S_QUIT

NEXT1:

CJNE A, #04H, NEXT2

27

SETB P1.7

CLR P1.6

SETB P4.7

SETB P4.6

SJMP S_QUIT

NEXT2:

CJNE A, #08H, NEXT3

SETB P1.7

SETB P1.6

CLR P4.7

SETB P4.6

SJMP S_QUIT

28

NEXT3:

SETB P1.7

SETB P1.6

SETB P4.7

CLR P4.6

S_QUIT:

POP ACC

RETI

UARTINIT: MOV SCON,#50H ORL AUXR,#40H ANL AUXR,#0FEH

;******************,从STC-ISP工具中获得

;8位数据,可变波特率

;定时器1时钟为Fosc,即1T

;串口1选择定时器1为波特率发生器

29

ANL TMOD,#0FH ;设定定时器1为16位自动重装方式

MOV TL1,#0E0H ;设定定时初值

MOV TH1,#0FEH ;设定定时初值

CLR ET1 SETB TR1 RET

DELAY100MS: NOP

NOP

NOP

PUSH 30H

PUSH 31H

;禁止定时器1中断

;启动定时器1

;@11.0592MHz ,从STC-ISP工具中获得

30

PUSH 32H

MOV 30H,#4

MOV 31H,#93

MOV 32H,#152

NEXT:

DJNZ 32H,NEXT

DJNZ 31H,NEXT

DJNZ 30H,NEXT

POP 32H

POP 31H

POP 30H

RET

31

$include(gpio.inc) ;STC15 I/O口的初始化文件

END

(2)uart.c

#include //包含支持IAP15W4K58S4单片机的头文件

#include

#include //I/O初始化文件

#define uchar unsigned char

#define uint unsigned int

uchar temp;

uchar temp1;

void Delay100ms() //@11.0592MHz

{

32

unsigned char i, j, k;

_nop_();

_nop_();

i = 5;

j = 52;

k = 195;

do

{

do

{

while (--k);

} while (--j);

33

} while (--i);

}

void UartInit(void) //******************

{

SCON = 0x50; //8位数据,可变波特率

AUXR |= 0x40; //定时器1时钟为Fosc,即1T

AUXR &= 0xFE; //串口1选择定时器1为波特率发生器

TMOD &= 0x0F; //设定定时器1为16位自动重装方式

TL1 = 0xE0; //设定定时初值

TH1 = 0xFE; //设定定时初值

ET1 = 0; //禁止定时器1中断

TR1 = 1;

//启动定时器1

34

}

void main()

{

GPIO();

UartInit();

ES=1;

EA=1;

while(1)

{

temp=P3;

temp=temp&0x0c;

SBUF=temp;

35

while(TI==0);

TI=0;

Delay100ms();

}

}

void uart_isr() interrupt 4

{

if(RI==1)

{

RI=0;

temp1=SBUF;

switch(temp1&0x0c)

36

{

case 0x00:P17=0;P16=1;P47=1;P46=1;break;

case 0x04:P17=1;P16=0;P47=1;P46=1;break;

case 0x08:P17=1;P16=1;P47=0;P46=1;break;

default:P17=1;P16=1;P47=1;P46=0;break;

}

}

}

4. 实验电路原理及硬件连线

基于STC15单片机开发板实施,采用LED7~LED10采用,采用SW17、SW18输入控制信号。甲机的P3.0与乙机的P3.1相连,甲机的P3.1与乙机的P3.0相连,甲机的地线与乙机的地线相连。

5. 实验内容

37

(1)完成UART.ASM程序的编辑、编译与调试。

(2)完成uart.c程序的编辑、编译与调试。

(3)改用串行口2实现双机通信,试编写程序并调试。

6. 程序调试及效果分析

(1)调试UART.ASM程序,改变甲机SW17、SW18的输入状态,观察乙机LED7~LED10的状态,并记录与分析;反之,改变乙机SW17、SW18的输入状态,观察甲机LED7~LED10的状态,并记录与分析。

(2)调试uart.c程序,改变甲机SW17、SW18的输入状态,观察乙机LED7~LED10的状态,并记录与分析;反之,改变乙机SW17、SW18的输入状态,观察甲机LED7~LED10的状态,并记录与分析。

(3)调试用串行口2实现双机通信的程序。

7. 实验报告要求

(1)总结串行口1的工作方式与工作特性。

(2)双机通信的调试结果与分析。

38

(3)用串行口2实现双机通信,画出用串行口实现双机通信的电路图,列出实验程序与调试记录,分析调试结果。

实验六 IAP15W4K58S4单片机AD转换模块的应用编程与调试

1. 实验目的

(1)掌握IAP15W4K58S4单片机AD转换模块的编程应用。

(2)通过实验理解IAP15W4K58S4单片机AD转换模块如何进行数据采集,如何实现模拟量到数字量的转换。

(3)了解IAP15W4K58S4单片机AD转换模块在各种领域的应用。

2. 预习与思考

(1)复习IAP15W4K58S4单片机AD转换模块的结构以及寄存器的控制使用。

(2)复习IAP15W4K58S4单片机8位或10位AD转换结果在两种不同存储格式下分别的计算方法。

(3)复习IAP15W4K58S4单片机AD转换模块的应用编程要点与思路,分析ad.c程序的功能。

39

3. 实验参考程序(ad.c)

#include //包含支持IAP15W4K58S4单片机的头文件

#include

#include //I/O初始化文件

#define uchar unsigned char

#define uint unsigned int

#include <595hc.h>

uint adc_value; //定义无符号字符型变量adc_value用于保存ADC值

void main(void) //主程序

{

uint i; //定义整型变量i用于适当延时

ADC_CONTR|=0x80;

//打开A/D转换电源

40

for(i=0;i<1000;i++); //适当延时

P1ASF=0x02; //设置ADC1(P1.1)为模拟量输入功能

CLK_DIV|=0x20; //ADRJ=1,设置A/D转换结果的存储格式

ADC_CONTR=0x; //选择选择输入通道ADC1(P1.1)并启动A/D转换

EADC=1; //打开ADC中断

EA=1; //打开CPU总中断

while(1)

{

Dis_buf[7]= adc_value%10; //秒值送显示缓冲区

Dis_buf[6]= adc_value/10%10;

Dis_buf[7]= adc_value/100%10; //秒值送显示缓冲区

Dis_buf[6]= adc_value/1000%10;

41

display(); // 调显示函数

}

}

void ADC_int(void) interrupt 5 //ADC中断服务子程序

{

ADC_CONTR=0x81; //将ADC_FLAG清0

adc_value= ADC_RES*256+ADC_RESL; //保存10位A/D转换结果,范围为0~1023

ADC_CONTR=0x; //重新启动A/D转换

}

4. 实验电路原理及硬件连线

将STC15实验板W1电位器的中间抽头(P5.5)接AD转换的输入端P1.1,转换后结果送数码管显示(0~1023)。

42

5. 实验内容

(1)完成ad.c程序的编辑、编译与调试。

(2)如果AD模块采用查询方式进行转换,编写程序并验证效果。

(3)如果AD模块采用定时方式进行转换,编写程序并验证效果。

6. 程序调试及效果分析

(1)通过编译软件keil编写源程序代码,编译通过没有错误,生成十六进制目标文件。

(2)通过STC单片机下载软件STC-ISP将十六进制目标文件下载到STC学习板的单片机芯片IAP15W4K58S4,验证实验效果。

(3)调节W1,观察数码管的显示值并记录。

7. 实验报告要求

(1)总结IAP15W4K58S4单片机AD转换模块的软、硬件设计原理与方法;

(2)写出所作实验程序的源代码,给每行语句加上详细的注释,在预习报告的基础上完善程序流程图;

43

(3)叙述程序调试过程中遇到的问题以及解决方法,写出本次实验的收获和心得体会。

实验七 键盘与数码LED显示接口的应用编程与调试

1. 实验目的

(1)掌握按键的编程应用。

(2)掌握数码管的编程应用。

2. 预习与思考

(1)预习13.2.1内容。

(2)预习13.2.1、13.2.3内容。

(4)画出按键电路原理图。

(5)画出串行数据动态扫描数码管显示电路原理图。

(6)分析595hc.h头文件(见附录)和key-display.c的程序功能。

3. 实验参考程序(key-display.c)

44

#include \"stc15.h\" //包含单片机头文件

#include \"GPIO.h\" //包含初始化I/O端口头文件

#include

#define uchar unsigned char

#include \"595hc.h\"//包含数码管显示头文件

sbit SW17 = P3^2; //定义按键-

sbit SW18 = P3^3; //定义按键+

void Delay(unsigned int v)

{

while(v!=0)

v--;

}

45

void main(void) //主程序

{

signed int i=0; //为了i能小于0,定义i为有符号变量,初始值0

GPIO(); //初始化I/O端口为准双向口while(1)

{

if(SW17==0) //按键-

{

Delay(10000); //按键消抖

if(SW17==0)

{

i--;

//变量i减1

46

if(i<0){i=99;} //判断如果i小于0就回到99

while(SW17==0); //等待按键松开

}

}

if(SW18==0) //按键+

{

Delay(10000); //按键消抖

if(SW18==0)

{

i++; //变量i加1

if(i>99){i=0;} //判断如果i大于99就回到0

while(SW18==0); //等待按键松开

47

}

}

Dis_buf[6]=i/10;//数码管显示十位数据

Dis_buf[7]=i%10;//数码管显示个位数据

display();

}

}

4. 实验电路原理及硬件连线

STC15学习板上已经连接好两个按键,分别是按键SW17(P3.2引脚)和按键SW18(P3.3引脚)。

硬件电路原理图参考STC15开发板电路图。图中由两片74HC595组成串行数据转并行数据驱动8位数码管显示。STC学习板上IAP15W4K58S4单片机P4.0引脚已经连接好74HC595的串行数据SER;P4.3引脚已经连接好74HC595的位同步脉冲输出SRCLK;P5.4引脚已经连接好74HC595的锁存脉冲输出RCLK。

48

5. 实验内容

(1)利用IAP15W4K58S4单片机设计两个按键SW17(P3.2)和SW18(P3.3),实现按下SW17使2位LED数码管显示的数字加1,按SW18显示的数字减1,当加1到最大值99后回到最小值0,当减1到最小值0后回到最大值99。单片机工作频率为12.0MHz。

(2)修改程序,实现当加1到最大值99后继续按键则保持最大值并给出报警,当减1到最小值0后继续按键保持最小值并给出报警。

(3)修改程序,实现按下按键SW17不松开可以连续减1,按下按键SW18不松开可以连续加1。

(4)修改程序,实现3位数0~999、4位数0~9999的显示。

(5)修改程序,实现数码管左边最高位是0时不显示。

(6)按下按键SW17,有时候显示可能不是减1,而是减2,同理按下按键SW18,有时候显示可能不是加1,而是加2,请分析是什么原因。

6. 程序调试及效果分析

(1)通过编译软件keil编写源程序代码,编译通过没有错误,生成十六进制目标文件。

(2)通过STC单片机下载软件STC-ISP将十六进制目标文件下载到STC学习板的单片机芯片

49

IAP15W4K58S4,验证实验效果。

(3)程序对按键进行识别,并对变量加一或减一操作,通过数码管的显示可观察。

(4)修改C语言源程序里面相关参数,观察实验效果的变化。

7. 实验报告要求

(1)总结按键与LED数码管显示的软、硬件设计原理与方法;

(2)写出所作实验程序的源代码,给每行语句加上详细的注释,在预习报告的基础上完善程序流程图;

(3)叙述程序调试过程中遇到的问题以及解决方法,写出本次实验的收获和心得体会。

附录: 常用文件

说明:本附录中包好STC15系列单片机特殊功能寄存器定义的头文件(STC15.INC和stc15.h)、STC15单片机I/O的初始化文件(GPIO.INC、gpio.h)以及STC15实验板数码管的驱动函数(595HC.INC、595hc.h),其中STC15系列单片机特殊功能寄存器定义的头文件可利用STC-ISP在线编程软件获取。

一、汇编部分

50

1. STC新增特殊功能寄存器的定义文件(STC15.INC)

(1)程序文件说明:该文件包含STC15系列单片机新增特殊功能寄存器的地址定义,文件名称命名为:STC15.INC。

(2)程序清单

P4 DATA 0C0H P5 DATA 0C8H P6 DATA 0E8H P7 DATA 0F8H P0M0 DATA 0x94 P0M1 DATA 093H P1M0 DATA 092H P1M1 DATA 091H

; 1111,1111 端口4

; xxxx,1111 端口5

; 0000,0000 端口6

; 0000,0000 端口7

; 0000,0000 端口0模式寄存器0

; 0000,0000 端口0模式寄存器1

; 0000,0000 端口1模式寄存器0

; 0000,0000 端口1模式寄存器1

51

P2M0 DATA 096H ; 0000,0000 端口2模式寄存器0

P2M1 DATA 095H ; 0000,0000 端口2模式寄存器1

P3M0 DATA 0B2H ; 0000,0000 端口3模式寄存器0

P3M1 P4M0 P4M1 P5M0 P5M1 P6M0 P6M1 P7M0 P7M1 DATA DATA DATA DATA DATA DATA DATA DATA DATA 0B1H 0B4H 0B3H 0CAH 0C9H 0CCH 0CBH 0E2H 0E1H ; 0000,0000 端口3模式寄存器1

; 0000,0000 端口4模式寄存器0

; 0000,0000 端口4模式寄存器1

; 0000,0000 端口5模式寄存器0

; 0000,0000 端口5模式寄存器1

; 0000,0000 端口6模式寄存器0

; 0000,0000 端口6模式寄存器1

; 0000,0000 端口7模式寄存器0

; 0000,0000 端口7模式寄存器1

52

;系统管理特殊功能寄存器

AUXR DATA 08EH ; 0000,0000 辅助寄存器

AUXR1 DATA 0A2H ; 0000,0000 辅助寄存器1

P_SW1 DATA 0A2H CLK_DIV DATA 097H BUS_SPEED DATA 0A1H P1ASF DATA 09DH P_SW2 DATA 0BAH ;中断特殊功能寄存器

IE2 DATA 0AFH IP2 DATA 0B5H INT_CLKO DATA 08FH ; 0000,0000 外设端口切换寄存器1

; 0000,0000 时钟分频控制寄存器

; xx10,x011 总线速度控制寄存器

; 0000,0000 端口1模拟功能配置寄存器

; 0xxx,x000 外设端口切换寄存器

; 0000,0000 中断控制寄存器2

; xxxx,xx00 中断优先级寄存器2

; 0000,0000 外部中断与时钟输出控制寄存器

53

;定时器特殊功能寄存器

T4T3M DATA 0D1H ; 0000,0000 T3/T4模式寄存器

T3T4M DATA 0D1H ; 0000,0000 T3/T4模式寄存器

T4H DATA 0D2H ; 0000,0000 T4高字节

T4L DATA 0D3H ; 0000,0000 T4低字节

T3H DATA 0D4H ; 0000,0000 T3高字节

T3L DATA 0D5H ; 0000,0000 T3低字节

T2H DATA 0D6H ; 0000,0000 T2高字节

T2L DATA 0D7H ; 0000,0000 T2低字节

WKTCL DATA 0AAH ; 0000,0000 掉电唤醒定时器低字节

WKTCH DATA 0ABH ; 0000,0000 掉电唤醒定时器高字节

WDT_CONTR DATA 0C1H ; 0000,0000 看门狗控制寄存器

;串行口特殊功能寄存器

S2CON DATA 09AH ; 0000,0000 串口2控制寄存器

S2BUF DATA 09BH ; xxxx,xxxx 串口2数据寄存器

S3CON DATA 0ACH S3BUF DATA 0ADH S4CON DATA 084H S4BUF DATA 085H SADDR DATA 0A9H SADEN DATA 0B9H ;ADC 特殊功能寄存器

ADC_CONTR DATA 0BCH ADC_RES DATA 0BDH ; 0000,0000 串口3控制寄存器

; xxxx,xxxx 串口3数据寄存器

; 0000,0000 串口4控制寄存器

; xxxx,xxxx 串口4数据寄存器

; 0000,0000 从机地址寄存器

; 0000,0000 从机地址屏蔽寄存器

; 0000,0000 A/D转换控制寄存器 ; 0000,0000 A/D转换结果高8位

55

ADC_RESL DATA 0BEH ; 0000,0000 A/D转换结果低2位

;SPI 特殊功能寄存器

SPSTAT DATA 0CDH ; 00xx,xxxx SPI状态寄存器

SPCTL DATA 0CEH SPDAT DATA 0CFH ;IAP/ISP 特殊功能寄存器

IAP_DATA DATA 0C2H IAP_ADDRH DATA 0C3H IAP_ADDRL DATA 0C4H IAP_CMD DATA 0C5H IAP_TRIG DATA 0C6H IAP_CONTR DATA 0C7H ; 0000,0100 SPI控制寄存器

; 0000,0000 SPI数据寄存器

; 0000,0000 EEPROM数据寄存器

; 0000,0000 EEPROM地址高字节

; 0000,0000 EEPROM地址第字节

; xxxx,xx00 EEPROM命令寄存器

; 0000,0000 EEPRPM命令触发寄存器

; 0000,x000 EEPROM控制寄存器

56

;PCA/PWM 特殊功能寄存器

CCON DATA 0D8H ; 00xx,xx00 PCA控制寄存器

CF BIT CCON.7 ;

CR BIT CCON.6 CCF2 BIT CCON.2 CCF1 BIT CCON.1 CCF0 BIT CCON.0 CMOD DATA 0D9H CL DATA 0E9H CH DATA 0F9H CCAPM0 DATA 0DAH CCAPM1 DATA 0DBH ;

;

;

;

; 0xxx,x000 PCA 工作模式寄存器

; 0000,0000 PCA计数器低字节

; 0000,0000 PCA计数器高字节

; 0000,0000 PCA模块0的PWM寄存器 ; 0000,0000 PCA模块1的PWM寄存器

57

CCAPM2 DATA 0DCH ; 0000,0000 PCA模块2的PWM 寄存器

CCAP0L DATA 0EAH ; 0000,0000 PCA模块0的捕捉/比较寄存器低字节

CCAP1L DATA 0EBH ; 0000,0000 PCA模块1的捕捉/比较寄存器低字节

CCAP2L DATA 0ECH PCA_PWM0 DATA 0F2H PCA_PWM1 DATA 0F3H PCA_PWM2 DATA 0F4H CCAP0H DATA 0FAH CCAP1H DATA 0FBH CCAP2H DATA 0FCH ;比较器特殊功能寄存器

CMPCR1 DATA 0E6H ; 0000,0000 PCA模块2的捕捉/比较寄存器低字节

; xxxx,xx00 PCA模块0的PWM寄存器

; xxxx,xx00 PCA模块1的PWM寄存器

; xxxx,xx00 PCA模块1的PWM寄存器

; 0000,0000 PCA模块0的捕捉/比较寄存器高字节

; 0000,0000 PCA模块1的捕捉/比较寄存器高字节

; 0000,0000 PCA模块2的捕捉/比较寄存器高字节

; 0000,0000 比较器控制寄存器1

58

CMPCR2 DATA 0E7H ; 0000,0000 比较器控制寄存器2

;增强型PWM波形发生器特殊功能寄存器

PWMCFG DATA 0F1H ; x000,0000 PWM配置寄存器

PWMCR DATA 0F5H ; 0000,0000 PWM控制寄存器

PWMIF DATA 0F6H ; x000,0000 PWM中断标志寄存器

PWMFDCR DATA 0F7H ; xx00,0000 PWM外部异常检测控制寄存器

2. STC15W4K32S4系列单片机I/O端口初始化文件(GPIO.INC)

(1)程序文件说明:该文件对STC15系列单片机的I/O端口进行初始化,将I/O端口的状态设置为准双向口,文件名称命名为:GPIO.INC,初始化I/O程序的入口地址为GPIO。

(2)程序清单

GPIO: ;初始化I/O口

MOV P0M1,#0

59

MOV P0M0,#0

MOV P1M1,#0

MOV P1M0,#0

MOV P2M1,#0

MOV P2M0,#0

MOV P3M1,#0

MOV P3M0,#0

MOV P4M1,#0

MOV P4M0,#0

MOV P5M1,#0

MOV P5M0,#0

RET

60

3. STC15W4K32S4系列单片机学习板数码管驱动文件(595HC.INC)

(1)程序文件说明:该程序文件是数码管595芯片驱动程序,命名为:595HC.INC。显示缓冲区为30H~37H,30H是最高位,37H是最低位;显示子程序的入口地址为F_DisplayScan。

(2)程序清单

;************* IO口定义 **************/

P_HC595_SER BIT P4.0 ; pin 14 SER data input

P_HC595_RCLK BIT P5.4 ; pin 12 RCLk store (latch) clock

P_HC595_SRCLK BIT P4.3 ; pin 11 SRCLK Shift data clock

; *********************** 显示相关程序

T_Display: ;标准字库

;0 1 2 3 4 5 6 7 8 9 A B C D E F

DB

03FH,006H,05BH,04FH,066H,06DH,07DH,007H,07FH,06FH,077H,07CH,039H,05EH,079H,071

61

H

; black - H J K L N o P U t G Q r M y

DB H

000H,040H,076H,01EH,070H,038H,037H,05CH,073H,03EH,078H,03dH,067H,050H,037H,06E

T_COM:

DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH ; 位码

; 函数: F_Send_595, 向HC595发送一个字节子程序

F_Send_595:

PUSH 02H ;R2入栈

MOV R2, #8

L_Send_595_Loop:

RLC A

62

MOV P_HC595_SER,C

SETB P_HC595_SRCLK

CLR P_HC595_SRCLK

DJNZ R2, L_Send_595_Loop

POP 02H ;R2出栈

RET

; 函数: F_DisplayScan, 显示扫描子程序

F_DisplayScan:

PUSH DPH ;DPH入栈

PUSH DPL ;DPL入栈

PUSH 00H ;R0 入栈

PUSH 01H ;R1入栈

63

PUSH 02H ;R2入栈

PUSH ACC

MOV R0,#30H

MOV R1,#0

MOV R2,#8

F_DisplayScan_LOOP:

MOV DPTR, #T_COM

MOV A, R1

MOVC A, @A+DPTR

INC R1

LCALL F_Send_595 ;输出位码

MOV DPTR, #T_Display

MOV A, @R0 ;取显示缓冲区数据

INC R0

MOVC A, @A+DPTR ;取显示码

LCALL F_Send_595 ;输出段码

SETB P_HC595_RCLK

CLR P_HC595_RCLK ; 锁存输出数据LCALL DELAY1MS

DJNZ R2, F_DisplayScan_LOOP

L_QuitDisplayScan:

POP ACC

POP 02H ;R2 出栈

POP 01H

;R1 出栈

65

POP 00H POP DPL POP DPH RET

DELAY1MS: PUSH 30H

PUSH 31H

MOV 30H,#9

MOV 31H,#150

NEXT:

DJNZ 31H,NEXT

DJNZ 30H,NEXT

;R0 出栈

;DPL出栈

;DPH出栈

;@11.0592MHz

66

POP 31H

POP 30H

RET

二、C语言部分

1. STC15W4K32S4系列单片机特殊功能寄存器定义头文件(stc15.h)

(1)程序文件说明:该文件包含STC15系列单片机特殊功能寄存器及可寻址特殊功能寄存器位的地址定义,文件名称命名为:stc15.h。该文件程序可从STC-ISP工具中获得。

(2)程序清单

#ifndef __STC15F2K60S2_H_

#define __STC15F2K60S2_H_

//内核特殊功能寄存器 // 复位值 描述

sfr ACC = 0xE0; //0000,0000 累加器Accumulator

67

sfr B = 0xF0; //0000,0000 B寄存器

sfr PSW = 0xD0; //0000,0000 程序状态字

sbit CY = PSW^7;

sbit AC sbit F0 sbit RS1 sbit RS0 sbit OV sbit P sfr SP sfr DPL sfr DPH = PSW^6;

= PSW^5;

= PSW^4;

= PSW^3;

= PSW^2;

= PSW^0;

= 0x81; //0000,0111 堆栈指针

= 0x82; //0000,0000 数据指针低字节

= 0x83; //0000,0000 数据指针高字节

68

//I/O 口特殊功能寄存器

sfr P0 = 0x80; //1111,1111 端口0

sbit P00 = P0^0;

sbit P01 sbit P02 sbit P03 sbit P04 sbit P05 sbit P06 sbit P07 sfr P1 sbit P10 = P0^1;

= P0^2;

= P0^3;

= P0^4;

= P0^5;

= P0^6;

= P0^7;

0x90; = P1^0;

//1111,1111 端口1

69

=

sbit P11 = P1^1;

sbit P12 = P1^2;

sbit P13 = P1^3;

sbit P14 sbit P15 sbit P16 sbit P17 sfr P2 sbit P20 sbit P21 sbit P22 sbit P23 = P1^4;

= P1^5;

= P1^6;

= P1^7;

0xA0; = P2^0;

= P2^1;

= P2^2;

= P2^3;

//1111,1111 端口2

70

=

sbit P24 = P2^4;

sbit P25 = P2^5;

sbit P26 = P2^6;

sbit P27 sfr P3 sbit P30 sbit P31 sbit P32 sbit P33 sbit P34 sbit P35 sbit P36 = P2^7;

0xB0; = P3^0;

= P3^1;

= P3^2;

= P3^3;

= P3^4;

= P3^5;

= P3^6;

//1111,1111 端口3

71

=

sbit P37 = P3^7;

sfr P4 = 0xC0; //1111,1111 端口4

sbit P40 = P4^0;

sbit P41 sbit P42 sbit P43 sbit P44 sbit P45 sbit P46 sbit P47 sfr P5 sbit P50 = P4^1;

= P4^2;

= P4^3;

= P4^4;

= P4^5;

= P4^6;

= P4^7;

0xC8; = P5^0;

//xxxx,1111 端口5

72

=

sbit P51 = P5^1;

sbit P52 = P5^2;

sbit P53 = P5^3;

sbit P sbit P55 sbit P56 sbit P57 sfr P6 sbit P60 sbit P61 sbit P62 sbit P63 = P5^4;

= P5^5;

= P5^6;

= P5^7;

0xE8; = P6^0;

= P6^1;

= P6^2;

= P6^3;

//0000,0000 端口6

73

=

sbit P = P6^4;

sbit P65 = P6^5;

sbit P66 = P6^6;

sbit P67 sfr P7 sbit P70 sbit P71 sbit P72 sbit P73 sbit P74 sbit P75 sbit P76 = P6^7;

0xF8; = P7^0;

= P7^1;

= P7^2;

= P7^3;

= P7^4;

= P7^5;

= P7^6;

//0000,0000 端口7

74

=

sbit P77 = P7^7;

sfr P0M0 = 0x94; //0000,0000 端口0模式寄存器0

sfr P0M1 = 0x93; //0000,0000 端口0模式寄存器1

sfr P1M0 sfr P1M1 sfr P2M0 sfr P2M1 sfr P3M0 sfr P3M1 sfr P4M0 sfr P4M1 sfr P5M0 0x92; 0x91; 0x96; 0x95; 0xB2; 0xB1; 0xB4; 0xB3; 0xCA; //0000,0000 端口1模式寄存器0

//0000,0000 端口1模式寄存器1

//0000,0000 端口2模式寄存器0

//0000,0000 端口2模式寄存器1

//0000,0000 端口3模式寄存器0

//0000,0000 端口3模式寄存器1

//0000,0000 端口4模式寄存器0

//0000,0000 端口4模式寄存器1

//0000,0000 端口5模式寄存器0

75

= = = = = = = = =

sfr P5M1 = 0xC9; //0000,0000 端口5模式寄存器1

sfr P6M0 = 0xCC; //0000,0000 端口6模式寄存器0

sfr P6M1 = 0xCB; //0000,0000 端口6模式寄存器1

sfr P7M0 = 0xE2; sfr P7M1 = 0xE1; //系统管理特殊功能寄存器

sfr PCON = 0x87; sfr AUXR = 0x8E; sfr AUXR1 = 0xA2; sfr P_SW1 = 0xA2; sfr CLK_DIV = 0x97; sfr BUS_SPEED = 0xA1; //0000,0000 端口7模式寄存器0

//0000,0000 端口7模式寄存器1

//0001,0000 电源控制寄存器

//0000,0000 辅助寄存器

//0000,0000 辅助寄存器1

//0000,0000 外设端口切换寄存器1

//0000,0000 时钟分频控制寄存器

//xx10,x011 总线速度控制寄存器

76

sfr P1ASF = 0x9D; //0000,0000 端口1模拟功能配置寄存器

sfr P_SW2 = 0xBA; //0xxx,x000 外设端口切换寄存器

//中断特殊功能寄存器

sfr IE sbit EA sbit ELVD sbit EADC sbit ES sbit ET1 sbit EX1 sbit ET0 sbit EX0 0xA8; = IE^7;

= IE^6;

= IE^5;

= IE^4;

= IE^3;

= IE^2;

= IE^1;

= IE^0;

//0000,0000 中断控制寄存器

77

=

sfr IP = 0xB8; //0000,0000 中断优先级寄存器

sbit PPCA = IP^7;

sbit PLVD = IP^6;

sbit PADC sbit PS sbit PT1 sbit PX1 sbit PT0 sbit PX0 sfr IE2 sfr IP2 sfr INT_CLKO = IP^5;

= IP^4;

= IP^3;

= IP^2;

= IP^1;

= IP^0;

0xAF; = 0xB5; = 0x8F; //0000,0000 中断控制寄存器2

//xxxx,xx00 中断优先级寄存器2

//0000,0000 外部中断与时钟输出控制寄存器78

=

//定时器特殊功能寄存器

sfr TCON = 0x88; //0000,0000 T0/T1控制寄存器

sbit TF1 = TCON^7;

sbit TR1 sbit TF0 sbit TR0 sbit IE1 sbit IT1 sbit IE0 sbit IT0 sfr TMOD sfr TL0 = TCON^6;

= TCON^5;

= TCON^4;

TCON^3;

TCON^2;

TCON^1;

TCON^0;

= 0x; //0000,0000 T0/T1模式寄存器= 0x8A; //0000,0000 T0低字节

79

= = = =

sfr TL1 = 0x8B; //0000,0000 T1低字节

sfr TH0 = 0x8C; //0000,0000 T0高字节

sfr TH1 = 0x8D; //0000,0000 T1高字节

sfr T4T3M sfr T3T4M sfr T4H sfr T4L sfr T3H sfr T3L sfr T2H sfr T2L sfr WKTCL = 0xD1; //0000,0000 T3/T4模式寄存器

= 0xD1; //0000,0000 T3/T4模式寄存器

= 0xD2; //0000,0000 T4高字节

0xD3; //0000,0000 T4低字节

= 0xD4; //0000,0000 T3高字节

0xD5; //0000,0000 T3低字节

= 0xD6; //0000,0000 T2高字节

0xD7; //0000,0000 T2低字节

= 0xAA; //0000,0000 掉电唤醒定时器低字节80

= = =

sfr WKTCH = 0xAB; //0000,0000 掉电唤醒定时器高字节

sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器

//串行口特殊功能寄存器

sfr SCON sbit SM0 sbit SM1 sbit SM2 sbit REN sbit TB8 sbit RB8 sbit TI sbit RI = 0x98; //0000,0000 串口1控制寄存器

= SCON^7;

= SCON^6;

= SCON^5;

= SCON^4;

= SCON^3;

= SCON^2;

SCON^1;

= SCON^0;

81

=

sfr SBUF = 0x99; //xxxx,xxxx 串口1数据寄存器

sfr S2CON = 0x9A; //0000,0000 串口2控制寄存器

sfr S2BUF = 0x9B; //xxxx,xxxx 串口2数据寄存器

sfr S3CON = 0xAC; //0000,0000 串口3控制寄存器

sfr S3BUF = 0xAD; //xxxx,xxxx 串口3数据寄存器

sfr S4CON = 0x84; //0000,0000 串口4控制寄存器

sfr S4BUF = 0x85; //xxxx,xxxx 串口4数据寄存器

sfr SADDR = 0xA9; //0000,0000 从机地址寄存器

sfr SADEN = 0xB9; //0000,0000 从机地址屏蔽寄存器

//ADC 特殊功能寄存器

sfr ADC_CONTR = 0xBC; //0000,0000 A/D转换控制寄存器

sfr ADC_RES = 0xBD; //0000,0000 A/D转换结果高8位

82

sfr ADC_RESL = 0xBE; //0000,0000 A/D转换结果低2位

//SPI 特殊功能寄存器

sfr SPSTAT = 0xCD; //00xx,xxxx SPI状态寄存器

sfr SPCTL = 0xCE; //0000,0100 SPI控制寄存器

sfr SPDAT = 0xCF; //0000,0000 SPI数据寄存器

//IAP/ISP 特殊功能寄存器

sfr IAP_DATA = 0xC2; //0000,0000 EEPROM数据寄存器

sfr IAP_ADDRH = 0xC3; //0000,0000 EEPROM地址高字节

sfr IAP_ADDRL = 0xC4; //0000,0000 EEPROM地址第字节

sfr IAP_CMD = 0xC5; //xxxx,xx00 EEPROM命令寄存器

sfr IAP_TRIG = 0xC6; //0000,0000 EEPRPM命令触发寄存器

sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器

83

//PCA/PWM 特殊功能寄存器

sfr CCON = 0xD8; //00xx,xx00 PCA控制寄存器

sbit CF = CCON^7;

sbit CR sbit CCF2 sbit CCF1 sbit CCF0 sfr CMOD sfr CL sfr CH sfr CCAPM0 sfr CCAPM1 = CCON^6;

= CCON^2;

= CCON^1;

= CCON^0;

= 0xD9; //0xxx,x000 PCA 工作模式寄存器

= 0xE9; //0000,0000 PCA计数器低字节

= 0xF9; //0000,0000 PCA计数器高字节

= 0xDA; //0000,0000 PCA模块0的PWM寄存器

= 0xDB; //0000,0000 PCA模块1的PWM寄存器

84

sfr CCAPM2 = 0xDC; //0000,0000 PCA模块2的PWM 寄存器

sfr CCAP0L = 0xEA; //0000,0000 PCA模块0的捕捉/比较寄存器低字节

sfr CCAP1L = 0xEB; //0000,0000 PCA模块1的捕捉/比较寄存器低字节

sfr CCAP2L = 0xEC; //0000,0000 PCA模块2的捕捉/比较寄存器低字节

sfr PCA_PWM0 = 0xF2; //xxxx,xx00 PCA模块0的PWM寄存器

sfr PCA_PWM1 = 0xF3; //xxxx,xx00 PCA模块1的PWM寄存器

sfr PCA_PWM2 = 0xF4; //xxxx,xx00 PCA模块1的PWM寄存器

sfr CCAP0H = 0xFA; //0000,0000 PCA模块0的捕捉/比较寄存器高字节

sfr CCAP1H = 0xFB; //0000,0000 PCA模块1的捕捉/比较寄存器高字节

sfr CCAP2H = 0xFC; //0000,0000 PCA模块2的捕捉/比较寄存器高字节

//比较器特殊功能寄存器

sfr CMPCR1 = 0xE6; //0000,0000 比较器控制寄存器1

85

sfr CMPCR2 = 0xE7; //0000,0000 比较器控制寄存器2

//增强型PWM波形发生器特殊功能寄存器

sfr PWMCFG = 0xf1; //x000,0000 PWM配置寄存器

sfr PWMCR = 0xf5; //0000,0000 PWM控制寄存器

sfr PWMIF = 0xf6; //x000,0000 PWM中断标志寄存器

sfr PWMFDCR = 0xf7; //xx00,0000 PWM外部异常检测控制寄存器

#endif

2. STC15W4K32S4系列单片机I/O端口初始化文件(gpio.h)

(1)程序文件说明:该文件对STC15系列单片机的I/O端口进行初始化,将I/O端口的状态设置为准双向口,文件名称命名为:gpio.h,初始化I/O的函数为GPIO()。

(2)程序清单

void GPIO() //初始化I/O口

86

{

P0M1=0;

P0M0=0;

P1M1=0;

P1M0=0;

P2M1=0;

P2M0=0;

P3M1=0;

P3M0=0;

P4M1=0;

P4M0=0;

P5M1=0;

87

P5M0=0;

}

3. STC15W4K32S4系列单片机学习板数码管驱动文件(595hc.h)

(1)程序文件说明:该程序文件是数码管595芯片驱动程序,命名为:595hc.h。显示缓冲区为Dis_buf[]数组,Dis_buf[0]是最高位,Dis_buf[7]是最低位;显示函数为display()。

(2)程序清单

/*------------- IO口定义---------------*/

sbit P_HC595_SER=P4^0; //pin 14 SER data input

sbit P_HC595_RCLK=P5^4; //pin 12 RCLk store (latch) clock

sbit P_HC595_SRCLK=P4^3; //pin 11 SRCLK Shift data clock

/*-------------段控制码、位控制码、显示缓冲区的定义 ---------------*/

uchar code

SEG7[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0

88

x00};

//“0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F、灭”的共阴极字形码

uchar code Scon_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位控制码

uchar data Dis_buf[]={16,16,16,16,16,16,16,0}; void Delay1ms() //@11.0592MHz

{

unsigned char i, j;

_nop_();

_nop_();

_nop_();

i = 11;

j = 190;

//显示缓冲区定义

do

{

while (--j);

} while (--i);

}

/*------------ 向595发送字节函数----------------*/

void F_Send_595(uchar x)

{

uchar i;

for(i=0;i<8;i++)

{

x=x<<1;

90

P_HC595_SER=CY;

P_HC595_SRCLK=1;

P_HC595_SRCLK=0;

}

}

/*------------ 数码管显示函数----------------*/

void display(void)

{

uchar i;

for(i=0;i<8;i++)

{

F_Send_595(Scon_bit[i]);

91

F_Send_595(SEG7[Dis_buf[i]]);

P_HC595_RCLK=1;

P_HC595_RCLK=0;

Delay1ms();

}

}

92

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务