51单片机实验程序
51单片机实验指导书
目录目录 0第一章实验装置 (1)一.伟福开发环境的使用 (1)二.LJD-SY-5100学习实验开发板的使用 (17)第二章微机原理及应用实验 (22)实验一开发环境的使用 (22)实验二数据传送 (23)实验三数码转换 (23)实验四数值运算 (24)实验五堆栈操作 (25)实验六查表操作 (25)实验七逻辑运算操作 (26)实验八中断及I/O口实验 (26)实验九串行通讯实验 (28)第一章实验装置一.伟福开发环境的使用1.菜单文件菜单选项●文件 | 打开文件打开用户程序,进行编辑。
如果文件已经在项目中,可以在项目窗口中双击相应文件名打开文件。
●文件 | 保存文件保存用户程序。
用户在修改程序后,如果进行编译,则在编译前,系统会自动将修改过的文件存盘。
●文件 | 新建文件建立一个新的用户程序,在存盘的时候,系统会要求用户输入文件名。
●文件 | 另存为将用户程序存成另外一个文件,原来的文件内容不会改变。
●文件 | 重新打开在重新打开的下拉菜单中有最近打开过的文件及项目,选择相应的文件名或项目名就可以重新打开文件或项目。
●文件 | 打开项目打开一个用户项目,在项目中,用户可以设置仿真类型。
加入用户程序,进行编译,调试。
系统中只允许打开一个项目,打开一个项目或新建一个项目时,前一项目将自动关闭。
伟福开发环境的项目文件包括仿真器设置,模块文件,包含文件。
仿真器设置包括仿真器类型,仿真头(POD)类型,CPU类型,显示格式和产生的目标文件类型,可以用以下几种方法设置仿真器。
✧在项目窗口中双击第一行,将打开仿真器设置窗口,对仿真器进行设置。
✧按鼠标右键,在弹出菜单中选择[仿真器设置]。
✧主菜单| 仿真器| 仿真器设置。
加入模块文件✧按鼠标右键,在弹出菜单中选择[加入模块文件]。
✧主菜单| 项目| 加入模块文件。
加入包含文件✧按鼠标右键,在弹出菜单中选择[加入包含文件]。
✧主菜单| 项目| 加入包含文件。
51单片机C程序设计100例
《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
//延时 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_形成来回滚动的效果
名称:LED 模拟交通灯 说明:东西向绿灯亮若干秒,黄 灯闪烁 5 次后红灯亮, 红灯亮后,南 北向由红灯变为绿灯,若干秒后南北 向黄灯闪烁 5 此后变红灯,东西向变 绿灯,如此重复。 */ #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RED_A=P0^0; //东西向灯 sbit YELLOW_A=P0^1; sbit GREEN_A=P0^2; sbit RED_B=P0^3; //南北向灯 sbit YELLOW_B=P0^4; sbit GREEN_B=P0^5; uchar Flash_Count=0,Operation_Type=1; //闪烁次数,操作类型变量
2 上海师范大学信息与机电工程学院—倪继锋
《单片机 C 语言程序设计实训 100 例---基于 8051 和 PROTEUS 仿真》案例
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 /* 花样流水灯
51单片机实验手册
51单片机实验手册吉林大学2018-6-3目 录1. 51单片机实验板介绍 (3)1.1各个模块介绍 (4)2. Keil工程建立 (5)3.实验板的配置与程序烧写 (10)3.1实验板的配置 (10)3.2烧写软件驱动的安装 (12)3.2烧写软件程序 (14)4.实验一8个led流水灯 (17)5.实验二数码管动态显示实验 (20)1.51单片机实验板介绍USB数据线接口九针串口接口PS2接口温度传感器接口独立按键图1-1 模块功能示意图1图1-2 模块功能示意图2 1.1各个模块介绍1:单片机芯片2:复位模块3:单片机晶振4:MAX232串口转换芯片5:9针串口6:USB接口7:电源插座8:下载芯片ch3409:电源开关10:MAX485芯片11:继电器模块12:蜂鸣器模块13:L6219步进电机驱动芯片14:74HC595驱动芯片15:五线四相步进电机驱动芯片16:点阵模块18:138译码器19:2*4位共阴数码管20:EEPROM 芯片,AT24C0221:74HC165扩展芯片22:74HC595数据输出接口:23:74HC595驱动芯片24:74HC595驱动芯片25:NE555模块26:DS1302时钟模块27:4*4矩阵按键模块28:8个独立按键29:交通灯模块30:AD/DA模块31:温度传感器接口32:红外传感器接口33:PS2接口32:AT下载接口2.Keil工程建立第一步:打开Keil编译器:创建项目:Project------New uVision Project第二步:创建一个文件夹来放工程相关的文件,给工程项目命名,点击保存:第三步:选择芯片类型,我们虽然使用的是STC90C516RD 或 STC89C52RC的单片机,但这里我们选择ATMEL------AT89C52这个芯片就行。
因为都是51的内核,STC和 ATMEL没有什么区别,只是厂商不同罢了。
选择完对应的芯片之后,点击OK。
51单片机分组控制灯实验步骤
51单片机分组控制灯实验步骤以下是基于51 单片机实现分组控制灯实验的基本步骤:
1. 硬件准备:
- 51 单片机开发板
- 连接线
- 不同颜色的LED 灯(根据需要选择)
2. 连接电路:
- 将LED 灯连接到单片机的I/O 口,确保每个LED 灯与一个单独的I/O 口相连。
3. 软件编写:
- 使用C 语言或汇编语言编写单片机程序。
- 定义LED 灯对应的I/O 口。
- 创建一个延时函数,用于控制灯的闪烁时间。
- 编写主函数,根据需要进行分组控制。
- 遍历每个分组,将相应的I/O 口设置为高电平或低电平,以控制灯的亮灭。
4. 编译和下载程序:
- 使用相应的编译器将编写的程序编译成可执行的hex 文件。
- 使用下载工具将hex 文件下载到单片机中。
5. 运行和测试:
- 连接单片机开发板到电源,并运行程序。
- 观察LED 灯的状态,确保每个分组的灯按照预期进行控制。
51单片机实验手册
51单片机实验手册一、概述51单片机是一种经典的8位微控制器,具有广泛的应用领域。
本实验手册旨在提供详细的实验指导,帮助初学者快速入门,并为进一步的学习提供基础。
二、实验准备在进行51单片机实验之前,我们需要准备以下材料:1. 一块51单片机开发板2. USB数据线或者串口线3. 电脑及编程软件4. 面包板及对应的连接线5. 红、绿、蓝LED以及相应的电阻三、实验一:LED闪烁LED闪烁是最基础的实验之一,通过控制51单片机的I/O口状态,使LED灯交替亮灭。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将LED的长脚连接到P1.0引脚,短脚连接到GND引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>void main() {while(1) {P1 = 0x00; // P1置低电平,LED灯熄灭Delay(1000); // 延时1秒P1 = 0xFF; // P1置高电平,LED灯点亮Delay(1000); // 延时1秒}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
4. 运行实验将USB数据线或串口线连接到51单片机开发板和电脑,将开发板上的开关打开,观察LED灯的闪烁情况。
四、实验二:数码管显示通过控制51单片机的I/O口状态,驱动数码管显示数字。
1. 连接电路将51单片机的VCC引脚连接到正极,GND引脚连接到负极,将数码管的A、B、C、D、E、F、G引脚分别连接到P1.0、P1.1、P1.2、P1.3、P1.4、P1.5、P1.6引脚。
2. 编写程序使用C语言编写如下程序:```c#include <reg52.h>unsigned char code segment[] = { // 数码管段码表0x3F, // 数字00x06, // 数字10x5B, // 数字20x4F, // 数字30x66, // 数字40x6D, // 数字50x7D, // 数字60x07, // 数字70x7F, // 数字80x6F // 数字9};void main() {unsigned int i;while(1) {for(i = 0; i < 10; i++) {P1 = segment[i]; // 依次在数码管上显示数字0-9 Delay(1000); // 延时1秒}}}void Delay(unsigned int t) {while (t--);}```3. 烧录程序将编写好的程序通过编程软件下载到51单片机中。
51单片机应用程序实例
广告灯的左移右移
1. 实验任务
做单一灯的左移右移,硬件电路如图 4.1 所示,八个发光二极管 L1-L8 分别接在单 片机的 P1.0-P1.7 接口上,输出“0”时,发光二极管亮,开始时 P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0 亮,重复循环。
2. 电路原理图
图 4.1
每次送出的数据是不同,具体的数据如下表 1 所示
P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 L8 L7 L6 L5 L4 L3 L2 1111111 1111110 1111101 1111011
P1.0 L1 0 1 1 1
说明
L1 亮 L2 亮 L3 亮 L4 亮
1110111 1 1101111 1 1011111 1 0111111 1
一键多功能按键识别技术
1.实验任务 如图 9.1 所示,开关 SP1 接在 P3.7/RD 管脚上,在 AT89S51 单片机的 P1 端口接有四 个发光二极管,上电的时候,L1 接在 P1.0 管脚上的发光二极管在闪烁,当每一次按 下开关 SP1 的时候,L2 接在 P1.1 管脚上的发光二极管在闪烁,再按下开关 SP1 的时 候,L3 接在 P1.2 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,L4 接在 P1.3 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,又轮到 L1 在闪烁了,如此轮 流下去。 2.电路原理图
51单片机实训报告
51单片机实训报告一、引言51单片机是一种常用的微控制器,具有体积小、功耗低、功能强大等优点,广泛应用于各种电子设备中。
本文将介绍本次实训的目标、实验步骤、实验结果以及实训中遇到的问题及解决方案。
二、实训目标本次实训的目标是通过51单片机的学习和实践,掌握单片机的基本原理和编程技巧。
具体来说,我们需要实现以下几个功能:1. 熟悉51单片机的硬件组成和工作原理;2. 学习使用Keil C编译器进行单片机程序的编写和调试;3. 掌握基本的输入输出控制方法,如LED灯的控制、数码管的显示等;4. 学习使用定时器、中断等功能模块,实现一些实际应用,如蜂鸣器的发声、电机的控制等。
三、实验步骤1. 硬件准备:将51单片机与外围电路进行连接,如连接LED灯、数码管、蜂鸣器等;2. 编写程序:使用Keil C编译器编写相应的程序,包括引入头文件、定义宏、声明变量、编写主函数等;3. 调试程序:将程序下载到51单片机中,通过单片机的调试功能进行程序的调试,排除可能存在的错误;4. 运行程序:将调试好的程序运行在51单片机上,观察实验结果是否符合预期。
四、实验结果在本次实训中,我们顺利完成了以下几个实验:1. LED灯闪烁:通过控制51单片机的输出口,使LED灯以一定频率进行闪烁;2. 数码管显示:通过控制51单片机的输出口,使数码管显示指定的数字或字符;3. 蜂鸣器发声:通过控制51单片机的输出口,产生一定频率的方波信号,使蜂鸣器发出相应的声音;4. 电机控制:通过控制51单片机的输出口,控制电机的转动方向和速度。
五、实训中遇到的问题及解决方案在实训过程中,我们遇到了一些问题,但通过团队的共同努力和老师的指导,最终都得到了解决。
下面列举了其中的几个问题及解决方案:1. 问题:LED灯无法闪烁;解决方案:检查LED灯的连接是否正确,确认是否存在接触不良或短路等问题。
2. 问题:数码管无法正常显示;解决方案:检查数码管的连接是否正确,确认是否存在引脚连接错误或接触不良等问题。
51单片机秒表程序设计
51单片机秒表程序设计1. 简介秒表是一种用于测量时间间隔的计时器,常见于体育比赛、实验室实验等场合。
本文将介绍如何使用51单片机设计一个简单的秒表程序。
2. 硬件准备•51单片机开发板•LCD液晶显示屏•按键开关•连接线3. 程序流程3.1 初始化设置1.设置LCD液晶显示屏为8位数据总线模式。
2.初始化LCD液晶显示屏。
3.设置按键开关为输入模式。
3.2 主程序循环1.显示初始界面,包括“00:00:00”表示计时器初始值。
2.等待用户按下开始/暂停按钮。
3.如果用户按下开始按钮,则开始计时,进入计时状态。
4.如果用户按下暂停按钮,则暂停计时,进入暂停状态。
5.在计时状态下,每隔1毫秒更新计时器的数值,并在LCD液晶显示屏上显示出来。
6.在暂停状态下,不更新计时器的数值,并保持显示当前数值。
3.3 计时器控制1.定义一个变量time用于存储当前的计时器数值,单位为毫秒。
2.定义一个变量running用于标记计时器的状态,0表示暂停,1表示运行。
3.定义一个变量start_time用于存储计时器开始的时间点。
4.定义一个变量pause_time用于存储计时器暂停的时间点。
5.在计时状态下,每隔1毫秒更新time的值为当前时间与start_time的差值,并将其转换为小时、分钟、秒的表示形式。
6.在暂停状态下,保持time的值不变。
3.4 按键检测1.检测按键开关是否被按下。
2.如果按键被按下,判断是开始/暂停按钮还是复位按钮。
3.如果是开始/暂停按钮,并且当前处于计时状态,则将计时状态设置为暂停状态,并记录暂停时间点为pause_time;如果当前处于暂停状态,则将计时状态设置为运行状态,并记录开始时间点为当前时间减去暂停时间的差值。
4.如果是复位按钮,则将计时器数值重置为0,并将计时状态设置为暂停。
4. 程序代码示例#include <reg51.h>// 定义LCD控制端口和数据端口sbit LCD_RS = P1^0;sbit LCD_RW = P1^1;sbit LCD_EN = P1^2;sbit LCD_D4 = P1^3;sbit LCD_D5 = P1^4;sbit LCD_D6 = P1^5;sbit LCD_D7 = P1^6;// 定义按键开关端口sbit START_PAUSE_BTN = P2^0;sbit RESET_BTN = P2^1;// 定义全局变量unsigned int time = 0; // 计时器数值,单位为毫秒bit running = 0; // 计时器状态,0表示暂停,1表示运行unsigned long start_time = 0; // 开始时间点unsigned long pause_time = 0; // 暂停时间点// 函数声明void delay(unsigned int ms);void lcd_init();void lcd_command(unsigned char cmd);void lcd_data(unsigned char dat);void lcd_string(unsigned char *str);void lcd_clear();void lcd_gotoxy(unsigned char x, unsigned char y);// 主函数void main() {// 初始化设置lcd_init();while (1) {// 显示初始界面lcd_clear();lcd_gotoxy(0, 0);lcd_string("00:00:00");// 等待用户按下开始/暂停按钮while (!START_PAUSE_BTN && !RESET_BTN);// 判断按钮类型并处理计时器状态if (START_PAUSE_BTN) {if (running) { // 当前处于计时状态,按下按钮将进入暂停状态 running = 0;pause_time = time;} else { // 当前处于暂停状态,按下按钮将进入计时状态running = 1;start_time = get_current_time() - pause_time;}} else if (RESET_BTN) { // 复位按钮按下,重置计时器time = 0;running = 0;}}}// 毫秒级延时函数void delay(unsigned int ms) {unsigned int i, j;for (i = ms; i > 0; i--) {for (j = 110; j > 0; j--);}}// LCD初始化函数void lcd_init() {lcd_command(0x38); // 设置8位数据总线模式lcd_command(0x0C); // 显示开,光标关闭lcd_command(0x06); // 光标右移,不移动显示器lcd_command(0x01); // 清屏}// 向LCD发送指令函数void lcd_command(unsigned char cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 1;LCD_D4 = cmd >> 4 & 1;LCD_D5 = cmd >> 5 & 1;LCD_D6 = cmd >> 6 & 1;LCD_D7 = cmd >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = cmd >> 0 & 1;LCD_D5 = cmd >> 1 & 1;LCD_D6 = cmd >> 2 & 1;LCD_D7 = cmd >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送数据函数void lcd_data(unsigned char dat) { LCD_RS = 1;LCD_RW = 0;LCD_EN = 1;LCD_D4 = dat >> 4 & 1;LCD_D5 = dat >> 5 & 1;LCD_D6 = dat >> 6 & 1;LCD_D7 = dat >> 7 & 1;delay(1);LCD_EN = 0;LCD_D4 = dat >> 0 & 1;LCD_D5 = dat >> 1 & 1;LCD_D6 = dat >> 2 & 1;LCD_D7 = dat >> 3 & 1;delay(1);LCD_EN = 0;}// 向LCD发送字符串函数void lcd_string(unsigned char *str) {while (*str) {lcd_data(*str++);delay(5);}}// 清屏函数void lcd_clear() {lcd_command(0x01);}// 设置光标位置函数void lcd_gotoxy(unsigned char x, unsigned char y) {unsigned char addr;if (y == 0)addr = x | (0x80 + y);else if (y == 1)addr = x | (0xC0 + y);lcd_command(addr);}5. 总结本文介绍了使用51单片机设计一个简单的秒表程序。
51单片机-IO口实验报告
《信息技术综合实践》课程实验报告
1.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中
2.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中,进行文件的编译和调试。
3.进行实验箱的连线。
4.打开下载器,擦除并将生成的HEX文件调入Flash,然后选择“自动”。
5.通过示波器观察实验现象
5.1 示波器波形图
5.1.1(i的范围是小于500,波形图如下所示)
由图可知:当不修改i的范围时,波形的频率比较高,约在150Hz左右。
5.1.2(将代码中i的范围修改为小于20000,波形图如下所示)
由图可知:将i的范围变大以后,波形的频率变低并且稳定在5Hz左右。
5.2 小灯闪烁视频
(灯亮时的图片)。
51单片机实验指导书
.51系列单片机原理与应用实验华南师范大学物理与工程工程学院微机教研室20010年9月目录实验须知 (2)实验一数字量输入输出实验 (4)实验二交通灯控制实验 (6)实验三定时与中断实验 (8)实验四串行通信实验 (11)实验五串行A/D转换实验 (13)实验六现实人体视觉暂留特性测试实验 (14)实验七实时时钟制作实验 (17)实验八简易电子琴制作实验 (18)实验九 EEPROM应用—数字密码锁 (20)实验十综合实验:教学板自检程序设计 (25)实验十一数据采集—火灾报警装置的软硬件设计 (26)附录一实验教学板 (27)附录二实验用软件使用说明 (28)实验须知一、预习要求1.实验前认真阅读实验指导书的相关内容,明确实验目的和实验任务。
2.实验前应做好预习报告,在报告中,要求画出所设计的实验电路原理图、程序流程图,编写好程序,并对程序加以注释,还要拟订好实验步骤。
二、实验要求1.按实验中心安排的时间到指定实验室上实验课,不要迟到、缺席。
有特殊原因不能在原安排时间来实验时,须提前一天通知实验中心负责教师。
2.认真完成每次实验的各项任务,实验结果要请指导教师检查。
教师对实验内容提问,并对完成者进行记录。
3.爱护设备,保持清洁,不得在实验室内大声喧哗,不要将食物带入实验室,不擅自更换设备。
4.在实验箱(板)通电状态下,不要用手随意触摸电路板上除按键和开关以外的芯片等其它元器件。
,严禁带电操作,即所有接线、改线和拆线操作均应在不带电的状态下进行。
5.实验中若发生异常情况应立即切断电源,并向指导教师报告,检查原因,避免再次发生类似情况。
6.实验完毕,请整理好实验设备后再离开实验室。
三、实验报告要求实验报告必须使用实验报告专用纸,书写要工整、清楚,并在下一次实验时交给指导教师。
实验报告应包括以下内容:1.实验名称、实验人姓名、学号、班级、同组人姓名。
2.实验目的、任务(内容)。
3.各任务程序流程图、自编程序清单,对程序须给出适量注释(例如:变量和某些寄存器的作用,关键程序段的功能等)。
STC51单片机最小系统实验报告
3、2个独立按键,可配置为中断模式和一般按键
4、双复位电路,可插拔晶振,能同时使用51和avr系列单片机
5、usb及外接电源双供电,带电源指示。
6、带10针ISP下载接口,方便AT89系列单片机下载程序。
7、板载红外接收管,配合程序遥控电视、风扇。
三、原件
部分图片
5.打印电路板安装图,按图安装元器件。
6.焊接元器件
(1)将各元器件按照电路图插在刚做好的板子上;
(2)用电烙铁把元器件焊接牢固,并检查是否有漏焊和虚焊的部分
经过以上步骤一个单片机最小系统就基本上做好了,经过调试之后就可以投入使用了。
四、成果展示
五、实验体会
自从我接触单片机,到现在能够用以单片机为控制核心设计出我的课程设计——单片机最小系统设计。通过本次课程设计,我获得了丰富的理论知识,极大地提高了实践能力,单片机领域这对我今后进一步学习电学方面的知识有极大的帮助。在此,忠心感谢学校老师提供这个机会。
【3】:STC51单片机系统电路板的制作
3.1学习目标
1.掌握原理图和PCB图输出打印
2.了解单面印制电路板的制造工艺和流程3.学会手工制作单面印制电路板的方法
3.2任务要求
手工制作STC51单片机系统电路板,在电路板上安装元器件,并进行功能测试。
3.3技能训练
1.按1∶1的比例打印PCB图到热转印纸,并热转印到覆铜板2.腐蚀已转印有PCB图的覆铜板3.涂敷松香溶液4.钻焊盘孔
实验报告
实验名称:STC51单片机最小系统
所在专业:测控技术与仪器
学生姓名:陈****
班级学号:B1*******
任课教师:陆婷
2013 /2014 学年第 二 学期
51单片机实例(含详细代码说明)
1.闪烁灯1.实验任务如图4.1.1所示:在端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#20 2个 2D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248 (498DJNZ R6,D1 2个2×20=4010002因此,上面的延时程序时间为。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY: MOV R5,#20D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当端口输出高电平,即=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当端口输出低电平,即=0时,发光二极管L1亮;我们可以使用SETB 指令使端口输出高电平,使用CLR 指令使端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG 0START: CLRLCALL DELAYSETBLCALL DELAYLJMP STARTDELAY: MOV R5,#20 ;延时子程序,延时秒D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7. C语言源程序#include <>sbit L1=P1^0;void delay02s(void)4.2.14.2.14.2.24.3.14.3.14.3.20F0F4.4.14.4.14.4.24.5.1 4.5.20F0F0F0F7f7f7f7f4.6.14.6.2实验任务如图13所示,利用AT89S51单片机的P0端口的-连接到一个共阴数码管的a-h的笔段上,数码管的公共端接地。
单片机原理实验报告
实验一:系统认识实验一、设计目的:1. 学习 Keil C51 集成开发环境的操作;2. 熟悉 TD-51 系统板的结构及使用。
二、设计内容:编写程序,将 00H~0FH 共 16 个数写入单片机内部 RAM 的 30H~3FH 空间。
三、设计步骤:1. 创建 Keil C51 应用程序(1)运行 Keil C51 软件,进入 Keil C51 集成开发环境。
(2)选择工具栏的 Project 选项,弹出下拉菜单,选择 NewProject 命令,建立一个新的μVision2 工程。
这时会弹出文件保存对话框,选择工程目录并输入文件名 Asm1 后,单击保存。
(3)工程建立完毕后,μVision2 会马上弹出器件选择窗口。
器件选择的目的是告诉μVision2 使用的 80C51 芯片的型号是哪一个公司的哪一个型号,不同型号的 51 芯片内部资源是不同的。
此时选择 SST 公司的 SST89E554RC。
(4)到此建立好一个空白工程,现在需要人工为工程添加程序文件,如果还没有程序文件则必须建立它。
选择工具栏的 File 选项,在弹出的下拉菜单中选择 New 目录。
(5)输入程序,完毕后点击“保存”命令保存源程序,将 Text1 保存成Asm1.asm。
Keil C51 支持汇编和 C 语言,μVision2 会根据文件后缀判断文件的类型,进行自动处理,因此保存时需要输入文件名及扩展名.ASM 或.C。
保存后,文件中字体的颜色会发生一定变化,关键字会变为蓝色。
(6)程序文件建立后,并没有与 Asm1.Uv2 工程建立任何关系。
此时,需要将 Asm1.asm 源程序添加到 Asm1.Uv2 工程中,构成一个完整的工程项目。
在Project Window 窗口内,选中Source Group1 点击鼠标右键,选择 Add Files to Group‘Source Group1’命令,此时弹出添加源程序文件对话框,选择文件Asm1.asm,点击 Add 命令按钮即可将源程序文件添加到工程中。
51单片机常见汇编程序实验代码
51单片机常见汇编程序实验代码1. 将片外8000H-80FFH单元写入数据AB 32. 将片内RAM20H单元中数据在数码管上显示出来 (3)3. 将片内ARM30H-40H单元清零 54. 将六位数显示在数码管上 55. 8255并口芯片的应用:交通灯控制系统的设计 (6)6. 将交通灯点亮 (7)7. AD转换实验 (8)8. DA转换实验 (10)9. 定时器的应用 ·· 1110. 开关控制LED的亮灭及速度 1211. 计数器实验 (12)12. 串并转换实验 · 1413. 直流电机速度检测1514. 8255PB外接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)17 15. P3.4接开关K,编程将开关拨动次数,通过串并转换的方式进行显示1816. 比较片内RAM30H、31H两个单元值的大小,将较大的数显示在数码管上1917. 单片机P1口接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式) (21)18. 将片内50H单元的值显示在数码管上2219. 开关K1接P1.0,K2接P1.1,编程实现当按下K1时在数码管上显示50H单元的值,按下K2在数码管上显示51H单元的值231. 将片外8000H-80FFH单元写入数据ABORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H; 避免堆栈和工作寄存器区冲突MOV DPTR,#8000HMOV R0,#0LOOP: MOV A,#0ABHMOVX @DPTR,AINC DPTRINC R0CJNE R0,#0,LOOP ; 判断AJMP $; 等待END ;调试-视图-M存储器(输入X:8000H)2. 将片内RAM20H单元中数据在数码管上显示出来ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV DPTR,#0E100H ;指向命令口MOV A,#03H ;PA、PB口输出MOVX @DPTR,A ;所有并口显示程序先进行8155初始化MOV 20H,#34HMOV A,20HACALL CHAILOOP: MOV R0,#10H ;第一个显示数的送R0MOV R1,#2 ;显示2个数MOV R2,#1 ;从倒数第一个数码管开始显示ACALL DISPLAYLJMP LOOP ;判断CHAI: MOV B,#10HDIV ABMOV 10H,BMOV 11H,ARETDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND3. 将片内ARM30H-40H单元清零ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV R0,#30HMOV A,#0LOOP: MOV @R0,AINC R0CJNE R0,#41H,LOOP ;判断AJMP $ ;等待END ;D:30H4. 将六位数显示在数码管上ORG 0000H ;程序从0000H开始执行AJMP MAIN ;跳转到主程序ORG 0030H ;以免覆盖中断MAIN: MOV SP,#60H ;避免堆栈和工作寄存器区冲突MOV DPTR,#0E100H ;指向命令口MOV A,#03H ;PA、PB口输出MOVX @DPTR,A ;所有并口显示程序先进行8155初始化LOOP: MOV R0,#10H ;第一个显示数的送R0MOV 10H,#0HMOV 11H,#3HMOV 12H,#1HMOV 13H,#2HMOV 14H,#1HMOV 15H,#1HMOV R1,#6 ;显示6个数MOV R2,#1 ;从倒数第一个数码管开始显示ACALL DISPLAYLJMP LOOPDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND5. 8255并口芯片的应用:交通灯控制系统的设计ORG 0000HAJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A,#80HMOVX @DPTR,A //8155初始化(所有并口显示中都要先8155初始化)MOV R5,#0F0HACALL DENGMOV R1,#20ACALL DELAYMOV R0,#1LOOP01: MOV R5,#5AHACALL DENGMOV R1,#100ACALL DELAYDJNZ R0,LOOP01MOV R0,#3 // LED_2闪烁次数LOOP02: MOV R5, #0FAHACALL DENGMOV R1,#10ACALL DELAYMOV R5,#50HACALL DENGMOV R1,#10ACALL DELAYDJNZ R0,LOOP02MOV R5,#0A5HACALL DENGMOV R1,#100ACALL DELAYMOV R0,#3LOOP03: MOV R5, #0F5HACALL DENGMOV R1,#10ACALL DELAYMOV R5,#0A0HACALL DENGMOV R1,#10ACALL DELAYDJNZ R0,LOOP03AJMP LOOP01DENG: MOV DPTR,#0AC00H //8155 PA口输出MOV A,R5MOVX @DPTR,A //8155 PA口送出显示参数RET //100ms延时子程序DELAY: MOV R7,#200DEL: MOV R6,#229DJNZ R6,$DJNZ R7,DELDJNZ R1,DELAYRETEND6. 将交通灯点亮ORG 0000HAJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A,#80HMOV DPTR,#0AC00HMOV A,#05AHMOVX @DPTR,AAJMP $END7. AD转换实验ORG 0000AJMP STARTORG 000BHAJMP INT_0ORG 0030H START: MOV SP,#60HMOV TMOD,#01HMOV TH0,#4BHMOV TL0,#0FDHMOV R4,#2SETB EASETB ET0SETB TR0MOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 22H,#9MOV 23H,#0MOV 24H,#8MOV 25H,#0 LOOP: MOV R0,#20HMOV R1,#6MOV R2,#1ACALL DISPLAYSJMP LOOPINT_0: MOV TH0,#4BHMOV TL0,#0FDHDJNZ R4,EXITPUSH ACCPUSH DPHPUSH DPLMOV DPTR,#0A000HMOVX A,@DPTRMOV B,#10HDIV ABMOV 21H,AMOVX @DPTR,AMOV R4,#2POP DPLPOP DPHPOP ACCEXIT: RETIDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND8. DA转换实验ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV A,#0LOOP1: MOV DPTR,#0B000HMOVX @DPTR,AACALL XSACALL DELAYINC ACJNE A,#0FFH,LOOP1LOOP2: MOV DPTR,#0B000HMOVX @DPTR,AACALL XSACALL DELAYDEC ACJNE A,#0,LOOP2SJMP LOOP1XS: PUSH ACCMOV DPTR,#TABMOV B,#51DIV ABMOV R1,AXCH A,BMOV B,#5DIV ABMOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,#0CLR CMOV R4,#16ACALL S164POP ACCRETS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETDELAY: MOV R7,#200DEl: MOV R6,#229DJNZ R6,$DJNZ R7,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND9. 定时器的应用ORG 0000HAJMP STARTORG 00BHAJMP INT_0ORG 0030HSTART: MOV TMOD,#01HMOV TH0,#4BHMOV TL0,#0FDHMOV R0,#20MOV R1,#0SETB ET0SETB TR0SETB EAAJMP $INT_0: MOV TH0,#4BHMOV TL0,#0FDHDJNZ R0,EXITMOV R0,#20MOV A,R1MOV DPTR,#TABMOVC A,@A+DPTRMOV P1,AINC R1CJNE R1,#8,EXITMOV R1,#0EXIT: RETITAB: DB 0FFH,0FAH,0F5H,0AFH,05FH,0AAH,55H,0H,0FFH END10. 开关控制LED的亮灭及速度ORG 0000H ;程序从0000H开始执行AJMP START ;跳转到主程序ORG 0030H ;以免覆盖中断START: MOV R4,#1 ;立即数传送到累加器LOOP: CLR P3.3 ;进位标志位清零LOOP1: JNB P3.5,LOOP ;直接寻址位为0则转移JB P3.4,LOOP2 ;直接寻址位为1则转移JNB P3.4,$INC R4 ;寄存器增1LOOP2: CPL P3.3 ;累加器求反MOV A,R4 ;寄存器内容传送到累加器AMOV R5,A ;累加器内容传送到累加器ACALL DELAY ;调用延时函数AJMP LOOP1 ;循环DELAY: MOV R6,#200DEL: MOV R7,#229DJNZ R7,$DJNZ R6,DEL ;寄存器减1,不为0则转移DJNZ R5,DELAYRET ;子程序返回END11. 计数器实验ORG 0000SJMP STARTORG 001BHLJMP INT_1START: MOV SP,#60HMOV R5,#20MOV TMOD,#15HMOV TH1,#4BHMOV TL1,#0FDHMOV TH0,#0MOV TL0,#0SETB ET1SETB EASETB TR1SETB TR0MOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV R0,#50H;MOV R1,#4LCALL DISPLAYSJMP LOOPINT_1: MOV TH1,#4BHMOV TL1,#0FDHDJNZ R5,CONMOV R5,#20PUSH ACCPUSH BMOV A,TL0MOV B,#10HDIV ABMOV 50H,BMOV 51H,AMOV A,TH0MOV B,#10HDIV ABMOV 52H,BMOV 53H,AMOV TH0,#0MOV TL0,#0POP BPOP ACCCON: RETIDISPLAY: MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTR P164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,ADJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND12. 串并转换实验ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV R1,#0MOV DPTR,#TABLOOP: MOV A,#0CLR CMOV R4,#24ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164INC R1MOV R5,#10ACALL DELAYCJNE R1,#10,EXITMOV R1,#0EXIT: SJMP LOOPS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETDELAY: MOV R6,#200DEL: MOV R7,#230DJNZ R7,$DJNZ R6,DELDJNZ R5,DELAYRETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H, 0FEH,0F6H END13. 直流电机速度检测ORG 0000HAJMP MAINORG 001BHAJMP INT_1ORG 0030HMAIN: MOV SP,#60HMOV TMOD,#15HMOV TH1,#4BHMOV TL1,#0FDHMOV R0,#20MOV TH0,#0MOV TL0,#0SETB ET1SETB EASETB TR0SETB TR1MOV R2,#00HUP: MOV A,R2MOV DPTR,#0A000H //注意片选接YC2,非YC3MOVX @DPTR,AMOV R5,#1ACALL DELAY ;100msINC R2CJNE R2,#0FFH,UPDOWN:MOV A,R2MOV DPTR,#0A000HMOVX @DPTR,AMOV R5,#1ACALL DELAY ;100msDEC R2CJNE R2,#00H,DOWNAJMP UPINT_1: MOV TH1,#4BHMOV TL1,#0FDHDJNZ R0,EXITMOV R0,#20PUSH ACCPUSH DPHPUSH DPLMOV A,TL0ACALL XSMOV TL0,#0MOV A,TH0ACALL XSMOV TH0,#0POP DPLPOP DPHPOP ACCEXIT: RETIXS: MOV DPTR,#TAB;MOV A,R2MOV B,#10 ;显示10进制数DIV ABXCH A,B;MOV DPTR,#TABMOVC A,@A+DPTRACALL FSXCH A,B;MOV DPTR,#TABMOVC A,@A+DPTRACALL FSRETFS: MOV R1,#8YW:RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R1,YWRETDELAY:MOV R6,#200DEL:MOV R7,#230DJNZ R7,$DJNZ R6,DELDJNZ R5,DELAYRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND14. 8255PB外接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)ORG 0000AJMP STARTORG 0030HSTART: MOV DPTR,#0AC03HMOV A, #82HMOVX @DPTR, AMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV DPTR,#0AC01HMOVX A,@DPTRMOV B,#10HDIV ABMOV 10H,BMOV 11H,AMOV R0,#10HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,ADJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND15. P3.4接开关K,编程将开关拨动次数,通过串并转换的方式进行显示ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV R5,#0LOOP: JB P3.4,$ACALL DELAYJB P3.4,LOOPINC R5ACALL XSLOOP1: JNB P3.4,$ACALL DELAYJNB P3.4,LOOP1INC R5ACALL XSSJMP LOOPDELAY: MOV R7,#200DEL: MOV R6,#229DJNZ R6,$DJNZ R7,DELRETXS: MOV DPTR,#TABMOV A,R5MOV B,#10HMOV R1,AMOV A,BMOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,R1MOVC A,@A+DPTRMOV R4,#8ACALL S164MOV A,#0CLR CMOV R4,#16ACALL S164RETS164: RRC AMOV P1.0,CCLR P1.1SETB P1.1DJNZ R4,S164RETTAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND16. 比较片内RAM30H、31H两个单元值的大小,将较大的数显示在数码管上ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 30H,#06H ;随便赋两个值,显示较大的MOV 31H,#11HMOV A,30HSUBB A,31HJC SMALLMOV B,#10HMOV A,30HDIV ABMOV 30H,BMOV 31H,ABIG: MOV R0,#30HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP BIG SMALL: MOV B,#10HMOV A,31HDIV ABMOV 30H,BMOV 31H,ASMALL1:MOV R0,#30HMOV R1,#2MOV R2,#1ACALL DISPLAYSJMP SMALL1 DISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTR P164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND17. 单片机P1口接8个开关,编程将开关状态显示在数码管上(串并转换动态扫描方式)ORG 0000HSJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV A,P1MOV B,#10HDIV ABMOV 20H,BMOV 21H,AMOV R0,#20HMOV R1,#2MOV R2,#1ACALL DISPLAYAJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND18. 将片内50H单元的值显示在数码管上ORG 0000HSJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,ALOOP: MOV A,P1MOV B,#10HDIV ABMOV 20H,BMOV 21H,AMOV R0,#20HMOV R1,#2MOV R2,#1ACALL DISPLAYAJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164: MOV DPTR,#TABMOVC A,@A+DPTRP164_1: RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT: MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY: MOV R6,#4DEL: MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0HDB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND19. 开关K1接P1.0,K2接P1.1,编程实现当按下K1时在数码管上显示50H单元的值,按下K2在数码管上显示51H单元的值ORG 0000SJMP STARTORG 0030HSTART: MOV SP,#60HMOV DPTR,#0E100HMOV A,#3MOVX @DPTR,AMOV 50H,#18H ;50H,51H 随便赋两个值MOV 51H,#22HLOOP:JB P1.0,D50JB P1.1,D51SJMP LOOPD51: MOV R0,#10HMOV R1,#2MOV R2,#1MOV A,51HMOV B,#10HDIV ABMOV 10H,BMOV 11H,AACALL DISPLAYSJMP LOOPD50: MOV R0,#10HMOV R1,#2MOV R2,#1MOV A,50HMOV B,#10HDIV ABMOV 10H,BMOV 11H,AACALL DISPLAYSJMP LOOPDISPLAY:MOV A,@R0MOV 0FH,#8ACALL P164ACALL PBITACALL DELAYMOV A,#0MOVX @DPTR,AINC R0DJNZ R1,DISPLAYRETP164:MOV DPTR,#TABMOVC A,@A+DPTRP164_1:RRC AMOV R3,AMOV ACC.0,CANL A,#0FDHMOV DPTR,#0E102HMOVX @DPTR,AORL A,#0FEHMOVX @DPTR,AMOV A,R3DJNZ 0FH,P164_1MOV 0FH,#8RETPBIT:MOV DPTR,#0E101HMOV A,R2MOVX @DPTR,ARL AMOV R2,ARETDELAY:MOV R6,#4DEL:MOV R7,#250DJNZ R7,$DJNZ R6,DELRETTAB:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EHEND。
基于51单片机实验报告(计算器)
基于51单片机实验报告(计算器)一.计算器模块1.功能介绍利用8051 单片机硬件资源和常用外围电路如LCD1602,七段数码管,时钟(DS1302)温度传感器(18B20)等实现一个能做简单四则运算,并具有时钟显示,温度显示附加功能的计算器。
2.设计方案利用STC89C52为内核的单片机,PC机。
四则运算利用4*4矩阵键盘实现从0—9和运算符号的输入,并将操作过程和结果显示在LCD1602上。
时钟显示和温度显示,可以利用DS1302产生年份,月份,日期,星期,时,分,秒的数据,并将数据送往LCD1602显示,同样可以利用单片机开发板上面集成的DS18B20温度传感器来测试周围环境的温度,将获取的温度通过在LCD1602来显示。
系统设计框图3.具体实现代码计算器四则运算部分主要分为键盘扫描的键值读取,判断运算符号实现乘除优先级计算,LCD1602显示。
键盘扫描常用的有行扫描法,线反转法,此处我们用行扫描法,可以更明了读取键值。
unsigned char temp;key = null;//第一行按键P3 = 0xfe;temp = P3;temp = temp & 0xf0;if (temp != 0xf0){delay(10); //延时软件去抖动temp = P3;temp = temp & 0xf0;if (temp != 0xf0) //确认有键按下{temp = P3;switch (temp){case 0xee:key = 'D'; //读键值break;case 0xde:key = 0;break;case 0xbe:key = '=';break;case 0x7e:key = '/';break;}flag++;}}读完按键值之后我们需要读取运算的数字与运算符号,通过判断键值为数字则通过nun=nun*10+key,计算出数字,判断键值为运算符号则读出数字和键值。
51单片机的40个实验(实例介绍)
1.闪烁灯1.实验任务如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。
2.电路原理图图4.1.13.系统板上硬件连线把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。
4.程序设计内容(1).延时程序的设计方法作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程序是如何设计呢?下面具体介绍其原理:如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒机器周期微秒MOV R6,#202个机器周期2D1:MOV R7,#2482个机器周期22+2×248=49820×DJNZ R7,$2个机器周期2×248498DJNZ R6,D12个机器周期2×20=4010002因此,上面的延时程序时间为10.002ms。
由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时,延时10ms,以此为基本的计时单位。
如本实验要求0.2秒=200ms,10ms×R5=200ms,则R5=20,延时子程序如下:DELAY:MOV R5,#20D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RET(2).输出控制如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。
5.程序框图如图4.1.2所示图4.1.26.汇编源程序ORG0START:CLR P1.0LCALL DELAYSETB P1.0LCALL DELAYLJMP STARTDELAY:MOV R5,#20;延时子程序,延时0.2秒D1:MOV R6,#20D2:MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND7.C语言源程序#include<AT89X51.H>sbit L1=P1^0;void delay02s(void)//延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}void main(void){while(1){L1=0;delay02s();L1=1;delay02s();}}2.模拟开关灯1.实验任务如图4.2.1所示,监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄灭。
51单片机C语言实验及实践教程1
51单片机C语言实验及实践教程第一章:硬件资源模块第二章:keil c 软件使用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅1.闪烁灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅2.模拟开关灯at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅3.多路开关状态指示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅4.广告灯的左移右移at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅5.广告灯(利用取表方式)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅6.报警产生器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅7.I/O并行口直接驱动LED显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅8.按键识别方法之一at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅9.一键多功能按键识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅10.00-99计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅11.00-59秒计时器(利用软件延时)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅12.可预置可逆4位计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅13.动态数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅14.4×4矩阵式键盘识别技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅15.定时计数器T0作定时应用技术(一)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅16.定时计数器T0作定时应用技术(二)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅17.99秒马表设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅18.“嘀、嘀、……”报警声at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅19.“叮咚”门铃at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅20.数字钟(★)at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅21.拉幕式数码显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅22.电子琴at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅23.模拟计算器数字输入及显示at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅24.8×8LED点阵显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅25.点阵LED“0-9”数字显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅26.点阵式LED简单图形显示技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅27.ADC0809 A/D转换器基本应用技术at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅28.数字电压表at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅29.两点间温度控制at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅30.四位数数字温度计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅31.6位数显频率计数器at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅32.电子密码锁设计at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅33.4×4键盘及8位数码管显示构成的电子密码锁at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅34.带有存储器功能的数字温度计-DS1624技术应用at89s51单片机实验及实践课题┅┅┅┅┅┅┅┅┅┅┅35DS18B20数字温度计使用第一章AT89S51单片机实验及实践系统板简介AT89S51单片机实验及实践系统板(以后简介系统板)集成多个硬件资源模块,每个模块各自可以成为独立的单元,也可以相互组合,因此,可以为不同阶层的单片机爱好者及单片机开发者提供不同的开发环境。
MCS51单片机原理及应用 实验报告
单片机原理与应用实验报告学校:合肥工业大学姓名:吕增威学号:班级:计算机科学与技术08-03班目录前言 ------------------------3 第一章 MC51 单片机原理及应用软件实验实验1:系统认识实验--------------------6实验6:数据排序实验(验证性)---------- 11第二章 MC51 单片机原理及应用硬件实验实验1:广告灯实验----------------------15实验2:P1 口实验(验证性)-------------21实验16:串口转并口实验 ----------------32 实验心得与体会---------------37前言一.单片机原理实验的任务单片机原理实验是单片机原理及应用课程的一部分,它的任务是:1.通过实验进一步了解和掌握单片机原理的基本概念、单片机应用系统的硬件设计及调试方法。
2.学习和掌握单片机应用系统程序设计技术。
3.提高应用计算机的能力及水平,提高逻辑动手能力。
二.实验设备单片机实验所使用的设备由计算机、单片机实验开发系统(,其中计算机是软件开发平台,主要完成程序编辑、编译、下载程序等任务;单片机实验开发系统是硬件开发平台,是基于51/196 单片机的扩展实验系统。
计算机和单片机实验开发系统之间是通过RS232 串行接口进行通信的。
单片机实验开发系统配有开关电源、单片机、晶振、存储器、可编程并行接口芯片、键盘显示控制芯片、24 键键盘、六位LED 数码管显示、A/D 及D/A 转换芯片、简单输出口2个、简单输入口1 个、逻辑电平输入开关、发光二极管显示电路,并配有小直流电机、步进电机、继电器、音响等驱动电路。
在计算机软件的控制下可完成单片机基本实验及综合3设计性实验项目。
所有的MCS51 单片机原理及应用课程实验都是在这套实验系统上完成的。
Keil与Proteus的联合使用: Keil C51 6.02的使用:1.打开Keil,新建一个程序文件(File--New),在上面输入要调试的程序,保存为*.asm格式;2.新建一个工程(project--Newproject),保存,在CPU选项了选择Atmel--AT89C51,点击确定,在弹出的选项框中选择“否”。
51单片机(四位数码管的显示)程序
51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。
最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。
51单片机实验程序
用查表方式编写y=x13+x23+x33。
(x为0~9的整数)#include<reg51。
h>void main(){int code a[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适.int的范围是0~65535或-32768~32767。
int y,x1,x2,x3;//此处定义根据习惯,也可写成char x1,x2,x3但是变量y一定要用int 来定义。
x1=2;x2=4;x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复.y=a[x1]+a[x2]+a[x3];while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。
}//结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 to add”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。
1、有10个8位二进制数据,要求对这些数据进行奇偶校验,凡是满足偶校验的数据(1的个数为偶数)都要存到内RAM50H开始的数据区中。
试编写有关程序。
#include〈reg51。
h>void main(){int a[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围.char i; //定义一个变量char *q=0x50;//定义一个指针*q指向内部0x50这个地址。
for(i=9;i〉=0;i--)//9~0循环,共十次,也可以用for(i=0;i〈10;i++){ACC=a[i];//将a[i]的值赋给累加器ACCif (P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.
RAM50H开始的单元中 。
#include<reg51.h> void main()
{
chardataa[10]={-50,-36,0,-128,1,99,127,89,-89,40};//将所有值存入RAM中,因为有负数,所以不能用unsignedchar。因为是char所以假设的数值不要超过-128~+127之外
333
用查表方式编写
#include<reg51.h> void main()
{
intcodea[10]={0,1,8,27,64,125,216,343,512,729};//将0~9对应的每位数字的三次方的值存入code中,code为程序存储器,当所存的值在0~255或-128~+127之间的话就用char,而现在的值明显超过这个范围,用int较合适。int的范围是0~65535或-32768~32767。
{
if(a[j]>a[j+1])
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
for(i=0;i<10;i++)//将已经排好序的数组存入*q指向的地址。
{
*q=a[i];q++;
}
while(1);
}
1、基本部分:
(1)P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。
delay(1);
if(P1==0x00)//判断左移是否完毕,完毕break跳出此次的while
}
//结果的查询在Keilvision软件内部,在仿真界面点击右下角(一般初始位置是右下角)的watch的框架内双击“double-click or F2 toadd”文字输入y后按回车,右侧会显示其16进制数值如0x34,鼠标右键该十六进制,选择第一行的decimal,可查看对应的10进制数。
1
#include<reg51.h> void main()
#include<reg51.h>
void delay(unsignedcharx)//定义延迟函数,用于后面LED灯亮的持续时间。
{
unsigned char i,j,k; do
{
for(i=10;i>0;i--)
for(j=100;j>0;j--)
for(k=249;k>0;k--);
}
while(--x);} main()
{
P1=0xfe;//11111110第一个灯亮
while(1)
{
delay(1);//延时500ms
P1=P1<<1|1;//P1左移一个位即11111101具体crol跟<<的区别与具体细节可联系
我与你讲解
if(P1==0XFF)
{ P1=0XFE;
}
}
}
(2)P1.0、P1.1作输入口接两个拨动开关,P1.2、P1.3作输出口,接两个发光二极管, 编写程序读取开关状态,将此状态,在发光二极管上显示出来。编程时应注意P1.0、P1.1作为输入口时应先置1,才能正确读入值。
inty,x1,x2,x3;//此处定义根据习惯,也可写成charx1,x2,x3但是变量y一定要用int来定义。
x1=2; x2=4;
x3=9;//x1,x2,x3三个的值是自定的,只要是0~9当中的数值皆可,也可重复。
y=a[x1]+a[x2]+a[x3];
while(1);//单片机的程序不能停,这步就相当于无限循环的指令,循环的内容为空白。
unsignedchar*q=0x50;//定义指针*q指向0x50
unsigned char i,j;
char t;//定义三个变量,用于循环及换位。在换位时有赋值,所以t要用char不能用unsignedchar。
for(i=0;i<10;i++)
for(j=0;j<10-i;j++)//冒泡法,具体可以参考C语言程序设计的书。
a)LED灯从左到右依次点亮;
b)LED灯从右到左依次点亮;
c)按照以上步骤重复运行,其中要求灯亮的时间为500ms。
#include <reg51.h>
void delay(unsigned char x)
{
unsigned char i,j,k; do
{
for(i=10;i>0;i--)
for(j=100;j>0;j--)
{
ACC=a[i];//将a[i]的值赋给累加器ACC
if(P==0)//PSW0位上的奇偶校验位,如果累加器ACC内数值1的个数为偶数那么P为0,若为奇数,P为1。这里的P是大写的。
{
*q=a[i];
q++;//每赋一个值,指针挪一个位置指向下一个。
}
}
while(1);//同实验一,程序不能停。
for(k=249;k>0;k--);
}while(--x);
}
main()
{
while(1)//无限循环里面的内容
{
P1=0XFE;//右移完毕后赋初值,为左移做准备
delay(1); while(1)
{
就可以了。
}
P1=P1<<1;//如果左移右移是单个灯移动的话, 那么这句改为LED=LED<<1|1;
while(1)
{
if(!p1_0)//判断P1.0的引脚是否有变化。
{
p1_2=!p1_2;//如果P1.0引脚变化,P1.2引脚也跟随变化。
}
if(!p1_1)//判断P1.1的引脚是否有变化。
{
p1_3=!p1_3;//如果P1.1引脚变化,P1.3引脚、扩展部分:
(1)利用P1口控制发光二极管LED灯按照下面方式工作:
#include<reg51.h> sbit p1_0=P1^0; sbit p1_1=P1^1; sbit p1_2=P1^2;
sbitp1_3=P1^3;//程序不能对单个引脚进行编程,需要用sbit定义才可用。
main()
{
p1_0=1;p1_1=1;p1_2=1;p1_3=1;//前两个引脚置一是为了让其能获取输入信号, 后两个引脚是赋初值,方便后面取反工作。
{
inta[10]={0,1,5,20,24,54,64,88,101,105};//将所要处理的值存入RAM中,这些可以根据个人随意设定,但建议不要超过0~255的范围。
chari;//定义一个变量
char*q=0x50;//定义一个指针*q指向内部0x50这个地址。
for(i=9;i>=0;i--)//9~0循环,共十次,也可以用for(i=0;i<10;i++)