单片机课程设计例题10-定时器T1控制共阳七段显示器(查询方.

合集下载

单片机实验考核题目及答案

单片机实验考核题目及答案
单片机实验操作考核题目与要求2
KeiL系统基本操作
系统基本操作;工程建立;参数设置;程序编辑与调试
1、延时函数设计
2、定时器T0的应用:方式1产生500ms的方波来驱动LED闪烁
----------------------------------------------------------------------------------------------------------------------
单片机实验操作考核题目与要求1
KeiL系统基本操作
系统基本操作;工程建立;参数设置;程序编辑与调试
1、延时函数设计
2、定时器T0的应用:方式0产生500ms的方波来驱动LED闪烁
----------------------------------------------------------------------------------------------------------------------
#include<reg52.h> //52单片机头文件
#include <intrins.h> //包含有左右循环移位子函数的库
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit P1_0=P1^0;
uchar tt,a;
单片机实验操作考核题目与要求16
KeiL系统基本操作
系统基本操作;工程建立;参数设置;程序编辑与调试
流水灯控制实验
1、定时器T0来控制时间快慢(500ms)
2、数组实现
----------------------------------------------------------------------------------------------------------------------

单片机汇编语言编程实例之一串行控制七段数码管

单片机汇编语言编程实例之一串行控制七段数码管
ART: MOV MOV MOV MOV MOV DP10: MOV MOV MOVC MOV INC INC DJNZ MOV MOV DP11: MOV MOV DP12: RLC MOV CLR SETB DJNZ INC DJNZ JMP TABLE: DB DB END A P2.0,C P2.1 P2.1 R2,DP12 R0 R1,DP11 $ ;七段数码管显示数据表(段码) 40H,79H,24H,30H,19H ;0,1,2,3,4 12H,02H,78H,00H,10H ;5,6,7,8,9 ; 段码数据向左移动一位 ; 串行输出一位段码数据 ; 发送位移脉冲 ; 形成上升沿 ; 判断是否输出8位段码 ; R0自增1 ; 判断是否输出两个显示数据 R2,#8 A,@R0 ; R2=8,每位显示数据共有8个段码,R2作计数器 ; 把R0指向的段码数据载入A DPTR,#TABLE A,@R0 A,@A+DPTR @R1,A R1 R0 R2,DP10 R0,#40H R1,#2 ; 装表 ; 将R0所指的数据载入A ; 取表 ; 把数据暂时保存在R1所指的地址中 ; R1自增1 ; R0自增1 ; 如果R2不等于0,说明没有取完两个段码,跳回DP10循环 ; R0=40H,指向刚才保存段码的空间 ; R1=2,段码共有2个字节数 30H,#1 31H,#5 R0,#30H R1,#40H R2,#2 ; 低位七段数码管DS0显示数据 ; 高位七段数码管DS1显示数据 ; R0=30H ; R1=40H ; R2=2 00H

单片机定时器毕业设计(论文)

单片机定时器毕业设计(论文)

毕业设计毕业设计题目:学生学号:学生姓名:所在系(部):专业及班级:指导教师:完成日期:《电气自动化》专业毕业设计任务书课题名称:定时系统课题类型:模拟课题设计的目的:(1)定时设定由按键部分控制(2)实现定时时间的显示数码管显示:分(十位)分(个位)∶秒(十位)秒(个位)(3)到点响铃(4)系统运行中可重新设定定时值(5)最大实现99分59秒的定时设计的任务及主要内容::第一章概述1 任务设计(1)定时设定由按键部分控制(2)实现定时时间的显示数码管显示:分(十位)分(个位)∶秒(十位)秒(个位)(3)到点响铃(4)系统运行中可重新设定定时值(5)最大实现99分59秒的定时2 总体方案(1)设计框图系统框图如图1(2)设计思路利用89C51单片机作为本系统的中控模块。

上电后,按下功能键进入调时状态,通过各单元电路将按键部分设定的时间通过定时时间显示部分中的LED数码管显示出来,当时间设定完毕后再次按下按键部分的功能键,闹铃模块的蜂鸣器鸣叫0.5S以示定时器开始工作,到点实现响铃,再由按键部分关闹铃。

中途可重新设置定时数值。

复位部分除上电初实现复位外,其余任何时候可按键实现复位。

注:按键部分一共有4个按键,分别为功能键P3.0,秒设定键P3.1(增),分设定键P3.2(增)分设定键P3.3(减)。

3、方案论证(1)定时部分定时部分是本设计的核心部分。

方案:本方案完全用软件实现定时。

原理为:在单片机内部存储器设两个字节分别存放时钟的分、秒信息。

利用键盘部分对定时时间进行设定,由定时显示部分数码管显示,同时定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒个位减1;若秒个位减到0,则判秒十位值是否为0,若不是,则秒个位赋9,秒十位减1;分同理。

该方案具有硬件电路简单的特点。

(2)闹铃器件的选择方案:采用蜂鸣器闹铃,当到设定时间时,单片机向蜂鸣器送出高电平,蜂鸣器发生。

采用蜂鸣器闹铃结构简单,控制方便。

数字电子课程设计七段LED显示译码器

数字电子课程设计七段LED显示译码器

数字电路设计论文七段LED显示译码器目录1.分段式2.BCD-七段显示译码器3.七段显示译码器4.动态灭零输入RBI5.动态灭零输出RBO分段式数码由分布在同一平面上若干段发光的笔画组成,如半导体显示器。

半导体数码管——BS201A半导体数码管是分段式半导体显示器件,其基本结构是PN结,即用发光二极管(LED)组成字型来来显示数字。

这种数码管的每个线段都是一个发光二极管,因此也称LED数码管或LED七段显示器。

七段显示器由发光二极管(light emitting diode ; LED)组合而成,分为共阴及共阳两型,将内部所有LED的阴极接在一起的称为共阴型,内部所有LED的阳极接在一起的称为共阳型,见下图:因为计算机输出的是BCD码,要想在数码管上显示十进制数,就必须先把BCD码转换成 7 段字型数码管所要求的代码。

我们把能够将计算机输出的BCD码换成 7 段字型代码,并使数码管显示出十进制数的电路称为“七段字型译码器”。

1)输入:8421BCD码,用A3 A2 A1 A0表示(4位)。

