按键控制数码管显示数字加减

按键控制数码管显示数字加减
按键控制数码管显示数字加减

#include

#define uchar unsigned char

#define uint unsigned int

uint num=0,num1=0;

sbit key1=P3^0;

sbit key2=P3^1;

sbit key3=P3^2;

sbit key4=P3^3;

uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delayms(uint x)

{

uint i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

void display(uint num)

{

uint shi,ge;

shi=num/10;

ge=num%10;

P0=table[shi];

P1=0xfd;

delayms(5);

P0=table[ge];

P1=0xfe;

delayms(5);

}

void keyscan()

{

if(key1==0)

{

delayms(10);

if(key1==0)

{num1++;

if(num1==60)

num1=0;

while(!key1)

display(num1);

}

}

if(key2==0)

{

delayms(10);

if(key2==0)

{

if(num1==0)

num1=60;

num1--;

while(!key2) display(num1);

}

}

if(key3==0)

{

delayms(10);

if(key3==0)

{num1=0;

while(!key3)

display(num1);}

}

if(key4==0)

{

delayms(10);

if(key4==0)

{TR0=~TR0;

while(!key4)

display(num1);}

}

}

void main()

{

TMOD=0x01;

TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1;

ET0=1;

while(1)

{

keyscan();

display(num1);

}

}

void T()interrupt 1

{

TH0=(65536-45872)/256; TL0=(65536-45872)%256; num++;

if(num==20) {num1++;

num=0;

if(num1==60)

num1=0;} }

单片机 实验2-外部中断程序设计-中断按键按下次数计数数码管显示-硬件和程序设计参考

硬件电路参考如下:

程序参考如下: #pragma sfr #pragma interrupt INTP0 LED_INTP0 /* 定义使用INTP0中断,中断函数名LED_INTP0*/ #pragma di /*禁止使用中断功能声明*/ #pragma ei /*允许使用中断功能声明*/ /*数码管编码数组*/ unsigned char LED_light[10]={0x30,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x3F}; unsigned char j=0; /*按键次数变量*/ void hdinit() /*硬件初始化*/ { PM1=0; /*P1口输出数码管字型码,所以设置为输出*/ PU1=0XFF; /*由于P1口直接驱动数码管显示,为增大驱动,设置为内部上拉*/ PM12.0=0; /*P12.0口线要作为中断多功能,设置为输出和内部上拉 */ PU12.0=1; PIF0=0; /*中断请求标志,没有中断请求*/ PMK0=0; /*中断屏蔽标志,允许中断*/ PPR0=1; /*中断优先级,低优先级*/ EGP.0=1; /*与EGN组合,上升沿有效*/ EGN.0=0; } void main (void) { DI(); /*首先做准备,禁止中断*/ IMS=0XCC; IXS=0X00; hdinit(); EI(); /*准备完成,允许中断*/ while(1) { /*啥也不干,就等待中断,仅是在这个实验中使用中断,实际不是这样/* } } __interrupt void LED_INTP0() /*中断函数*/ { P1= LED_light[j]; /*P1赋值,数码管显示相应数值*/ j++; /*按键次数加一*/ if(j==10) /*如果按键次数达到十次,按键计数归0*/ {j=0;} } 思考: 如果用两位数码管,从0—99循环计数又该怎样设计硬件和软件呢?

实验四 数码管显示控制

实验四数码管显示控制 一、实验目的 1、熟悉Keil uVision2软件的使用; 2、掌握LED数码管显示接口技术; 3、理解单片机定时器、中断技术。 二、实验设备及仪器 Keil μVision2软件;单片机开发板;PC机一台 三、实验原理及内容 1、开发板上使用的LED数码管是四位八段共阴数码管(将公共端COM接地GND),其内部结构原理图,如图4.1所示。 图4.1共阴四位八段LED数码管的原理图 图4.1表明共阴四位八段数码管的“位选端”低电平有效,“段选端”高电平有效,即当数码管的位为低电平,且数码管的段为高电平时,相应的段才会被点亮。 实验开发板中LED数码管模块的电路原理图,如图4.2所示。 a~h SP2 SP1 P0.0~P0.3 P0.4~P0.7图4.2 LED数码管模块电路原理图

图中,当P1.0“段控制”有效时,P0.0~P0.7分别对应到数码管的a~h段。当P1.1“位控制”有效时,P0.0~P0.7分别对应到DIG1~DIG8。 训练内容一:轮流点亮数码管来检测数码管是否正常。参考程序: ORG 00H AJMP MAIN MAIN: SETB P1.2;LED流水灯模块锁存器的控制位 MOV P0,#0FFH;关闭LED灯 CLR P1.2 SETB P1.3 ;点阵模块的行控制锁存器 MOV P0,#0 ;关闭点阵行 CLR P1.3 MOV A,#11111110B;数码管“位选信号”初值,低电平有效 LOOP:SETB P1.1;数码管位控制锁存器有效 MOV P0,A CLR P1.1 RL A ;形成新的“位选信号”,为选择下一位数码管做准备 SETB P1.0;数码管段控制锁存器有效 MOV P0,#0FFH ;数码管的所有段点亮,显示“8” CLR P1.0 CALL DELAY SJMP LOOP DELAY:MOV R5,#0;延时子程序 D1: MOV R6,#0 D2:NOP DJNZ R6,D2

实验五 数码管00~99循环计数

实验五数码管00~99循环计数 一、实验目的 1、熟练掌握8255扩展功能的应用。 2、了解七段数码管与单片机接口、应用的方法。 3、掌握七段数码管的动态扫描显示。 4、研究延时程序。 二、实验内容 在七段数码上管实现00~99循环计数。 三、实验说明 七段数码管的显示方式分为静态显示和动态显示。所谓动态显示就是一位一位地轮流点亮显示器的各个位,对于显示器的每一位而言,每隔一段时间点亮一次。 四、实验步骤 (一)由实验指导教师检查、记录预习报告准备情况。 (二)数码管00~99循环计数 1、准备好需要计算的数据。在DVCC软件平台上,参考实验程序,编辑源程序。 2、源程序经检查无误后,通过双龙ISP软件烧写到89S52中。观察实验现象。 3、用七段数码管实现11~88循环计数。 (三)实验内容完成后,报告实验指导教师。经实验指导教师认可并签字后,实验内容完毕。 (四)实验结束后,按顺序关闭电源并值日。 五、实验原理图 见附图 六、实验参考程序 ORG 0000H MAIN:MOV A,#80H MOV DPTR,#0FFFFH MOVX @DPTR,A MOV R3,#100 MOV R0,#00H MOV R1,#10 L1:MOV A,R0 MOV B,#0AH DIV AB MOV R2,#0FEH CALL DISP MOV A,B MOV R2,#0FDH CALL DISP DJNZ R1,L1 INC R0 DJNZ R3,L1 SJMP MAIN

DISP:MOV DPTR,#TABLE MOVC A,@A+DPTR MOV DPTR,#0EFFCH MOVX @DPTR,A MOV A,R2 INC DPTR MOVX @DPTR,A CALL DELAY RET DELAY:MOV R5,#10 L3:MOV R6,#24 DJNZ R6,$ DJNZ R5,L3 RET TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END 七、预习要求 1、认真阅读实验指导书,领会实验要求。 2、阅读并理解本实验的原理图及参考程序。 3、复习9.1.2显示接口技术并写出第二个实验内容的程序。 八、思考题 1、在参考程序中“DISP”的功能是什么? 2、如果去掉“DJNZ R1,L1”或者“DJNZ R3,L1”会出现什么现象? 3、指令“INC DPTR”的功能是什么? 4、本实验板采用的七段数码管是共阳极还是共阴极?如果换成另外一种,那么TABLE中的值应该为多少? 九、实验报告要求 写出思考题答案。 附图2.1

独立按键控制数码管

青岛农业大学海都学院 单片机课程设计实习报告 院系工程系 专业 2014级电气Z1班 学号 201471019 姓名隋永博 实习时间第11周 实习课程单片机应用课程设计 2015年11月6日

按键控制数码管加减显示 目录 一、前言 (3) 二、设计要求 (3) 三、系统硬件设计与说明 (4) 3.1系统组成及总体框图 (4) 3.2 AT89C51 (4) 四、系统软件设计与说明 (5) 4.1 软件部分的程序流程图 (5) 4.2 源程序 (5) 五、仿真过程描述 (7) 六、总结 (8)

一、前言 随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。 基于当前市场上的智能数字市场需求量大,其中数码管显示技术就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。以液晶显示技术的发展为背景,选择了比较常用的T6963C内置控制器型图形LCD(液晶显示嚣)模块,从应用角度介绍了该控制器的特点和基本功能,并描述了单片机控制T6963CLCD模块的显示机理。在此前提下以C51硬件开发语言为基础,给出了8051单片机与T6963C 的接口电路框图,并以字符、图形的具体显示方法为例简要介绍了软件的设计流程及实现。 二、设计要求 名称:K1-K4控制数码管移位显示 说明:按下K1时加1计数并增加显示位, 按下K2时减1计数并减少显示位, 按下K3时清零。

三、系统硬件设计与说明 3.1系统组成及总体框图 图1 系统硬件总图 3.2 AT89C51 该课程设计中我们选用的芯片是AT89C51。AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash

数电课程设计-数码管显示控制器的设计与实现

课程设计任务书 学生姓名:专业班级: 指导教师:工作单位: 题目: 数码管显示控制器的设计与实现 初始条件: 555定时器、74LS160计数器、74LS161计数器、74LS153数据选择器、74LS48译码器、74LS04非门与数码管、电阻、电容等相关元件。 要求完成的主要任务: 1、设计任务 根据已知条件,完成对数码管显示控制器的设计、装配与调试。 2、设计要求 (1)、能自动一次显示出数字 0、1、2、3、4、5、6、7、8、9(自然数列),1、 3、5、7、9(奇数列), 0、2、 4、6、8(偶数列),0、1、0、1、2、3、4、 5、6、7(音乐符号序列);然后再从头循环; (2)、打开电源自动复位,从自然数列开始显示。 时间安排: 1、2012 年 6 月 8 日分班集中,布置课程设计任务、选题;讲解课设具体实施计划与课程设计报告格式的要求;课设答疑事项。 2、2012 年 6 月 9 日至 2012 年 7 月 3 日完成资料查阅、设计、制作与调试;完成课程设计报告撰写。 3、2012 年 7 月 4 日提交课程设计报告,进行课程设计验收和答辩。 指导教师签名:年月日 系主任(或责任教师)签名:年月日

目录 摘要 (3) Abstact (4) 引言 (5) 1设计背景 (6) 1.1设计任务 (6) 1.2设计要求 (6) 1.3指导思想 (6) 2方案论证 (7) 2.1方案说明 (7) 2.2方案原理 (7) 3电路的设计与分析 (8) 3.1电路的总体设计 (8) 3.2电路的原理框图 (9) 3.3元电路的设计与分析 (9) 3.3.1多谐振荡电路的设计与分析 (9) 3.3.2计数电路的设计与分析 (11) 3.3.3译码显示电路的设计与分析 (13) 4电路仿真、调试与分析 (16) 4.1脉冲产生电路的仿真 (16) 4.2总电路的仿真 (17) 4.3运行结果分析 (17) 5心得与体会 (18) 附录1元器件清单 (19) 附录2参考文献 (20)

单片机控制步进电机和数码管显示

一、设计任务书 设计内容:用80C51单片机设计一个步进电机控制器 设计要求: 1.用8015设计一个四相步进电机。 2.可控制步进电机的启动与停止,正转与反转。 3.10档速度调节。 4.点动控制。 5.可显示电机运行参数。 二、设计总体方案 (一)控制方式的选择 控制主要用于电机速度和方向的转换。控制方式有按键控制和开关控制两种。按键较开关而言,操作更加简便,故选按键控制。 方案一:独立按键。独立按键可自由连接,线路简单。 方案二:编码式键盘。编码式键盘的按键接触点接于74LS148芯片。当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。 本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。 (二)电机电路设计方案的选择 由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。 (三)单片机的选择 方案一:AT89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。 方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。 本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。 (四)显示方案的选择 方案一:采用LED数码管。LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。 方案二:采用LCD1602液晶显示器。LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。 由上可知,LCD1602液晶显示器的优点突出,故选择方案二。 (五)软件部分的选择 软件部分的选择主要是指编程语言的选择,编译调试工具根据设计平台选择伟福软件。编程语言主要有以下两种方案。

模拟量按键与数字按键综合控制数码管说明

“模拟按键与数字按键综合控制数码管”说明(一)设计思路与方法 本实验中按键1、2是通过触发0号和1号外部中断来分别控制一个数码管信号显示位置的循环右移和循环左移,模拟量按键3(该键既是模拟按键又是数字按键,这里使用到的是其模拟按键功能)通过AD模拟转换来锁定或者释放数码管信号显示(即通过该按键来控制数码管信号显示位置是否能移动),导航键的上拉和下拉键通过AD模拟转换来控制数码管信号显示内容,期间用0号定时器中断来给按键1、2消抖并且点亮数码管,模拟按键则采用延时消抖,其基本原理与定时器消抖一致。AD模拟转换结果(本实验这里只获取ADC_RES寄存器中的8为转换值)要通过线性右移8位(即只保留高三位)来消除转换误差。(二)电路原理图 1.发光二极管及LED数码管电路(左、右两部分均含) 附LED数码管引脚定义图如下: 2.按键电路

(三)电路工作原理 1.数码管电路工作原理 P0口的8位输出分别控制1个LED数码管的7段和一个小数点;而P2.3经反相器U4C控制74HC138的使能信号E3,结合P2.0、P2.1、P2.2这3个位选控制信号确定8个LED数码管中的哪个被点亮;电阻R15~R22为限流电阻。当段选为高、使能信号有效时,对应的LED管将会发光。 2.数字按键(按键1和2)工作原理 按键1引脚对应触发外部中断0;按键2引脚对应触发外部中断1;按键1、按键2按下去,引脚KEY1、KEY2输出低电平0。在按键1、2触发的外部中断中要对其进行消抖的工作,在定时器中断中判断按键的状态,为0计数加1,连续200次都为0证明按键已经按下,完成消抖;为1,则按键存在抖动,计数清零,重新计数。 3.模拟按键(按键3和导航键)工作原理 从案件电路图中可以看出,导航按键的不同方向以及按键3对应的不同的电压值,通过AD转换器(具体工作方式见STC15F2K60S2数据手册)转换成数字值保存在相应寄存器中,然后通过读取相应的寄存器判断按键执行相应功能(AD 模拟转换结果(本实验这里只获取ADC_RES寄存器中的8为转换值)要通过线性右移8位(即只保留高三位)来消除转换误差)。

51单片机按键控制数码管程序

#define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p17=P1^7; void delay(uint z); int b[]={0,1,2,3,4,5,6,7};//设置每一位显示的数字 unsigned char code Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极数码管 int a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() { EA=1; EX0=1; IT0=1; P1=0xff; while(1) { for(c=0;c<8;c++)//数码管扫描显示

P2=a[c]; P0=Tab[b[c]]; delay (1); } } } void delay(uint z) { uint a,b; for(a=z;a>0;a--) for(b=110;b>0;b--); } int_0()interrupt 0 { EA=0; if(p10==0) b[0]=(b[0]+1)%10; if(p11==0) b[1]=(b[1]+1)%10; if(p12==0) b[2]=(b[2]+1)%10; if(p13==0) b[3]=(b[3]+1)%10; if(p14==0) b[4]=(b[4]+1)%10; if(p15==0) b[5]=(b[5]+1)%10; if(p16==0) b[6]=(b[6]+1)%10; if(p17==0) b[7]=(b[7]+1)%10;

用单片机实现1位LED数码管显示0-9

单片机课程设计题目1位LED数码管显示0-9姓名陈益明 学号 班级 09电力 指导老师许丽汪厚新

目录 一:实验目的与任务…………………二:实验要求…………………………三:实验内容…………………………... 四:实验器材…………………………五:关于PLC控制LED介绍………. 六:原理图绘制说明…………………七:流程图绘制以及说明……………八:电路原理图与仿真………………九:源程序……………………………十:心得体会…………………………十一:参考文献………………………

一、实验与任务 结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。 通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。 利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。 本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。 二、实验要求 1掌握可编程序控制器技术应用过程中的一些基本技能。 2、巩固、加深已学的理论知识。 3了解可编程控制器的装备、调试的全过程。 4、培养我们综合运用所学的理论知识和基本技能的能力,尤其是培养我们 把理论和实际结合起来分析和解决问题的能力。适应世界生产的需要。 培养出一批既有理论知识又有动手能力的人才。 三、实验内容 1、练习设计、连接、调试控制电路; 2、学习PLC程序编程;

4位按键控制下的LED、数码管SOPC计数

4位按键控制下的LED、数码管SOPC计数 要求:在Altera公司的FPGA开发板上,利用Nios II CPU软核,实现使用按键进行LED、数码管及在Nios II IDE下Console栏里计数的方法。 实验仪器:SOPC核心板、USB-Blaster下载线、开发实验底板、电源、PC。 //将库函数包含进入 #include"system.h"//SOPC生成的系统库函数 #include //中断库函数 #include"alt_types.h"//类型定义库函数 #include //io端口库函数 #include"altera_avalon_pio_regs.h"//io端口寄存器库函数 #include"altera_avalon_timer_regs.h"//定时器端口寄存器库函数 #include #define TIMER_BASE 0x00011000 #define PIO_KEY_BASE 0x00011020 #define PIO_HIGH_BASE 0x00011030 #define PIO_LOW_BASE 0x00011050 #define PIO_LED_BASE 0x00011040 #define KEY *(alt_u8 *)PIO_KEY_BASE //将按键接口寄存器的按键值取得 //计数函数 static void counter_add(alt_u8 cnt) { IOWR(TIMER_BASE,0,0); if (cnt>= 0x63)//当计数到99 进行清零 cnt= 0x00; else//当没有计数到99 将秒针加1 cnt = cnt+ 1; } //清零函数 static void counter_reset(alt_u8 cnt) {

按键控制数码管加减程序

#include #define dataport P1 #define uchar unsigned char #define uint unsigned int sbit latch1=P2^2; //段锁存 sbit latch2=P2^3; //位锁存 sbit key1=P3^2; sbit key2=P3^3; unsigned int duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned int weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char display[8]; void suocun(uchar firstbit,uchar num); void delay(uchar z) //延时程序 { uchar i,j,k; for(i=0;i<50;i++) for(j=0;j<50;j++) for(k=0;k

if(num==0) num=9; } } display[0]=duanma[num%10]; suocun(2,1); } } void suocun(uchar firstbit,uchar num) { uchar i ; for(i=0;i

51单片机控制4个数码管显示

. //使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } }

按键控制1位LED数码管显示0-9

单片机课程设计 姓名:陈素云 班级:09电力方向2班学号:2

设计题目: 按键控制1位LED数码管显示0-9 设计要求: 通过单片的I/O口与LED数码管所构成的单片机系统的软件编程,使学生掌握简单的单片机系统的设计,同时初步学全用汇编语言和C语言两种方式编程的基本方法。学生必须采用单片机AT89C51为LED显示屏的控制为核心,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,然后达到显示不同的字符和图符号的目的. 学生根据前期设计的步骤按照设计报告内容的具体要求,选择前期设计的一个典型题目,写出详尽的课程设计报告,重点内容包括方案论证、完整的电路图、软件系统流程图及开发程序、组装调试内容和总结等。

目录 第1节引言 (3) 1.1 LED数码显示器概述 (3) 1.2 设计任务 (5) 1.3设计目的 (6) 第2节AT89C51单片机简介 (6) 2.1 AT89C51单片机 (6) 2.2 单片机管脚图 (7) 2.3管脚说明 (7) 2.4振荡器特性 (9) 第3节设计主程序与硬件电路设计 (9) 3.1设计的主程序 (10) 3.2系统程序所需硬件 (10) 3.2.1所需的硬件 (10) 3.2.2所需硬件的结构图 (11) 3.3 硬件电路总连接图 (12) 第4节程序运行过程 (12) 4.1分析步骤 (12) 4.2 程序执行过程 (13) 第5节程序运行结果 (13) 总结 参考文献

第1节引言 还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 1.1 LED数码显示器概述 八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。如下图所示。` 共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。

单片机课设数码管显示滚动控制

《单片机设计与实训》 设计报告 题目:数码管滚动显示控制姓名:王伟杰 班级:自动化四班 学号: 2014550430 指导老师:张莹 提交日期: 2016年10月29日

目录 一、设计题目与要求 (4) 1.1设计题目 (4) 1.2设计要求 (4) 二、系统方案设计 (4) 2.1硬件电路设计 (5) 1.单片机最小系统简介 (5) 2.数码管显示电路 (7) 2.3硬件选型及说明 (8) 1. ST89C51单片机 (8) 2. 四位一体七段共阴极显示数码管 (10) 三、系统原理图设计与仿真 (11) 3.1系统仿真图 (11) 3.2系统仿真结果 (12) 四、程序设计 (13) 4.1程序设计 (13) 4.2程序流程图 (15) 五、系统调试 (16) 5.1系统硬件调试 (16) 5.2系统软件调试 (16) 六、总结与体会 (17)

附录一 (19) 附录二 (20) 附录三 (34)

一、设计题目与要求 单片机课程设计是一门实践课程,要求学生具有制作调试单片机最小系统及外设的能力,能够掌握单片机内部资源的使用。单片机课程设计内容包括硬件设计、制作及软件编写、调试,学生在熟练掌握焊接技术的基础上,能熟练使用单片机软件开发环境Keil C51编程调试,并使用STC ISP调试工具采用串口下载方式联调制作的单片机最小系统。单片机课程设计题目包含基本部分及扩展部分,基本部分即单片机最小系统部分,扩展部分是对单片机内部资源及外部IO口的功能扩展,使制作的单片机系统具有一定的功能。 1.1设计题目 数码管滚动显示控制 1.2设计要求 自制一个单片机最小系统,包括串口下载、复位电路,采用两个四位一体数码管作为显示器件,通过按钮选择实现四种滚动显示模式,例如从左至右,从右至左,内缩,外扩等,滚动信息可以是数字或有意义的英文字符。 二、系统方案设计

按键控制数码管,数字每次加一

最佳答案 #include < reg52.h > // 嵌入51单片机头文件 #define uchar unsigned char // 宏定义,用uchar替代无符号字符型#define uint unsigned int // 宏定义,用uint 替代无符号整数型sbit Key = P2 ^ 7; uchar Count = 0; uchar code DataChar[10] = // 定义数码管的段码'0'~'9'、'-'、' ' 'P' {

0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xef}; //延时N毫秒 void DelayNms( uint N ) // 利用x、y作简单的自减运算,消耗单片机指令周期,达到延时的目的 { uintx,y; for( x=N; x>0; x-- ) for( y=110; y>0; y-- ); } //数码管显示// 显示方式为动态扫描,视觉暂留原理 void Display( ucharNum ) // *p指向Main函数中的数组ShowNum的首地址 { P0 = DataChar[ Num ]; // 向P0赋段码值 DelayNms(2); // 短暂的延时 P0 = 0x00; // 让数码管熄灭,否则会造成数字重叠 }

void main( void ) { while(1) { if( Key == 0 ) { DelayNms(30); if( Key == 0 ) { Count += 1; Count = (Count>9)? 0 : Count; } while( !Key ); } Display( Count ); } }

51汇编按键数码管程序

51单片机汇编按键数码管程序 1、硬件设计 本设计实现用按键控制数码管从0到9显示。首先设计硬件电路,连接晶振电路、按键连接到外部中断引脚P3.2、数码管使用共阴数码管连接P2.0~P2.6,如图1。 图1 硬件电路 2、程序设计 ORG 0000H LJMP MAIN ;跳转到主函数 ORG 0003H ;中断入口 LJMP INT0SUB ;中断服务函数 ORG 0040H ;程序存放起始地址 MAIN: MOV SP,#30H ;堆栈指针指向30H MOV A,#81H ;赋值81H,用于配置外部中断 MOV IE,A ;使能外部中断 MOV A,#01H ;用于配置触发方式 MOV TCON,A ;触发方式选择下降沿触发 MOV R0,#00H ;按键初始值为零 MOV DPTR,#TABLE ;数据表首地址 LCALL DISPLAY ;调用显示函数 JMP MAIN ;共阴数码管0~9数据表 TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

DISPLAY: MOV A,R0 ;取出按键值 MOV B,#0AH ;用于按键值处理 DIV AB ;A除以B MOV A,B ;将余数放到累加器A MOVC A,@A+DPTR ;取出数据对应数码管数据 MOV P2,A ;数码管显示 JMP DISPLAY ;显示循环 INT0SUB: ;按键外部中断服务函数 INC R0 ;R0自加1 RETI ;中断返回 DELAY30: MOV R7,#0FFH ;延时函数 D0: MOV R6,#0FFH D00: MOV R5,#0FFH D1: DJNZ R5,D1; D10: DJNZ R6,D10; DJNZ R7,D0 RET END ;结束

按键计数器

西安欧亚学院2014-2015学年第二学期《单片机原理及应用》 课程设计报告 课程名称:单片机原理及应用 项目名称:按键计数器 所在分院:信息工程学院 班级:统本电信1301 组员:刘富强33 姜子龙39 指导教师:苏智华

设计报告成绩评定表:

目录 一.设计功能 (1) 二.系统方案 (1) 三.硬件电路 (3) 四.软件设计 (5) 五.安装调试 (7) 六.系统改进方案 (8) 七.总结 (8) 附录: (9)

一.设计功能 1.功能及技术指标要求 利用AT89S52单片机来制作一个手动按键计数器。 2.设计内容 在AT89S512单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阳数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阳数码管,作为00-99计数的十位数显示。 3.设计思路及关键技术 一个完整00~`99手动计数器想当于一个简单的单片机系统,该系统设置电路、单片机、显示电路等构成。单片机是集成IC芯片,只需根据实际设计要求选型。其他部分都需要根据应用要求和性能指标自行设计。 二.系统方案 1.硬件设计思路 00-99加计数器硬件系统主要由AT89S52单片机,数码管,电容,电源等元件组成,利用单片机的P0口、P1口作为输出端,来控制数码管的显示,通过单片中烧入程序,然后利用 P3.7口作为输入端,通过点动控制实现开关量的控制和计数,然后再通过数码显示器显示出来。通过调试仿真从而实现00-99加计数。 2.软件设计思路 实现00-99计数功能,子程序实现将高低电位转化为数码管的十进制数字,实现手动开关计数。通过手动给脉冲信号,实现计数,再加到99时,在手动给脉冲时,回到初始状态00,从而实现00到99加计数。 3.系统框图

按键加减计数(数码管显示,中断方式)

按键加减计数(数码管显示,中断方式) (合肥工大周宁) 课程设计对象 A08电气工程及自动化本科班,共38+39人。 一.课程设计的任务和目的 本课程设计要求学生在1.5周内编程设计一个单片机应用系统,完成设计报告。通过设计实践,使学生掌握单片机的应用特点、编程方法,学会单片机实际应用系统的设计开发过程及设计报告的规范书写,为毕业设计打下良好的基础。 二.课程设计内容及要求 (一)、课程设计题目可从如下方面参考选择(自己出题的必须经老师批准): 1.单片机在计时控制方面的应用设计。 如:时钟、频率计、彩灯、交通灯 2.单片机在计数控制方面的应用设计。 如:计数器、计分器、抢答器、报警器 3.单片机在运算控制方面的应用设计。 如:密码锁、计算器、乒乓球游戏机 4.单片机在波形发生方面的应用设计。 如:电子琴、音乐盒、调光LED灯 5.单片机在通讯技术方面的应用设计。 如:双机通讯、PC可控单片机系统、对话机器人 6.单片机A/D转换技术方面的应用设计。 如:电压表、温度计、照度计 (二)、具体要求: 1.完成控制程序的编制,能演示系统功能。 2.完成设计并上交纸质设计报告1份。 3.系统功能要求及设计报告格式范文见附件1、附件2。 三.时间与学时安排

1.课程设计时间在本学期第16-17周(共1.5周)。 2.总体教学时间安排: 课程设计成绩按学生设计报告按五级评分制综合评定。 六.评分标准 1.设计报告:按版面格式、文字语法、观点正确性、图表规范性等综合评分。 机电工程学院电气系 胡佳文 2010年12月12日

附件1:单片机原理与应用课程设计功能要求 1.单片机在计时控制方面应用的设计功能要求: (1)时钟能计时,可校准时间,至少有一种附带功能(如秒表、定时器或闹钟功能);(2)频率计能测试并显示1HZ—10KHZ频率、5V的方波,可附带方波发生器功能;(3)彩灯要求控制16个LED有两种以上闪烁方式;(4)交通灯要求模拟控制十字路口交通信号,有倒计时显示。 2.单片机在计数控制方面应用的设计功能要求: (1)计数器利用外中断通过对传感器送来的方波计数的方法实现对产品线上的产品计数,用数码管显示计数结果;(2)计分器设计一个用于竞技比赛的计分牌,通过按钮设定对双方的比分加减,可附加定时功能;(3)抢答器要求有4路以上,可以设定限时等功能;(4)报警器要求能对8路以上的通道进行巡检,进行声光报警和显示通道号。 3.单片机在运算控制方面应用的设计功能要求: (1)密码锁要求可以通过键盘设定6位以上的密码,密码正确才开锁,设置时可显示密码,开锁时不显示;(2)计算器要求能带小数进行加减乘除计算;(3)乒乓球游戏机设计一个用LED灯模拟乒乓球运动过程的游戏,以按键代表球拍,以亮着的小灯代表乒乓球,可附带计分功能。 4.单片机在波形发生方面的应用设计功能要求: (1)设计一个简易电子琴,可以显示音符;(2)音乐盒能播放两首以上乐曲,可以显示乐曲编号;(3)LED调光灯,单片机利用PWM原理对8个LED进行4级亮度调节,按钮方式进行调节。 5.单片机在通讯技术方面的应用设计功能要求: (1)设计制作一个两个单片机系统相互通讯的模型,使用UART或SPI,可按钮操作,数码管显示;(2)PC可控系统,通过电脑键盘或鼠标操作,至少可以发送8种以上控制命令,单片机执行并数码管显示;(3)对话机器人,可以通过电脑终端与单片机进行文字对话,10句以上,基本符合逻辑。6.单片机A/D转换技术方面的应用设计功能要求: (1)电压计设计一个可以同时测量1-8路的直流电压,并能轮流显示读数值,测量量程在3V内;(2)温度计用数码管能显示实时的室内温度,要求能设定报警温度;(3)照度计用数码管能显示实时的室内亮度,要求能设定报警照度。

51单片机定时器数码管30秒倒计时(三个按键控制开始暂停复位)

51单片机定时器数码管30秒倒计时(带三个按键控制开始,暂停,复位) 程序: #include "" unsigned char code led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char code addr[2]={0xef,0xdf}; unsigned char xx[2]; unsigned char time=30; unsigned char flag=0; void delay(void); void sys(void) { TMOD=0x01; TH0=(65536 - 50000) / 256; TL0=(65536 - 50000) % 256; ET0=1; TR0=1; EA=1; EX0=1; IT0=1; } void ftimer0(void) interrupt 1 { static unsigned char cnt; TH0=(65536-50000)/256;

TL0=(65536-50000)%256; cnt++; if(cnt>20) { if(flag==1) { time--; cnt=0; if(time==0) { ET0=0; TR0=0; } } } } void int0(void) interrupt 0 { if(P2_0==0) { flag=1; ET0=1; } else if(P2_1==0) { ET0=0; }

else if(P2_2==0) { time=30; ET0=0; TR0=1; } } void main() { unsigned char a; sys(); for(;;) { for(a=0;a<2;a++) { xx[0]=time/10; xx[1]=time%10; P0=led[xx[a]]; P1=addr[a]; delay(); P1=0xff; } } } void delay(void)

数码管加减计数(按键消抖)

module jjf(add,duce,clk,RST,out); input add,duce,clk,RST; output [6:0] out; reg [3:0] e; reg [6:0] out; reg [25:0] d;reg a,b; initial begin e=0;end reg add_flag,duce_flag,add_flag_r,duce_flag_r;reg [19:0] cnt; initial begin cnt=20'h00000;e=0;end always @ (posedge clk) begin cnt <= cnt+1'b1; if(cnt>=20'hfffff) cnt<=0; end always @ (posedge clk) begin add_flag_r<=add_flag; duce_flag_r<=duce_flag; if(cnt==20'hfffff) begin add_flag<=add; duce_flag<=duce; end end wire add_f=(~add_flag)&&add_flag_r; wire duce_f=(~duce_flag)&&duce_flag_r; always @(posedge clk) begin if(RST) begin if(add_f) begin if(e<9) e<=e+1; else e<=9; end if(duce_f) begin if(e>0) e<=e-1; else e<=0; end end else e<=0; case(e) 4'b0001: out<=7'b1111001;//1

相关文档
最新文档