2)输出:七段显示,用Ya ~ Yg 表示(7位)3)逻辑符号:七段显示译码器在数字测量仪表和各种数字系统中,都需要将数字量直观地显示出来,一方面供人们直接读取测量和运算的结果;另一方面用于监视数字系统的工作情况。

因此,数字显示电路是许多数字设备不可缺少的部分。

数字显示电路通常由译码器、驱动器和显示器等部分组成,如图数码显示器是用来显示数字、文字或符号的器件,现在已有多种不同类型的产品,广泛应用于各种数字设备中,目前数码显示器件正朝着小型、低功耗、平面化方向发展。

数码的显示方式一般有三种:第一种是字形重叠式,它是将不同字符的电极重叠起来,要显示某字符,只须使相应的电极发亮即可,如辉光放电管、边光显示管等。

第二种是分段式,数码是由分布在同一平面上若干段发光的笔划组成,如荧光数码管等。

第三种是点阵式,它由一些按一定规律排列的可发光的点阵所组成,利用光点的不同组合便可显示不同的数码,如场致发光记分牌。

七段数码管显示控制程序设计

七段数码管显示控制程序设计
数码管G段
P、B、E、F、2、3、4、5、6、8、9
网络68为停止程序。
网络69为复位程序。将M.0至M7.7全部复位。
寄存器如表4所示:
表4 对应寄存器表
P
M2.3、M6.1
L
M2.5、M6.3
C
M2.7、M6.5
B
M3.1、M6.7
E
M3.3、M7.1
F
M3.5、M7.3
1
M0.1、M5.7
2
M0.3、M5.5
(2),具体所建数据如图4所示:
图4 数据字典
(3)通信关联
关联方式如图5所示:
图5 通信关联
4.联合调试
当PLC运行的时候,打开组态王监控界面。通过虚拟界面实现对PLC的控制,图5和图6、7分别表示当PLC 启动、停止和复位,PLC与虚拟界面状态显示图。
图5 启动画面
2.硬件电路的设计
2.1I/O地址分配
根据课设要求,由于只是利用PLC控制数码管显示,所以在输入模块设计中只需要设计三个输入量,及启动、停止、复位,分别用I0.0、I0.1、I0.2表示,具体的输入模块分配表1所示。
表1 输入模块分配表
输入点
作用
I0.0
启动
I0.1
停止
I0.2
复位
根据课设要求,是在数码管上显示“1、2、3、4、5、6、7、8、9、P、L、C、B、E、F、9、8、7、6、5、4、3、2、1、P、L、C、B、E、F”,由于数码管是由七段LED灯控制,所以输出模块采用七个输出控制,具体分配如表2所示。
根据本次实验要求,程序流程图如图2所示:


图2 程序流程图
3.2PLC程序设计

单片机课程设计例题3-七段LED数码管的控制汇编

单片机课程设计例题3-七段LED数码管的控制汇编
单片机课程设计
例题3­七段LED数码管的控制
4.2.3例题3-七段LED数码管的控制
n P1口输出数码管七段码,数码管循环依次显示0~9 十个数字。
n 1.教学目的: n (1)了解数码管的电路结构,编写段码表。 n (2)使用数组存储数码管字段码表。 n (3)使用延时程序控制数码管的显示停留时间。
q unsigned char i; q while (1) q for (i=0; i<=9; i++) q{
n P1=seven_seg[i]; n delay ( ); q} n} n void delay (void) n{ q unsigned int i,j; q for (i=0; i<500; i++) n for (j=0; j<120; j++); n}
2.电路图
+5V
gf ab a
f
g
b
e
c
d
R1
DS1 e d c dp
R2
R3
R4
R5
R6
R7
+5V
330 x 8
R8 10K
C2 30p
C1 4.7u
Y1 12MHz
C3 30p
39 P0.0
P2.0 21
38 P0.1
P2.1 22
37 P0.2
P2.2 23
36 P0.3
P2.3 24
35 P0.4
6 P1.5
P3.5/T1 15
7 P1.6
P3.6/WR 16
8 P1.7
P3.7/RD 17
9 RST 18 XTAL1
ALE/PROG 30 PSEN 29 +5V

七段数码管动态显示控制

实验二七段数码管动态显示控制一、实验目的利用AT89S52和使用两位数码管显示器,循环显示两位数00-99。

其中P2.0和P2.1端口分别控制数码管的个位和十位的供电,当相应的端口变成低电平时,驱动相应的三极管会导通,+5V通过驱动三极管给数码管相应的位供电,这时只要P3口送出数字的显示代码,数码管就能正常显示数字。

二、实验要求1、使用两位数码管显示器,循环显示两位数00-99;2、具有电源开关和指示灯,有复位键;3、数码管动态显示,即扫描方式,每一位每间隔一段时间扫描一次。

字符的亮度及清晰度与每位点亮的停留时间和每位显示的时间内轮换导通次数有关。

三、实验电路四、实验器材AT89S52;动态扫描显示;共阳极数码管;电阻五、实验原理说明图1 AT89S52引脚图图2 共阳极七段数码管引脚图1AT89S52引脚图,说明如下:按照功能,AT89S52的引脚可分为主电源、外接晶体振荡或振荡器、多功能I/O 口、控制和复位等。

1.多功能I/O口AT89S52共有四个8位的并行I/O口:P0、P1、P2、P3端口,对应的引脚分别是P0.0 ~ P0.7,P1.0 ~ P1.7,P2.0 ~ P2.7,P3.0 ~ P3.7,共32根I/O线。

每根线可以单独用作输入或输出。

①P0端口,该口是一个8位漏极开路的双向I/O口。

在作为输出口时,每根引脚可以带动8个TTL输入负载。

当把“1”写入P0时,则它的引脚可用作高阻抗输入。

当对外部程序或数据存储器进行存取时,P0可用作多路复用的低字节地址/数据总线,在该模式,P0口拥有内部上拉电阻。

在对Flash存储器进行编程时,P0用于接收代码字节;在校验时,则输出代码字节;此时需要外加上拉电阻。

②P1端口,该口是带有内部上拉电阻的8位双向I/O端口,P1口的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。

对端口写“1”时,通过内部的上拉电阻把端口拉到高电位,此时可用作输入口。

(整理)七段显示译码器电路设计.

题目:七段显示译码器电路设计专业:生产过程自动化专业班级:生产过程0901 姓名:学号:指导老师:杨旭目录第一节绪论……………………………………………………………………………..1.1本设计的任务和主要内容………………………………………………………………..1.2基本工作原理及原理框图………………………………………………………………...第二节硬件电路的设计…………………………………………………………………2.1BCD译码器选择与设计…………………………………………………………………….2.2LED显示器的设计……………………………………………………………………………2.3总的设计……………………………………………………………………………………第四节设计总结…………………………………………………………………………第一节绪论本课程设计的七段译码器主要以BCD译码器或LED显示器为主要部件,应用集成门电路组成的一个具有译码和显示的装置。

其中BCD 译码器采用8421BCD译码器,即----七段显示译码器(74LS48)型。

LED显示器是由发光二极管组成的,LED显示器分共阴极和共阳极两种型号,共阴极LED显示器的发光二级管阴极接地,共阳极LED显示器的发光二极管阳极并联。

最后把BCD译码器或LED显示器组成了的装置就具有了显示和译码的功能。

此七段译码器也就成功了。

1.1设计的任务和本主要内容1)运用LED显示器或BCD译码器实现一定的功能2)写出详细的实验报告1.2基本工作原理及原理框图基本工作原理及原理框图如下:第二节硬件的设计BCD译码器选择与设计发光二极管(LED)由特殊的半导体材料砷化镓、磷砷化镓等制成,可以单独使用,也可以组装成分段式或点阵式LED显示器件(半导体显示器)。

分段式显示器(LED数码管)由7条线段围成字型,每一段包含一个发光二极管。

外加正向电压时二极管导通,发出清晰的光,有红、黄、绿等色。

7段LED单片机实验程序

1.单个七段LED循环显示0~9//-----------------------------------------------------------------// 名称: 单个七段LED循环显示0~9//-----------------------------------------------------------------// 说明: 主程序中的循环语句反复将0-9的段码送P0口,形成数字0-9的// 循环显示.//-----------------------------------------------------------------#include <reg51.h>#define INT8U unsigned char#define INT16U unsigned int//0~9的共阴数码管段码表code INT8U SEG_CODE[] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //-----------------------------------------------------------------// 延时函数//-----------------------------------------------------------------void delay_ms(INT16U x){INT8U t; while(x--) for(t = 0; t < 120; t++);}//-----------------------------------------------------------------// 主程序//-----------------------------------------------------------------void main(){INT8U i=0;P0=0x00;while(1){P0=SEG_CODE[i];i=(i+1)%10;delay_ms(300);}}2.TIMER0控制8×8LED点阵屏显示数字(显示0~9)//-----------------------------------------------------------------// 名称: TIMER0控制8×8LED点阵屏显示数字//-----------------------------------------------------------------// 说明: 8×8LED点阵屏循环显示数字0-9,刷新过程由T0定时器溢出中断完成. ////-----------------------------------------------------------------#include <reg51.h>#include <intrins.h>#define INT8U unsigned char#define INT16U unsigned int//-----------------------------------------------------------------// 数字点阵//-----------------------------------------------------------------INT8U code DotMatrix[] ={ 0x00,0x3E,0x41,0x41,0x41,0x3E,0x00,0x00, //00x00,0x00,0x00,0x21,0x7F,0x01,0x00,0x00, //10x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //20x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //30x00,0x0C,0x14,0x24,0x7F,0x04,0x00,0x00, //40x00,0x72,0x51,0x51,0x51,0x4E,0x00,0x00, //50x00,0x3E,0x49,0x49,0x49,0x26,0x00,0x00, //60x00,0x40,0x40,0x40,0x4F,0x70,0x00,0x00, //70x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //80x00,0x32,0x49,0x49,0x49,0x3E,0x00,0x00 //9};INT8U i=0,t=0,Num_Index,cs;//------------------------------------------------------------------// 主程序//------------------------------------------------------------------ void main(){//P3=0x80; //列选码初值1000000B,经左移1位,最先选C0列cs=0x80;Num_Index=0; //从“0 ”开始显示TMOD=0x00; //T0 工作在方式 0 、作13位的定时器TH0=(8192-2000)/32; //求定时 2ms的初值,高8位放TH0,TL0=(8192-2000)%32; //初值低5位放TL0 (213=8192,25=32)IE=0x82; //开T0中断和总中断TR0=1; //启动 T0while(1); //无限循环,(每当定时时间到,则执行中断函数一次)}//------------------------------------------------------------------// T0定时器溢出中断函数控制LED点阵屏刷新显示//------------------------------------------------------------------ void LED_Screen_Refresh() interrupt 1{TH0=(8192-2000)/32; //重置初值TL0=(8192-2000)%32;// P2=0xff; //输出点阵码P3=0x00;P2=~DotMatrix[Num_Index*8+i]; //因LED是共阳极故取反cs=_crol_(cs,1);P3=cs;//P3=_crol_(P3,1); //P3值循环左移1位,调整列选码并输出if(++i==8) i=0; //每个数字的点阵码有 8 个字节if(++t==250) //每个数字刷新显示一段时间(执行该函数250次//即约250×2ms后调整指针Num_Index显示下一个{t=0;if(++Num_Index==10) Num_Index=0; //偏移量加1,显示//下一个数字,若偏移量加1后=10,则重置为从0开始}}3. TIMER0控制8×8LED点阵屏显示字符(“你们好”)图同上//-----------------------------------------------------------------// 名称: TIMER0控制8×8LED点阵屏显示字符//-----------------------------------------------------------------// 说明: 8×8LED点阵屏循环显示数字0-9,刷新过程由T0定时器溢出中断完成. ////-----------------------------------------------------------------#include <reg51.h>#include <intrins.h>#define INT8U unsigned char#define INT16U unsigned int//----------------------------------------------------------------- // 数字点阵//----------------------------------------------------------------- INT8U code DotMatrix[] ={ 0x10,0x2F,0x40,0x36,0x21,0x6F,0x20,0x36,0x10,0x2F,0x40,0x2F,0x00,0x20,0x21,0x3F,0x08,0x1D,0x2A,0x4D,0x00,0x49,0x5F,0x68,};INT8U i=0,t=0,Num_Index;//------------------------------------------------------------------ // 主程序//------------------------------------------------------------------ void delay2ms(void) //延时2ms子程序{unsigned char i,j,z;for(z=5;z>0;z--)for(i=12;i>0;i--)for(j=15;j>0;j--);}void main(){P3=0x80; //列选码初值1000000B,经左移1位,最先选C0列Num_Index=0; //从“0 ”开始显示//------------------------------------------------------------------ // T0定时器溢出中断函数控制LED点阵屏刷新显示//------------------------------------------------------------------ while(1){P2=0xff; //先全暗P3=_crol_(P3,1); //P3口线列选码循环左移1位,并输出列选码P2=~DotMatrix[Num_Index*8+i];if(++i==8) i=0; //送出点阵码,因LED是共阳极故取反if(++t==250) //每个数字刷新显示一段时间(执行该函数250次//即约250×2ms后调整指针Num_Index显示下一个{t=0;if(++Num_Index==3)Num_Index=0; //偏移量加1,显示//下一个数字,若偏移量加1后=10,则重置为从0开始}delay2ms();}}4.数码管显示6键独立连接式键盘ORG 1000HMAIN:acall keybdajmp mainKEYBD: MOV A,#0FFHMOV P1,A ;置输入方式MOV A, P1 ;读入键盘值ANL A, #03FH ;屏蔽高2位CJNE A,#03FH,XD ;有键转,去抖动MOV B,#0FFH ;无键,置无键标志给B,返回RETXD: LCALL Delay10ms ;延时10 ms,消除前沿抖动MOV P1,#0FFH ;置输入方式MOV A,P1 ;读入键盘值JNB ACC.0,K0 ;查询P1.0是否为低电平JNB ACC.1,K1 ;查询P1.1是否为低电平JNB ACC.2,K2 ;查询P1.2是否为低电平JNB ACC.3,K3 ;查询P1.3是否为低电平JNB ACC.4,K4 ;查询P1.4是否为低电平JNB ACC.5,K5 ;查询P1.5是否为低电平MOV B,#0FFH ;无键,置无键标志,返回RETK0: mov p2,#3FHRETK1:mov p2,#06HRETK2:mov p2,#5BHRETK3:mov p2,#4FHRETK4:mov p2,#66HRETK5:mov a,#6DHRETDelay10ms: MOV R7, #14H ; 延时10ms子程序DMS: MOV R6, #0FFHDJNZ R6, $DJNZ R7,DMSRETEND5.字符型LCD(1)显示姓名学号//----------------------------------------------------------------- // 名称: 1602字符液晶工作于8位模式//-----------------------------------------------------------------#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table1[]="SUHONGKUN!"; //第一行显示的字符,共11个uchar code table2[]="211414283"; //第二行显示的字符,共13个sbit RS=P2^5; //单片机端口定义sbit RW=P2^6;sbit E=P2^7;uchar num;void delay(uint xms) //----------延时子函数-------------------- {uint i,j;for(i=xms;i>0;i--)for(j=125;j>0;j--);}void write_com(uchar com) //---------写命令子函数------------{ RS=0; //写命令RW=0; //写模式P0=com; //将命令字送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void write_data(uchar date) //---------写数据子函数--------------- { RS=1; //写数据RW=0; // 写模式P0 = date; //将要写的数据送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void LCD1602_init() //--------------LCD1602初始化设置------------ {E=0;write_com(0x38); //设置8位数据接口,16×2显示,5×7点阵write_com(0x0c); //设置开显示,光标不显示write_com(0x06); //写一个字符后地址指针自动加上write_com(0x01); //清屏,数据指针清0}//---------------------主函数----------------------------------------- void main(){ LCD1602_init();write_com(0x80); //DDRAM数据指针定位在第一行第一个字符处for(num=0;num<11;num++) //写第一行要显示的信息{ write_data(table1[num]);delay(5); //每两个字符间稍延时}write_com(0x80+0x47); // 数据指针定位在第二行首字符处for(num=0;num<9;num++) //写第二行要显示的信息{write_data(table2[num]);delay(5);}while(1);}(2)改线/程序//----------------------------------------------------------------- // 名称: 1602字符液晶工作于8位模式//----------------------------------------------------------------- #include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table1[]="SUHONGKUN!"; //第一行显示的字符,共11个uchar code table2[]="211414283"; //第二行显示的字符,共13个sbit RS=P2^0; //单片机端口定义sbit RW=P2^1;sbit E=P2^2;uchar num;void delay(uint xms) //----------延时子函数--------------------{uint i,j;for(i=xms;i>0;i--)for(j=125;j>0;j--);}void write_com(uchar com) //---------写命令子函数------------{ RS=0; //写命令RW=0; //写模式P1=com; //将命令字送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void write_data(uchar date) //---------写数据子函数--------------- { RS=1; //写数据RW=0; // 写模式P1 = date; //将要写的数据送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void LCD1602_init() //--------------LCD1602初始化设置------------ {E=0;write_com(0x38); //设置8位数据接口,16×2显示,5×7点阵write_com(0x0c); //设置开显示,光标不显示write_com(0x06); //写一个字符后地址指针自动加上write_com(0x01); //清屏,数据指针清0}//---------------------主函数----------------------------------------- void main(){ LCD1602_init();write_com(0x80); //DDRAM数据指针定位在第一行第一个字符处for(num=0;num<11;num++) //写第一行要显示的信息{ write_data(table1[num]);delay(5); //每两个字符间稍延时}write_com(0x80+0x47); // 数据指针定位在第二行首字符处for(num=0;num<9;num++) //写第二行要显示的信息{write_data(table2[num]);delay(5);}while(1);}(3)交替显示(姓名、学号)图与(1)同//-----------------------------------------------------------------// 名称: 1602字符液晶工作于8位模式//-----------------------------------------------------------------#include <reg51.h>#define uchar unsigned char#define uint unsigned intuchar code table1[]="SUHONGKUN!"; //第一行显示的字符,共11个uchar code table2[]="211414283"; //第二行显示的字符,共13个sbit RS=P2^5; //单片机端口定义sbit RW=P2^6;sbit E=P2^7;uchar num;void delay(uint xms) //----------延时子函数-------------------- {uint i,j;for(i=xms;i>0;i--)for(j=125;j>0;j--);}void write_com(uchar com) //---------写命令子函数------------{ RS=0; //写命令RW=0; //写模式P0=com; //将命令字送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void write_data(uchar date) //---------写数据子函数--------------- { RS=1; //写数据RW=0; // 写模式P0 = date; //将要写的数据送到数据线上delay(5); //稍延时E=1; //给E一个高脉冲将命令字送入液晶控制器,完成写操作delay(5);E=0;}void LCD1602_init() //--------------LCD1602初始化设置------------ { E=0;write_com(0x38); //设置8位数据接口,16×2显示,5×7点阵write_com(0x0c); //设置开显示,光标不显示write_com(0x06); //写一个字符后地址指针自动加上write_com(0x01); //清屏,数据指针清0}//---------------------主函数----------------------------------------- void main(){ LCD1602_init();write_com(0x80);while(1){ //DDRAM数据指针定位在第一行第一个字符处for(num=0;num<11;num++) //写第一行要显示的信息{ write_data(table1[num]);delay(100); //每两个字符间稍延时} write_com(0x01);write_com(0x80+0x47); // 数据指针定位在第二行首字符处for(num=0;num<9;num++) //写第二行要显示的信息{ write_data(table2[num]);delay(100);} write_com(0x01);}}6.ADC0809模数转换(1)(2)同图(1)连接电路,实现对0809通道三持续采集MAIN:MOV R1,#0000HMOV DPTR,#7FFBHMOV R7,#08HLOOP:MOVX @DPTR,AMOV R6,#0AHDLAY:NOPNOPNOPDJNZ R6,DLAYMOVX A,@DPTRMOV @R1,AINC DPTRINC R1DJNZ R7,LOOPEND(2)查询方式MAIN:MOV R1,#0000HMOV R7,#08HMOV DPTR,#7FFBHLOOP:MOVX @DPTR,A HERE:JNB P1.0,HERE MOVX A,@DPTR MOV @R1,AINC DPTRINC R1DJNZ R7,LOOP END7.DAC0832数模转换(1)输出三角波// 用DAC0832生成锯齿波//----------------------------------------------------------------- // 本例程序向DAC0832反复输出0x00-0xFF的数字量,经过数/模转// 换及电流到电压的转换后输出锯齿波.////----------------------------------------------------------------- #include <reg51.h>#include <absacc.h>#define INT8U unsigned char#define INT16U unsigned int#define OUTDATA XBYTE[0x7FFF] //向0832输出转换数据的地址//----------------------------------------------------------------- // 延时子程序//----------------------------------------------------------------- void delay_ms(INT16U ms){ INT8U t;while(ms--) for(t = 0; t < 31; t++);}//----------------------------------------------------------------- // 主程序//----------------------------------------------------------------- void main(){ INT8U i;while(1){ for(i=0; i<255; i++){ OUTDATA=i;delay_ms(1);}for(i=255;i>0;i--){ OUTDATA=i;delay_ms(1);}}}(2)输出正弦波// 用DAC0832生成锯齿波//-----------------------------------------------------------------// 本例程序向DAC0832反复输出0x00-0xFF的数字量,经过数/模转// 换及电流到电压的转换后输出锯齿波.////-----------------------------------------------------------------#include <reg51.h>#include <absacc.h>#define INT8U unsigned char#define INT16U unsigned int#define OUTDATA XBYTE[0x7FFF] //向0832输出转换数据的地址unsigned char code sin[128]={128,134,140,146,152,158,165,170,176,182,188,193, 198,203,208,213,218,222,226,230,234,237,240,243,245,248,250,251,253,254, 254, 255, 255, 255, 254, 254,253,251,250,248,245,243,240,237,234,230,226,222,218,213, 208,203,198,193,188,182,176,170,165,158,152,146,140,134,127,121,115,109,103, 97,90,85,79,73,67,62,57,52,47,42,37,33,29,25,21,18,15,12,10,7,5,4,2,1,1,0,0,0,1 ,1,2,4,5,7,10,12,15,18,21,25,29,33,37,42,47,52,57,62,67,73,79,85,90,97,103,109,115,121 };//-----------------------------------------------------------------// 延时子程序//-----------------------------------------------------------------void delay_ms(INT16U ms){ INT8U t;while(ms--) for(t =0; t <120; t++);}//-----------------------------------------------------------------// 主程序//-----------------------------------------------------------------void main(){ INT8U i;while(1){ for(i=0;i<128;i++){OUTDATA=sin[i] ;delay_ms(1); }}}。

单片机部分习题答案

单片机部分习题答案第一题:题目:单片机中,什么是“中断”?格式:说明文答案:中断是指当某一特定事件发生时,单片机会立即暂停当前任务并转入处理特殊事件的程序,待特殊事件处理完毕后再返回原来的任务。

中断可以提高单片机的响应速度和处理效率。

第二题:题目:请简要解释单片机中定时器的概念,并说明定时器的基本原理。

格式:说明文答案:定时器是单片机中常用的一个模块,用于生成特定时间间隔的定时信号。

定时器由一个计数器和相关的寄存器构成。

通过设置计数器的初值和控制寄存器的值,可以确定定时器的工作方式和时间间隔。

定时器的基本原理是:计数器不断递增,当计数器的值达到设定的初值时,产生中断信号或其他控制信号,然后重新开始计数,如此循环。

通过不同的设置,可以实现不同的定时功能。

第三题:题目:什么是PWM信号?在单片机中如何生成PWM信号?格式:说明文答案:PWM(Pulse Width Modulation)信号是一种脉冲宽度调制的信号,具有占空比可调的特点。

在单片机中生成PWM信号的方法有多种,其中比较常见的是使用定时器/计数器模块。

具体步骤如下:1. 配置定时器/计数器的工作模式为PWM模式。

2. 设定计数器的初值和比较值,用于确定脉冲的周期和占空比。

3. 开启定时器/计数器工作。

4. 根据需要,可以使用软件或硬件方式调整比较值,实现PWM信号的占空比调整。

通过上述步骤,单片机可以生成占空比可调的PWM信号,常用于电机驱动、LED亮度调节等应用。

第四题:题目:单片机中,什么是ADC转换?如何进行ADC转换?格式:说明文答案:ADC转换是模拟信号转换为数字信号的过程,用于将外部的模拟信号转换为单片机可处理的数字信号。

ADC(Analog-to-Digital Converter)转换的结果表示模拟信号的大小,可以通过计算和比较等操作进行进一步处理。

在单片机中进行ADC转换的步骤如下:1. 配置ADC模块的相关寄存器,包括参考电压、采样时钟等。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档