单片机计数器课程设计报告

单片机计数器课程设计报告
单片机计数器课程设计报告

09级单片机课程设计报告

设计题目:

项目二数字计数器的设计

院系:信息与电气工程学院

数字计数器的课程设计

目录

第一章:目的、设计要求

一、绪论 (3)

二、设计要求 (3)

第二章:设计方案

一、系统设计 (3)

二、功能设计 (4)

第三章:硬件设计

1、单片机 (4)

2、LED数码管 (6)

3、按键(模拟数字脉冲) (6)

第四章:软件设计

1、程序流程图 (7)

2、设计程序 (7)

第五章:系统调试

1、硬件调试 (13)

2、软件调试 (13)

第六章:软件实用方法总结

软件实用方法总结 (13)

参考文献 (32)

摘要:本文介绍了采用STC12C5A60S2单片机实现数字计数器的实用电路,实现了

利用外部中断,对外部矩形脉冲信号计数,并在LED数码管上显示,设计了按键

控制来模拟外部矩形脉冲。已经过软件和硬件测试,并达到设计项目二要求。

关键字:单片机;LED数码管;外部中断;按键;软件

第一章目的、设计要求

一、课程设计目的:

1、通过单片机课程设计,熟练C语言的编程方法,将理论联系到实践中去,

提高我们的动脑和动手的能力。

2、通过数字计数器系统的设计,掌握led数码管及外部中断的使用方法。

3、通过此次课程设计,熟练掌握电路板焊接技能,及keil编程软件、stc单

片机下载程序的使用方法。

二、设计要求

(1)掌握硬件原理基础上,编写C程序对外部矩形脉冲进行计数。

(2)在数码管上显示计数。

(3)在电路板上的现有电路编写程序来实现功能。

(4)调试,并且完成课程设计报告。

最终实现: 键盘输入模拟外部中断,对外部矩形脉冲信号计数,并在LED数

码管上显示。

第二章设计方案

一、系统设计

1、数字计数器的系统框图如图1所示。

图1

2、主要由3个模块组成:LED数码管显示、按键模拟外部中断、单片机最小工作电路(包括复位,电源VCC,接地GND,晶振电路等);

二、功能设计:

1、通过电源总开关实现系统通断电;

2、上电初始时左右两边四位LED数码管个位显示0,通过按键S2模拟外部脉冲1,按键S3模拟外部脉冲0,具体如下:

1)、按下按键S2,右边四位LED显示加1递增,并向前进位,最多计数到9999;

2)、按下按键S3,左边四位LED显示加1递增,并向前进位,最多计数到9999;

3、通过“复位”键使LED回到初始状态;

第三章硬件设计

1、单片机

简介:

单片微型机计算机是微型计算机的一个重要分支,也是具有生命力的机种,单片微型计算机简称单片机。特别适用于控制领域,故又称为微控制器。

通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件;中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部部件设备和结合,便可成为一个单片机控制系统。

本课程设计所采用的单片机型号是STC12C5A60S2,其管脚图如图2所示。

图2

该系列单片机正常工作所需的最小应用电路如图3所示:

图3

此次课程设计所用电路板的单片机的最小应用电路如图4:

图4

2、LED数码管

本课程LED数码管显示部分的硬件原理图如图5所示。

图5

其中

1. LED数码管采用共阴极接法,故要使LED数码管点亮应使对应的段的正极为高电平,显示数字对应8位段码如下:

数字0 1 2 3 4 5 6 7 8 9

段码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07, 0x7f, 0x6f

2. 采用74H573数字锁存器,锁存数据;

3. WELA接单片机的P2^6口,通过高电平使能74H573锁存器控制8个数码管要显示的哪一个;

4. DULA接单片机的P2^7口,通过高电平使能74H573锁存器控制每个数码管要显示的段码;

5.PA00--PA07分别接单片机的P0^0 ~ P0^7口,这样就可以通过控制单片机P0口的值来控制数码管。

3、按键(模拟数字脉冲)

通过键盘连接,模拟数字脉冲。本课程设计电路板的按键原理图如图6所示:

图6

其中按键S2,KEY1接单片机的P3^3/INT1引脚;

按键S3,KEY2接单片机的P3^2/INT0引脚;

按键按下时,单片机的引脚由高电平变成低电平,由此来模拟外部脉冲,可分低电平及下降沿两种触发方式计数。

第四章软件设计

1、程序流程图

程序流程图如图7所示。

此流程图采用流程图绘制软件——亿图绘制。

图7

2、设计程序

先定义头文件key.h 以方便程序编写及改动,

一、头文件程序如下:

/******************************************************** key.h 包含1.按键等端口定义

2.数据类型定义

3.延时函数

**********************************************************/ #ifndef _KEY_H_

#define _KEY_H_

#define uchar unsigned char //定义数据类型

#define uint unsigned int

/********************端口定义**************************/

#define led P1 // P1口接led

sbit dula = P2^7;

sbit wela = P2^6;

/**********定义按键及按键要实现的功能******************/

sbit key1=P3^3;

sbit key2=P3^4;

sbit key3=P3^5;

/******************定义变量****************************/

// 此表为LED 的字模// 0 1 2 3 4 5 6 7 8 9 //共阴极

uchar code table[] = {

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00

};

/************延时函数*********/

void delay(uint x)

{

uint i,j;

for(i=x;i>0;i--) //i=x ,大约延时X毫秒即Xms,

for(j=100;j>0;j--); //晶振采用11.059MHZ时值设为110,

} //由于采中的为22MHZ故值应按情况而定

#endif

二、主程序led.c如下:

/******************************************************************** ***********

* 标题: 试验4位数码管上显示外部中断计数*

* P3.2和P3.3外部中断输入由两个四位数码管分别显示计数

*

* 连接方法:P3.2外部中断0输入接按键S3

P3.3外部中断1输入接按键S2 *

程序完成时间:2012年11月20日晚已经过测试

测试时间:2012年11月20日晚

********************************************************************* ***********/

#include

#include "key.h"

uint num0,num1; //uint 最多计2^16

//uchar num0,num1; //uchar最多计2^8次=256

uint LedOut[8];

uchar ledw[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //此表为第几个led数码管亮的代码

//1111 1110 , 1111 1101 ,1111 1011,1111 0111, 即7f, bf, df , ef

//1110 1111 ,1101 1111, 1011 1111,0111 1111,即f7, fb, fd , fe

//7f, bf, df , e f

void delay(uint);

void display();

void main()

{

num0=0; //外部中断0计数

num1=0; //外部中断1计数

// IT0=0; //低电平触发

IT0=1; //下降沿触发

EX0=1;

//IT1=0; //低电平触发

IT1=1; //下降沿触发

EA=1; //开总中断

EX1=1; //开外部中断1

while(1)

{

display();

}

}

/********************************************************

* 显示函数*

********************************************************/

void display()

{

uchar i=1;

{

if (num1<10) //外部中断1计数

{

LedOut[3]=table[16]; //千位

LedOut[2]=table[16];//num%1000/100]&0x7f; //百位/100];

LedOut[1]=table[16];//num%100/10]; //十位

LedOut[0]=table[num1%10]; //个位}

else if (num1>9&&num1<100)

{

LedOut[3]=table[16]; //千位

LedOut[2]=table[16];//num%1000/100]&0x7f; //百位/100];

LedOut[1]=table[num1%100/10]; //十位

LedOut[0]=table[num1%10]; //个位}

else if (num1>99&&num1<1000)

{

LedOut[3]=table[16]; //千位

LedOut[2]=table[num1%1000/100]&0x7f; //百位/100];

LedOut[1]=table[num1%100/10]; //十位

LedOut[0]=table[num1%10]; //个位}

else if(num1>999&&num1<10000)

{

LedOut[3]=table[num1%10000/1000]; //千位

LedOut[2]=table[num1%1000/100]&0x7f; //百位/100];

LedOut[1]=table[num1%100/10]; //十位

LedOut[0]=table[num1%10]; //个位}

{

if (num0<10) //外部中断0计数

{

LedOut[7]=table[16]; //千位

LedOut[6]=table[16];//num%1000/100]&0x7f; //百位/100];

LedOut[5]=table[16];//num%100/10]; //十位

LedOut[4]=table[num0%10]; //个位

}

else if (num0>9&&num0<100)

{

LedOut[7]=table[16]; //千位

LedOut[6]=table[16];//num%1000/100]&0x7f; //百位/100];

LedOut[5]=table[num0%100/10]; //十位

LedOut[4]=table[num0%10]; //个位

}

else if (num0>99&&num0<1000)

{

LedOut[7]=table[16]; //千位

LedOut[6]=table[num0%1000/100]; //百位/100];

LedOut[5]=table[num0%100/10]; //十位

LedOut[4]=table[num0%10]; //个位

}

else if(num1>999&&num1<10000)

{

LedOut[7]=table[num0%10000/1000]; //千位

LedOut[6]=table[num0%1000/100]; //百位/100];

LedOut[5]=table[num0%100/10]; //十位

LedOut[4]=table[num0%10]; //个位

}

}

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

{

wela=1; //位码

P0=ledw[i];//0xef; //1111 0111 ef

wela=0;

dula=1; //段码

P0 = LedOut[i];

dula=0;

delay(25);

}

}

/********************************************************

* INT0中断函数*

********************************************************/

void counter0(void) interrupt 0 using 1

{

EX0=0;

num0++;

EX0=1;

}

/********************************************************

* INT1中断函数*

********************************************************/

void counter1(void) interrupt 2 using 2

{

EX1=0;

num1++;

EX1=1;

}

/********************************************************/

第五章系统调试

1、硬件调试

检测各硬件模块是否断路或者短路,根据电路图查看接线线路是否正确。检测接线无误后,接入电源,测量各芯片的供电电压,检查无误后,进入软件调试阶段。

2、软件调试

首先使用keil编译好程序,生成HEX文件,安装好PL2303驱动程序,使用STC-ISP下载软件,将程序程序到单片机后,按下开关,两边LED数码管均显示0。

接下来将按键S2,KEY1接单片机的P3^3/INT1引脚;按键S3,KEY2接单片机的P3^2/INT0引脚;

按下S3按键可看到左边四个LED数码管加1计数变换;按下S2按键可看到右边四个LED数码管加1计数变换。

按下复位S1,可看到8位LED数码管恢复初始状态即归零。

调试完成后按关停止开关可以使电路断电,LED数码管熄灭。

第六章软件实用方法总结

软件实用方法总结:

一、关于keil官方软件中新建项目时选择单片机型号中无STC型号的单片机的解决方案:

数据库替换法(STC官网https://www.360docs.net/doc/de15848047.html,/方法):

操作步骤:

1.先备份KEIL安装目录UV3(KEIL3版本是UV3,KEIL4是UV4,下同)文件夹下面的UV3.CDB(或者UV4.CDB)文件,然后用STC官网提供的同名的CDB文件(下载压缩包内的UV3.cdb已经集合了 keil自带的数据库+STC数据库)代替。

注:没有UV4.CDB的话,可以将“UV2.CDB(或者UV3.CDB)”改名成“UV4.CDB”来使用。

步骤1完成后新建工程是如图8所示:

图8

2. 将压缩包内的“STC”文件夹(已经存放了STC所有系列的头文件)放到KEIL 安装目录Keil\C51\INC目录下。

第2步骤的作用:可以单击右键快捷插入STC对应的头文件。

如图9所示:

图9

本课程设计所采用的STC12C5A60S2系列单片机的头文件“STC12C5A.H”如下:

/*------------------------------------------------*/

/* --- 宏晶科技 STCMCU

---------------------------*/

/* --- Mobile: (86)139********

-------------------*/

/* --- Fax: 86-755-82944243

----------------------*/

/* --- Tel: 86-755-82948412

----------------------*/

/* --- Web: https://www.360docs.net/doc/de15848047.html,

-----------------------*/

/* 适用于: STC12C5AxxX STC12LE5AxxX

------------*/

/* ------- STC12C5AxxCPP STC12LE5AxxCPP

----------*/

/* ------- STC12C5AxxAD STC12LE5AxxAD

----------*/ /* ------- STC12C5AxxS2 STC12LE5AxxS2

----------*/

/* ------- IAP12C5Axx IAP12LE5Axx

----------*/

/* ------- IAP12C5AxxCPP IAP12LE5AxxCPP

----------*/

/* ------- IAP12C5AxxAD IAP12LE5AxxAD

----------*/

/* ------- IAP12C5AxxS2 IAP12LE5AxxS2

----------*/

/*------------------------------------------------*/

#ifndef __STC12C5A_H__

#define __STC12C5A_H__

/////////////////////////////////////////// ///////////////////////////////////////////

//////////////////////////

sfr PSW = 0xd0; //程序状态

字 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述

CY AC F0 RS1 RS0 OV F1 P

//初始值

=0000,0000 0 0 0 0 0 0 0 0

sbit CY = PSW^7; //进位标志

sbit AC = PSW^6; //辅助进位标

sbit F0 = PSW^5; //用户标志

sbit RS1 = PSW^4; //寄存器组选

择位1

sbit RS0 = PSW^3; //寄存器组选

择位0

sbit OV = PSW^2; //溢出标志

sbit P = PSW^0; //ACC的偶校

验位

/////////////////////////////////

sfr ACC = 0xe0; //累加器

Bit7 Bit6 Bit5 Bit4 Bit3

Bit2 Bit1 Bit0

//初始值

=0000,0000 0 0 0 0 0 0 0 0

sbit ACC7 = ACC^7; //累加器第7

sbit ACC6 = ACC^6; //累加器第6

sbit ACC5 = ACC^5; //累加器第5

sbit ACC4 = ACC^4; //累加器第4

sbit ACC3 = ACC^3; //累加器第3

sbit ACC2 = ACC^2; //累加器第2位

sbit ACC1 = ACC^1; //累加器第1

sbit ACC0 = ACC^0; //累加器第0

/////////////////////////////////

sfr B = 0xf0; //B寄存器

Bit7 Bit6 Bit5 Bit4 Bit3

Bit2 Bit1 Bit0

//初始值

=0000,0000 0 0 0 0 0 0 0 0

/////////////////////////////////

sfr SP = 0x81; //堆栈指针

Bit7 Bit6 Bit5 Bit4 Bit3

Bit2 Bit1 Bit0

//初始值

=0000,0111 0 0 0 0 0 1 1 1

/////////////////////////////////

sfr DPL = 0x82; //数据指针

低字节 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//初始值

=0000,0000 0 0 0 0 0 0 0 0

/////////////////////////////////

sfr DPH = 0x83; //数据指针

高字节 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//初始值

=0000,0000 0 0 0 0 0 0 0 0

///////////////////////////////////////////

///////////////////////////////////////////

//////////////////////////

sfr PCON = 0x87; //电源控制

寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述

SMOD SMOD0 LVDF POF GF1 GF0 PD IDL

//初始值

=0011,0000 0 0 1 1 0 0 0 0

#define SMOD 0x80 //串口波特率

倍速位,置1可使波特率快1倍

#define SMOD0 0x40 //FE/SM0选择位,0:SCON.7为SM0 1:SCON.7为FE

#define LVDF 0x20 //低压检测中

断请求位,由硬件置1,需由软件清0

#define POF 0x10 //上电复位标

志位,上电时由硬件置1,需由软件清0

#define GF1 0x08 //通用标志位

1

#define GF0 0x04 //通用标志位

#define PD 0x02 //掉电控制位,

写1可以使MCU进入PowerDown模式

#define IDL 0x01 //空闲控制位,

写1可以使MCU进入Idle模式

/////////////////////////////////

sfr WAKE_CLKO = 0x8f; //掉电唤醒/

时钟输出控制 Bit7 Bit6 Bit5 Bit4

Bit3 Bit2 Bit1 Bit0

//位描述PCAWAKEUP RXDPINIE T1PINIE T0PINIE LVD_WAKEUP BRTCLKO T1VLKO T0CLKO

//初始值

=0000,0000 0 0 0 0 0 0 0 0

#define PCAWAKEUP 0x80 //允许PCA的

上升沿/下降沿中断唤醒掉电MCU

#define RXD_PIN_IE 0x40 //允许RXD(P3.0)下降沿置位RI中断时唤醒掉电MCU(必须

打开相应中断)

#define T1_PIN_IE 0x20 //允许

T1(P3.5)下降沿置位T1中断时唤醒掉电MCU(必须

打开相应中断)

#define T0_PIN_IE 0x10 //允许

T0(P3.4)下降沿置位T0中断时唤醒掉电MCU(必须

打开相应中断)

#define LVD_WAKEUP 0x08 //允许

LVD(P4.6)的低压检测中断唤醒掉电MCU(必须打开

相应中断)

#define BRTCLKOEN 0x04 //打开P1.0

脚的BRT时钟溢出脉冲,输出的时钟频率为1/2倍

的BRT溢出率

#define T1CLKOEN 0x02 //打开P3.5

脚的定时器1时钟溢出脉冲,输出的时钟频率为1/2

倍的T1溢出率

#define T0CLKOEN 0x01 //打开P3.4

脚的定时器0时钟溢出脉冲,输出的时钟频率为1/2

倍的T0溢出率

/////////////////////////////////

sfr CLK_DIV = 0x97; //时钟分频

寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述

- - - - -

CLKS2 CLKS1 CLKS0

//初始值

=xxxx,x000 x x x x x 0 0 0

#define FOSCD1 0x00 //系统时钟为Fosc

#define FOSCD2 0x01 //系统时钟为Fosc/2

#define FOSCD4 0x02 //系统时钟为Fosc/4

#define FOSCD8 0x03 //系统时钟为Fosc/8

#define FOSCD16 0x04 //系统时钟为Fosc/16

#define FOSCD32 0x05 //系统时钟为

Fosc/32

#define FOSCD64 0x06 //系统时钟为Fosc/64

#define FOSCD128 0x07 //系统时钟为Fosc/128

/////////////////////////////////

sfr BUS_SPEED = 0xa1; //数据总线速度控制器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 - - ALES1 ALES0 - RWS2 RWS1 RWS0

//初始值=xx10,x011 x x 1 0 x 0 1 1

#define ALES1 0x20 //P0地址建立时间和保持时间到ALE 信号的下降沿的时钟数 #define ALES0 0x10

//ALES1/ALES0=0/0:1个时钟 0/1:2个时钟 1/0:3个时钟 1/1:4个时钟

#define RWS2 0x04 //MOVX 指令的时钟数

#define RWS1 0x02

//RWS2/RWS1/RWS0=000:1个时钟 001:2个时钟 010:3个时钟 011:4个时钟

#define RWS0 0x01 // 100:5个时钟 101:6个时钟 110:7个时钟 111:8个时钟

/////////////////////////////////

sfr WDT_CONTR = 0xc1; //看门狗定时器控制器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 WDT_FLAG - EN_WDT CLR_WDT IDL_WDT PS2 PS1 PS0

//初始值=0x00,0000 0 x 0 0 0 0 0 0

#define WDT_FLAG 0x80 //看门狗复位标志,当看门狗溢出产生复位后,硬件自动置1,需要由软件清0

#define EN_WDT 0x20 //软件使能看门狗,打开后不能用软件的方式关闭

#define CLR_WDT 0x10 //清看门狗定时器

#define IDLE_WDT 0x08 //IDLE 模式下,看门狗定时器是否继续计时

///////////////////////////////////////////

/////////////////////////////////////////////////////////////////////

sfr AUXR = 0x8e; //辅助寄存

器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 T0x12 T1x12 UM0x6 BRTR S2SMOD BRTx12 EXTRAM S1BRS

//初始值=0000,0000 0 0 0 0 0 0 0 0

#define T0x12 0x80 //定时器0时钟控制,0:Fosc/12(传统的12分频) 1:Fosc/1(1T 模式,不分频,即12倍于传统速度)

#define T1x12 0x40 //定时器1时钟控制,0:Fosc/12(传统的12分频) 1:Fosc/1(1T

模式,不分频,即12倍于传统速度)

#define UR0x6 0x20 //串口模式0的时钟控制,0:Fosc/12(传统的12分频) 1:Fosc/2(2分频,,即6倍于传统速度)

#define BRTR 0x10 //独立波特率发生器启动控制位,1:启动独立波特率发生器 0:停止独立波特率发生器

#define S2SMOD 0x08 //串口2波特率倍速位,置1可使串口2的波特率快1倍

#define BRTx12 0x04 //独立波特率发生器时钟控制,0:Fosc/12(传统的12分频) 1:Fosc/1(1T 模式,不分频,即12倍于传统速度) #define EXTRAM 0x02 //内部扩展

RAM 禁能位,0:内部扩展RAM 有效 1:禁用内部扩展

RAM

#define S1BRS 0x01 //串口1的波特率发生器选择位,0:定时器1 1:独立波特率发生器(注意串口2只能够使用独立波特率发生器)

/////////////////////////////////

sfr AUXR1 = 0xa2; //辅助寄存器1 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 - PCA_P4 SPI_P4 S2_P4 GF2 ADRJ - DPS

//初始值=x000,00x0 x 0 0 0 0 0 x 0

#define PCA_P4 0x40 //将PCA 口映射到P4口,0:ECI(P1.2)CEX0(P1.3)CEX1(P1.4) 1:ECI(P4.1)CEX0(P4.2)CEX1(P4.3)

#define SPI_P4 0x20 //将SPI 口映射到P4

口,0:SCLK(P1.7)MISO(P1.6)MOSI(P1.5)SS(P1.4) 1:SCLK(P4.3)MISO(P4.2)MOSI(P4.1)SS(P4.0) #define S2_P4 0x10 //将串口2映射到P4口,0:RXD2(P1.2)TXD2(P1.3) 1:RXD2(P4.2)TXD2(P4.3)

#define GF2 0x08 //通用标志位2

#define ADRJ 0x04 //ADC 结果调整,0:{ADC_RES[9876,5432],ADC_RESL[----,--10]}

1:{ADC_RES[----,--98],ADC_RESL[7654,3210]} #define DPS 0x01 //DPTR0/DPTR1选择位,0:DPTR0 1:DPTR1

////////////////////////////////////////////////////////////////////////////////////////////////////////////////

sfr P0 = 0x80; //I/O 端口0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0

//初始值=1111,1111 1 1 1 1 1 1 1 1

sbit P07 = P0^7; //I/O 口P0.7 sbit P06 = P0^6; //I/O 口P0.6 sbit P05 = P0^5; //I/O 口P0.5 sbit P04 = P0^4; //I/O 口P0.4 sbit P03 = P0^3; //I/O 口P0.3

sbit P02 = P0^2; //I/O 口P0.2 sbit P01 = P0^1; //I/O 口P0.1 sbit P00 = P0^0; //I/O 口P0.0

/////////////////////////////////

sfr P1 = 0x90; //I/O 端口0 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0

//初始值=1111,1111 1 1 1 1 1 1 1 1

sbit P17 = P1^7; //I/O 口P1.7 sbit P16 = P1^6; //I/O 口P1.6 sbit P15 = P1^5; //I/O 口P1.5 sbit P14 = P1^4; //I/O 口P1.4 sbit P13 = P1^3; //I/O 口P1.3 sbit P12 = P1^2; //I/O 口P1.2 sbit P11 = P1^1; //I/O 口P1.1 sbit P10 = P1^0; //I/O 口P1.0

sbit ADCIN7 = P1^7; //ADC 通道7的模拟信号输入脚

sbit ADCIN6 = P1^6; //ADC 通道6的模拟信号输入脚 sbit ADCIN5 = P1^5; //ADC 通道5

的模拟信号输入脚

sbit ADCIN4 = P1^4; //ADC 通道4

的模拟信号输入脚

sbit ADCIN3 = P1^3; //ADC 通道3的模拟信号输入脚

sbit ADCIN2 = P1^2; //ADC 通道2的模拟信号输入脚

sbit ADCIN1 = P1^1; //ADC 通道1的模拟信号输入脚

sbit ADCIN0 = P1^0; //ADC 通道0的模拟信号输入脚

sbit SPISCLK = P1^7; //SPI 总线的时钟脚

sbit SPIMISO = P1^6; //SPI 总线的主出从入脚

sbit SPIMOSI = P1^5; //SPI 总线的主入从出脚

sbit SPISS = P1^4; //SPI 总线的从机选择脚

sbit CEX1 = P1^4; //比较/捕获/PWM1外部引脚

sbit CEX0 = P1^3; //比较/捕获/PWM0外部引脚

sbit ECI = P1^2; //比较/捕获/PWM 模块的外部时钟输入脚(最大值为Fosc/2)

sbit TXD2 = P1^3; //串口2数据输出脚

sbit RXD2 = P1^2; //串口2数据输入脚

sbit BRTCLKO = P1^0; //BRT 时钟溢出脉冲输出脚

/////////////////////////////////

sfr P2 = 0xa0; //I/O 端口2 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

//初始值=1111,1111 1 1 1 1 1 1 1 1

sbit P27 = P2^7; //I/O 口P2.7 sbit P26 = P2^6; //I/O 口P2.6 sbit P25 = P2^5; //I/O 口P2.5 sbit P24 = P2^4; //I/O 口P2.4 sbit P23 = P2^3; //I/O 口P2.3 sbit P22 = P2^2; //I/O 口P2.2 sbit P21 = P2^1; //I/O 口P2.1 sbit P20 = P2^0; //I/O 口P2.0

/////////////////////////////////

sfr P3 = 0xb0; //I/O 端口3 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0

//位描述 P3.7 P3.6 P3.5 P3.4 P3.3 P3.2 P3.1 P3.0

//初始值=1111,1111 1 1 1 1 1 1 1 1

sbit P37 = P3^7; //I/O 口P3.7 sbit P36 = P3^6; //I/O 口P3.6 sbit P35 = P3^5; //I/O 口P3.5 sbit P34 = P3^4; //I/O 口P3.4 sbit P33 = P3^3; //I/O 口P3.3 sbit P32 = P3^2; //I/O 口P3.2 sbit P31 = P3^1; //I/O 口P3.1 sbit P30 = P3^0; //I/O 口P3.0

sbit RXD = P3^0; //串口1的数据接收口

sbit TXD = P3^1; //串口1的数据发送口 sbit INT0 = P3^2; //外部中断0

的信号输入口

sbit INT1 = P3^3; //外部中断1的信号输出口

sbit T0 = P3^4; //定时器0的外部信号输入口

sbit T1 = P3^5; //定时器1的外部信号输入口

sbit WR = P3^6; //外部数据存

单片机课程设计 简易计算器的设计

目录 摘要 (1) 绪论 (1) 1.设计要求及功能分析 (1) 1.1 设计要求 (1) 1.2 基本功能 (2) 2.设计方案 (2) 2.1 硬件部分设计方案 (2) 2.1.1 单片机部分 (2) 2.1.2 按键部分 (2) 2.1.3 显示部分 (2) 2.2 软件部分设计方案 (2) 3.系统的硬件总体设计 (4) 3.1 系统的总体硬件设计 (4) 3.2 键盘连接电路 (4) 3.3 显示屏连接电路 (5) 3.4 单片机芯片AT89C51 (6) 3.5 外接电路 (7) 4.系统的软件总体设计 (8) 4.1 键盘识别程序设计 (8) 4.2 显示程序 (11) 4.3 运算程序 (11) 5.元器件清单及程序清单 (12) 5.1 元器件清单 (12) 5.2 程序清单 (12) 6.软件仿真 (18) 6.1 仿真验证 (18) 6.2 性能分析 (20) 6.3 出现故障及其原因 (20) 6.4 解决方法 (20) 结论 (20) 参考文献 (21) 致谢 (21) 附录PCB图 (22)

简易计算器的设计 学生:李飞马鹏超舒宏超 指导老师:王孝俭 摘要:单片机是指一个集成在一块芯片上的完整计算机系统。尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:CPU、内存、内部和外部总线系统,目前大部分还会具有外存。同时集成诸如通讯接口、定时器,实时时钟等外围设备。而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。单片机内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也是低的,一般不超过10元即可,用它来做一些控制电器一类不是很复杂的工作足矣了。我们现在用的全自动滚筒洗衣机、排烟罩、VCD等等的家电里面都可以看到它的身影!它主要是作为控制部分的核心部件。它是一种在线式实时控制计算机,在线式就是现场控制,需要的是有较强的抗干扰能力,较低的成本,这也是和离线式计算机的(比如家用PC)的主要区别。单片机比专用处理器最适合应用于嵌入式系统,因此它得到了最多的应用。事实上单片机是世界上数量最多的计算机。现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。而个人电脑中也会有为数不少的单片机在工作。汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的综合,甚至比人类的数量还要多。 关键词:单片机、计算器、控制电路、仿真。 绪论 设计要求掌握数码管移位动态扫描显示的编程方法,掌握矩阵扫描的编程方法,掌握数据在内部运算的编程方法。设计任务实现最大8位正整数加、减、乘、除,具备清零、等于功能,16个按键功能依次为:数字0、数字1、数字2、数字3、数字4、数字5、数字6、数字7、数字8、数字9、清零、等于、加、减、乘、除。 1.设计要求及功能分析 1.1设计要求: 本次单片微型计算机与接口技术课程设计做的是利用C51单片机为主体的计算器,实现了简单的加、减、乘、除功能。采取的是键盘输入和液晶显示屏的输出结果显示。主要硬件构成部分由四个,一个AT89C51单片机芯片,一个液晶显示屏,一个4*4键盘和一个排阻(10K)做P0口的上拉电阻,可以实现16位的数值操作计算。 1.2基本功能: 首先,计算器可现实8位数字,开机运行时,只有数码管最低位显示为“0”,其他位全部不显示;

60进制计数器课程设计报告

电子技术基础实验 课程设计 60进制计数器

一、实验目的 (一)掌握中规模集成计数器74LS161的引脚图和逻辑功能。 (二)熟悉555集成定数器芯片的引脚图。 (三)利用74LS161和555定时器构成60进制计数器。 (四)在Multisim软件中仿真60进制计数器。 二、实验容 (一)集成计数器74LS161逻辑功能验证。 (二)用555定时器构成多谐振荡器。 (三)用两片74LS161和555定时器构成60进制计数器。 三、集成计数器介绍 (一)集成计数器74LS161管脚介绍 74LS161是4位二进制同步加法计时器。图1为它的管脚排列图,集成芯片74LS161的CLR是异步清零端(低电平有效),LOAD是异步预置数控制端(低电平有效)。CLK是时钟脉冲输入端,RCO是进位输出端,ENP、ENT是计数器使能端,高电平有效。A、B、C、D是数据输入端; QA、QB、QC、QD是数据输出端。

图1 74LS161管脚排列图 (二)集成计数器74LS161功能介绍 由表1可知,74LS161具有以下功能: 1.异步清零。当CLR=0时,无论其他各输入端的状态如何,计数器均被直接置“0”。 2.同步预置数。当CLR=1、LOAD=0且在CP上升沿作用时,计数器将ABCD同时置入QA、QB、QC、QD,使QA、QB、QC、QD=ABCD。 3.保持(禁止)。CLR=LOAD=1且ENP、ENT=0时,无论有无CP脉冲作用,计数器都将保持原有的状态不变(停止计数)。 4.计数。CLR=LOAD=ENP=ENT=1时,74LS161处于计数状态。 表1 74LS161功能表

计算器课程设计报告

课设报告 福建工程学院软件学院 题目:汇编计算器 班级: 1301 姓名 学号: 指导老师: 日期:

目录 1、设计目的 (3) 2、概要设计 (3) 2.1 系统总体分析 (3) 2.2 主模块框图及说明 (3) 3、详细设计 (4) 3.1 主模块及子模块概述 (4) 3.2各模块详运算 (4) 4、程序调试 (7) 4.1 运行界面分析 (7) 算法分析 (7) 4.2 调试过程与分析 (9) 5、心得体会 (11) 5.1 设计体会 (11) 5.2 系统改进 (11) 附录: (11)

1、设计目的 本课程设计是一次程序设计方法及技能的基本训练,通过实际程序的开发及调试,巩固课堂上学到的关于程序设计的基本知识和基本方法,进一步熟悉汇编语言的结构特点和使用,达到能独立阅读、设计编写和调试具有一定规模的汇编程序的水平。 2、概要设计 用8086汇编语言编写一个能实现四则混合运算、带括号功能的整数计算器程序。程序能实现键盘十进制运算表达式的输入和显示(例如输入:“1+2*(3-4)”),按“=”后输出十进制表示的运算结果。 2.1 系统总体分析 在8086的操作环境下,该计算器分成输入,数据存储,运算功能,输出几个大模块,实现了使用者使用该计算器时输入一个算式,能让系统进行计算。此计算器的实现功能是基本的数学的四则运算,结果范围在0~65535。 2.2 主模块框图及说明 此流程图简要的表现出了所要实现的功能以及一些功能的大概算法,同时也是我编写的一个总体的框架。 程序流程图说明:通过流程图,可以看出程序运行时,首先输出提示语气,当用户输入后,程序根据所输入内容进行判断,通过判断的结果来决定调用哪个功能模块,首要先要要判断的是否为0-9,“+”“-”“*”“/”这些字符,若不是就会报错,实则根据运算符号调用其功能模块完成运算。最后将运算的结果显示在主频幕上,返回主程序,使用户可以重新输入。

定时器实验报告

电子信息工程学系实验报告 课程名称:单片机原理及接口应用Array实验项目名称:51定时器实验实验时间: 班级:姓名:学号: 一、实验目的: 熟悉keil仿真软件、protues仿真软件的使用和单片机定时程序的编写。了解51单片机中定时、计数的概念,熟悉51单片机内部定时/计数器的结构与工作原理。掌握中断方式处理定时/计数的工作过程,掌握定时/计数器在C51中的设置与程序的书写格式以及使用方法。 二、实验环境: 软件:KEIL C51单片机仿真调试软件,proteus系列仿真调试软件 三、实验原理: 1、51单片机定时计数器的基本情况 8051型有两个十六位定时/计数器T0、T1,有四种工作方式。MCS-51系列单片机的定时/计数器有几个相关的特殊功能寄存器: 方式控制寄存器TMOD; 加法计数寄存器TH0、TH1 (高八位);TL0、TL1 (低八位); 定时/计数到标志TF0、TF1(中断控制寄存器TCON) 定时/计数器启停控制位TR0、TR1(TCON) 定时/计数器中断允许位ET0、ET1(中断允许寄存IE) 定时/计数器中断优先级控制位PT0、PT1(中断优IP) 2、51单片机的相关寄存器设置 方式控制寄存器TMOD: TMOD的低四位为T0的方式字,高四位为T1的方式字。TMOD不能位寻址,必须整体赋值。TMOD各位的含义如下: 1. 工作方式选择位M1、M0 3、51单片机定时器的工作过程(逻辑)方式一 方式1:当M1M0=01时,定时器工作于方式1。

T1工作于方式1时,由TH1作为高8位,TL1作为低8位,构成一个十六位的计数器。若T1工作于定时方式1,计数初值为a,晶振频率为12MHz,则T1从计数初值计数到溢出的定时时间为t =(216-a)μS。 4、51单片机的编程 使用MCS-51单片机的定时/计数器的步骤是: .设定TMOD,确定: 工作状态(用作定时器/计数器); 工作方式; 控制方式。 如:T1用于定时器、方式1,T0用于计数器、方式2,均用软件控制。则TMOD的值应为:0001 0110,即0x16。 .设置合适的计数初值,以产生期望的定时间隔。由于定时/计数器在方式0、方式1和方式2时的最大计数间隔取决于使用的晶振频率fosc,如下表所示,当需要的定时间隔较大时,要采用适当的方法,即将定时间隔分段处理。 计数初值的计算方法如下,设晶振频率为fosc,则定时/计数器计数频率为fosc/12,定时/计数器的计数总次数T_all在方式0、方式1和方式2时分别为213 = 8192、216 = 65536和28 = 256,定时间隔为T,计数初值为a,则有 T = 12×(T_all – a)/fosc a = T_all – T×fosc/12 a = – T×fosc/12 (注意单位) THx = a / 256;TLx = a % 256; .确定定时/计数器工作于查询方式还是中断方式,若工作于中断方式,则在初始化时开放定时/计数器的中断及总中断: ET0 = 1;EA = 1; 还需要编写中断服务函数: void T0_srv(void)interrupt 1 using 1 { TL0 = a % 256; TH0 = a / 256; 中断服务程序段} .启动定时器:TR0(TR1)= 1。 四、实验内容过程及结果分析: 利用protues仿真软件设计一个可以显示秒表时间的显示电路。利用实验板上的一位led数码管做显示,利用中断法编写定时程序,控制单片机定时器进行定时,所定时间为1s。刚开始led数码管显示9,每过一秒数码管显示值减一,当显示到0时返回9,依此反复。然后设计00-59的两位秒表显示程序。 (1)实现个位秒表,9-0

单片机课程设计计算器

课程设计说明书 课程设计名称:单片机课程设计 课程设计题目:四位数加法计算器的设计学院名称:电气信息学院 专业班级: 学生学号:

学生姓名: 学生成绩: 指导教师: 课程设计时间:至

格式说明(打印版格式,手写版不做要求) (1)任务书三项的内容用小四号宋体,倍行距。 (2)目录(黑体,四号,居中,中间空四格),内容自动生成,宋体小四号。 (3)章的标题用四号黑体加粗(居中排)。 (4)章以下的标题用小四号宋体加粗(顶格排)。 (5)正文用小四号宋体,倍行距;段落两端对齐,每个段落首行缩进两个字。 (6)图和表中文字用五号宋体,图名和表名分别置于图的下方和表的上方,用五号宋体(居中排)。(7)页眉中的文字采用五号宋体,居中排。页眉统一为:武汉工程大学本科课程设计。 (8)页码:封面、扉页不占页码;目录采用希腊字母Ⅰ、Ⅱ、Ⅲ…排列,正文采用阿拉伯数字1、2、3…排列;页码位于页脚,居中位置。 (9)标题编号应统一,如:第一章,1,,……;论文中的表、图和公式按章编号,如:表、表……;图、图……;公式()、公式()。

课程设计任务书 一、课程设计的任务和基本要求 (一)设计任务(从“单片机课程设计题目”汇总文档中任选1题,根 据所选课题的具体设计要求来填写此栏) 1. 系统通过4x4的矩阵键盘输入数字及运算符。 2. 可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E。 3. 可以进行加法以外的计算(乘、除、减)。 4. 创新部分:使用LCD1602液晶显示屏进行显示,有开机欢迎界面,计算数据与结果分两行显示,支持小数运算。 (二)基本要求 1.有硬件结构图、电路图及文字说明; 2.有程序设计的分析、思路说明; 3.有程序流程框图、程序代码及注释说明; 4.完成系统调试(硬件系统可以借助实验装置实现,也可在Proteus 软件中仿真模拟); 5.有程序运行结果的截屏图片。

单片机实验报告 计算器

单片机原理及其应用实验报告基于51单片机的简易计算器的设计 班级:12电子1班 姓名:金腾达 学号:1200401123 2015年1月6日

摘要 一个学期的51单片机的课程已经随着期末的到来落下了帷幕。“学以致用”不仅仅是一句口号更应该是践行。本设计秉承精简实用的原则,采用AT89C51单片机为控制核心,4X4矩阵键盘作为输入,LCD1602液晶作为输出组成实现了基于51单片机的简易计算器。计算器操作方式尽量模拟现实计算器的操作方式,带有基本的运算功能和连续运算能力。并提供了良好的显示方式,与传统的计算器相比,它能够实时显示当前运算过程和上一次的结果,更加方便用户记忆使用。本系统制作简单,经测试能达到题目要求。 关键词:简易计算器、单片机、AT89C51、LCD1602、矩阵键盘

目录 一、系统模块设计......................................................................................... 错误!未定义书签。 1.1 单片机最小系统 (1) 1.2 LCD1602液晶显示模块 (1) 1.3 矩阵按键模块 (2) 1.4 串口连接模块 (1) 二、C51程序设计 (2) 2.1 程序功能描述及设计思路 (2) 2.1.1按键服务函数 (2) 2.1.2 LCD驱动函数 (2) 2.1.3 结果显示函数 (2) 2.1.4状态机控制函数 (2) 2.1.5串口服务函数 (2) 2.2 程序流程图 (3) 2.2.1系统总框图 (3) 2.2.2计算器状态机流程转换图 (3) 三、测试方案与测试结果 (4) 3.1测试方案 (4) 3.3 测试结果及分析 (7) 4.3.1测试结果(仿真截图) (7) 4.3.2测试分析与结论 (7) 四、总结心得 (7) 五、思考题 (8) 附录1:整体电路原理图 (9) 附录2:部分程序源代码 (10)

AT89C51单片机C实现简易计算器

AT89C51单片机简易计算器的设计 一、总体设计 根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。 (2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 (4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD 上提示错误。 系统模块图:

二、硬件设计 (一)、总体硬件设计 本设计选用AT89C51单片机为主控单元。显示部分:采用LCD 静态显示。按键部分:采用4*4键盘;利用MM74C922为4*4的键盘扫描IC,读取输入的键值。 总体设计效果如下图:

(二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图 2 矩阵键盘布局图 矩阵键盘内部电路图如图3所示:

数电脉搏计数器电路课程设计

烟台南山学院 数字电子技术课程设计题目脉搏计数电路设计 姓名:___ XXXXXX ___ 所在学院:_工学院电气与电子工程系 所学专业:_ 自动化 班级:___电气工程XXXX 学号:___XXXXXXXXXXXXXX 指导教师:_____ XXXXXXXX ___ 完成时间:____ XXXXXXXXXXXXX

数电课程设计任务书 一、基本情况 学时:40学时学分:1学分适应班级:12电气工程 二、进度安排 本设计共安排1周,合计40学时,具体分配如下: 实习动员及准备工作:2学时 总体方案设计:4学时 查阅资料,讨论设计:24学时 撰写设计报告:8学时 总结:2学时 教师辅导:随时 三、基本要求 1、课程设计的基本要求 数字电子技术课程设计是在学习完数字电子课程之后,按照课程教学要求,对学生进行综合性训练的一个实践教学环节。主要是培养学生综合运用理论知识的能力,分析问题和解决问题的能力,以及根据实际要求进行独立设计的能力。初步掌握数字电子线路的安装、布线、焊接、调试等基本技能;熟练掌握电子电路基本元器件的使用方法,训练、提高读图能力;掌握组装调试方法。其中理论设计包括总体方案选择,具体电路设计,选择元器件及计算参数等,课程设计的最后要求是写出设计总结报告,把设计内容进行全面的总结,若有实践条件,把实践内容上升到理论高度。 2、课程设计的教学要求 数字电子技术课程设计的教学采用相对集中的方式进行,以班为单位全班学生集中到设计室进行。做到实训教学课堂化,严格考勤制度,在实训期间累计旷课达到6节以上,或者迟到、早退累计达到8次以上的学生,该课程考核按不及格处理。在实训期间需要外出查找资料,必须在指定的时间内方可外出。 课程设计的任务相对分散,每3名学生组成一个小组,完成一个课题的设计。小组成员既有分工、又要协作,同一小组的成员之间可以相互探讨、协商,可以互相借鉴或参考别人

单片机计算器的课程设计报告

目录 一、设计任务和性能指标 (1) 1.1设计任务 (2) 1.2性能指标 (2) 二、设计方案 (2) 3 3 4 5 5 6 6 7 7 20 20 20 20 21 参考文献 (21) 附录1、系统硬件电路图 (22) 附录2、硬件实物图 (23) 附录3、器件清单 (24)

一、设计任务和性能指标 1.1设计任务 自制一个单片机最小系统,包括复位电路,采用外部小键盘输入数据,能够实现加法、乘法及一个科学计算,计算结果显示在四位一体的数码管上。 要求用Protel 画出系统的电路原理图(要求以最少组件,实现系统设计所要 显 位 监测模块采用二极管和扬声器(实验室用二极管代替)组成电路。 键盘电路采用4*4矩阵键盘电路。 显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。 整个单片机的接口电路: P0用于显示输出; P1用于键扫描输入; P2用于数码管位选控制; P3用于键盘扩展(部分运算符输入);

三.系统硬件设计 3.1单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和晶振电路。 主控芯片选取STC89C52RC芯片,因其具有良好的性能及稳定性,价格便宜应用方便。 扩展键:“log”,“ln”,“x^2”“小数点”,“开方” 共计25个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口德扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘的功能。 以下为键盘接口电路的硬件电路图

单片机课程设计——基于C51简易计算器

单片机双字节十六进制减法实验设计 摘要 本设计是基于51系列的单片机进行的双字节十六进制减法设计,可以完成计 算器的键盘输入,进行加、减、3位无符号数字的简单运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用5个键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus 仿真。 引言 十六进制减法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阴极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单.................................. 一、设计任务和要求

24进制计数器设计报告.doc

24进制计数器设计报告 单时钟同步24进制计数器课程设计报告1.设计任务1.1设计目的1.了解计数器的组成及工作原理。 2.进一步掌握计数器的设计方法和计数器相互级联的方法。 3.进一步掌握各芯片的逻辑功能及使用方法。 4.进一步掌握数字系统的制作和布线方法。 5.熟悉集成电路的引脚安排。 1.2设计指标1.以24为一个周期,且具有自动清零功能。 2.能显示当前计数状态。 1.3设计要求1.画出总体设计框图,以说明计数器由哪些相对独立的功能模块组成,标出各个模块之间互相联系,时钟信号传输路径、方向。 并以文字对原理作辅助说明。 2.设计各个功能模块的电路图,加上原理说明。 3.选择合适的元器件,利用multisim仿真软件验证、调试各个功能模块的电路,在接线验证时设计、选择合适的输入信号和输出方式,在确定电路充分正确性同时,输入信号和输出方式要便于电路的测试和故障排除。 4.在验证各个功能模块基础上,对整个电路的元器件和布线进行合理布局。 5.打印PCB板,腐蚀,钻孔,插元器件,焊接再就对整个计数器电路进行调试。

2.设计思路与总体框图.计数器由计数器、译码器、显示器三部分电路组成,再由555定时器组成的多谐振荡器来产生方波,充当计数脉冲来作为计数器的时钟信号,计数结果通过译码器显示。 图1所示为计数器的一般结构框图。 十位数码显示管译码驱动异步清零计数器计数脉冲(由555电路产生)个位位数码示像管译码驱动异步清零计数器强制清零▲图1计数器结构框图3.系统硬件电路的设计3.1555多谐荡电路555多谐振荡电路由NE555P芯片、电阻和电容组成。 由NE555P的3脚输出方波。 ▲图2555电路3.2计数器电路集成计数芯片一般都设置有清零输入端和置数输入端,而且无论是清零还是置数都有同步和异步之分。 有的集成计数器采用同步方式,即当CP触发沿到来时才能完成清零或置数任务;有的集成计数器则采用异步方式,即通过触发器的异步输入端来直接实现清零或置数,与CP信号无关。 本设计采用异步清零。 由2片十进制同步加法计数器74LS160(图2-1-1)、一片与非门74LS00(图2-1-2)和相应的电阻、开关。 由外加送来的计数脉冲(由555电路产生)送入两个计数器的CLK端,电路在计数脉冲的作用下按二进制自然序依次递增1,当个位计数到9时,输出进位信号给十位充当使能信号进位。

科学计算器课程设计报告C课程设计修订稿

科学计算器课程设计报告C课程设计 集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

计算机科学与技术学部 C++课程设计 题目科学计算器 学部计算机科学与技术 班级计科1103 指导教师李军 姓名刘明 学号 2012年6月27日

摘要 计算器的产生和发展是建立在电子计算机基础之上的。硬件方面,自1946年第一台电子计算机诞生以来,计算机技术的发展可谓日新月异,从庞大的只能在实验室里供研究使用的计算机到如今能适应不同环境满足不同需求的各种各样的计算机;运算速度从每秒几千次到每秒几百亿次;处理器从焊有上百万个电子管的大的惊人的电子板到只有指甲大小的集成电路;现在计算机在硬件方面的发展已达到了每三个月更新换代一次的惊人速度。软件方面,也已从机器语言、汇编语言、高级语言发展到现如今的第四代语言——非结构化、面向对象、可视化的语言。 在这个计算器里面,我们实现了简单的四则运算以及更高功能的科学计算,它的外观简洁美观,使人们能快捷简单的操作。能准确的得到计算结果,大大减少了数字计算所需要的时间,为人们的生活带来便利。此系统在Windows 7环境下,使用VC++ 进行编写。 简单计算器包括双目运算和单目运算功能,双目运算符包含基本的四则运算及乘幂功能,单目运算符包含正余弦,对数,开方,阶乘,倒数,进制转换等运算。可对其输入任意操作数,包括小数和整数及正数和负数进行以上的所有运算并能连续运算。并且包含清除,退格功能等。我们所做的计算器其功能较Windows 7下的计算器还是很不够多,没有其菜单的实现功能项,没有其小巧的标准计算器。 关键词:计算器;运算;VC++等

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成:1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

单片机课程设计——基于C51简易计算器

单片机十进制加法计算器设计 摘要 本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计 算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。 设计过程在硬件与软件方面进行同步设计。硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。显示采用3位7段共阴极LED动态显示。软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。编程语言方面从程序总体设计以及高效性和功能性对C 语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。 引言 十进制加法计算器的原理与设计是单片机课程设计课题中的一个。在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。 单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。 关键词:单片机、计算器、AT89C51芯片、汇编语言、数码管、加减乘除

目录 摘要 (01) 引言 (01) 一、设计任务和要求............................. 1、1 设计要求 1、2 性能指标 1、3 设计方案的确定 二、单片机简要原理............................. 2、1 AT89C51的介绍 2、2 单片机最小系统 2、3 七段共阳极数码管 三、硬件设计................................... 3、1 键盘电路的设计 3、2 显示电路的设计 四、软件设计................................... 4、1 系统设计 4、2 显示电路的设计 五、调试与仿真................................. 5、1 Keil C51单片机软件开发系统 5、2 proteus的操作 六、心得体会.................................... 参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................

基于单片机的光电计数器课程设计

计控学院 College of computer and control engineering Qiqihar university 电气工程课程设计报告题目:基于单片机的光电计数器 系别电气工程系 专业班级电气123班 学生姓名宋恺 学号2012024073 指导教师李艳东 提交日期 2015年6月 24日 成绩

电气工程课程设计报告 摘要 光电计数器是利用光电元件制成的自动计数装置。其工作原理是从光源发出的一束平行光照射在光电元件(如光电管、光敏电阻等)上,每当这束光被遮挡一次时,光电元件的工作状态就改变一次,通过放大器可使计数器记下被遮挡的次数。光电计数器的应用范围非常广泛,常用于记录成品数量,例如绕线机线圈匝数的检测、点钞机纸币张数的检测、复印机纸张数量的检测,或展览会参观者人数。 光电计数器与机械计数器相比,具有可靠性高、体积小、技术频率高、能和计算机链接实现自动控制等优点。本文即介绍基于MCS-51单片机的光电技术器。 关键词:单片机;光电计数器;数码显示;自动报警

齐齐哈尔大学计控学院电气工程系课程设计报告 目录 1 设计目的及意义 (1) 2 设计内容 (1) 2.1 系统整体设计 (1) 2.1.1 实验方案 (1) 2.1.2 光电计数器结构框图 (2) 图1 光电计数器结构框图 (2) 2.2系统硬件设计 (2) 2.2.1稳压直流电源电路 (2) 2.2.2发射接收电路 (3) 2.2.3显示电路 (3) 2.2.4报警电路 (4) 2.2.5硬件系统 (4) 2.3系统软件设计 (6) 3 结论7 4 参考文献 (8)

计算器课程设计报告

高级语言程序(JAVA)课程设计报告 系部名称:商学系专业班级:营销*** 学生姓名:墨璇 墨兰学号: ********** ********** 指导教师:王芬教师职称:讲师 2014年06月26日

目录 一、课程设计目的及意义 .................................... 错误!未定义书签。 二、课程设计任务 .......................................... 错误!未定义书签。 2.1程序设计要求....................................... 错误!未定义书签。 三、课程设计时间 .......................................... 错误!未定义书签。 四、课程设计地点 .......................................... 错误!未定义书签。 五、课程设计内容 .......................................... 错误!未定义书签。 5.1开发工具与平台..................................... 错误!未定义书签。 (1).开发工具 ...................................... 错误!未定义书签。 (2).开发平台 ...................................... 错误!未定义书签。 5.2设计思路........................................... 错误!未定义书签。 5.3 程序测试 .......................................... 错误!未定义书签。 5.4实验总结........................................... 错误!未定义书签。 六、课程设计感想 .......................................... 错误!未定义书签。 七、附录(程序代码) ...................................... 错误!未定义书签。

单片机定时器实验报告

( 2009 —2010 学年第二学期) 课程名称:单片机开课实验室: 2010年 5月14日 一.实验目的: 掌握定时器T0、T1的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 二.实验原理: MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。T1还可以作为其串行口的波特率发生器。 定时器T0由特殊功能寄存器TL0和TH0构成,定时器T1由TH1和TL1构成,特殊功能寄存器TMOD控制定时器的工作方式,TCON控制其运行。定时器的中断由中断允许寄存器IE,中断优先权寄存器IP中的相应位进行控制。定时器T0的中断入口地址为000BH,T1的中断入口地址为001BH。 定时器的编程包括: 1)置工作方式。 2)置计数初值。 3)中断设置。 4)启动定时器。 定时器/计数器由四种工作方式,所用的计数位数不同,因此,定时计数常数也就不同。 在编写中断服务程序时,应该清楚中断响应过程:CPU执行中断服务程序之前,自动

将程序计数器PC内容(即断点地址)压入堆栈保护(但不保护状态寄存器PSW,更不保护累加器A和其它寄存器内容),然后将对应的中断矢量装入程序计数器PC使程序转向该中断矢量地址单元中以执行中断服务程序。定时器T0和T1对应的中断矢量地址分别为000BH 和001BH。 中断服务程序从矢量地址开始执行,一直到返回指令“RETI”为止。“RETI”指令的操作一方面告诉中断系统该中断服务程序已经执行完毕,另一方面把原来压入堆栈保护的断点地址从栈顶弹出,装入到程序计数器PC,使程序返回到被到中断的程序断点处,以便继续执行。 因此,我们在编写中断服务程序时注意。 1.在中断矢量地址单元放一条无条件转移指令,使中断服务程序可以灵活地安排在64K 字节程序存储器的任何空间。 2.在中断服务程序中应特别注意用软件保护现场,以免中断返回后,丢失原寄存器、累加器的信息。 3.若要使执行的当前中断程序禁止更高优先级中断,可以先用软件关闭CPU中断,或禁止某中断源中断,在返回前再开放中断。 三.实验内容: 编写并调试一个程序,用AT89C51的T0工作方式1产生1s的定时时间,作为秒计数时间,当1s产生时,秒计数加1;秒计数到60时,自动从0开始。实验电路原理如图1所示。 计算初值公式 定时模式1 th0=(216-定时时间) /256 tl0=(216-定时时间) mod 256

单片机4X4键盘计算器课程设计报告书

《单片机课程设计报告》 教学院: 专业班级: 学号: 学生: 指导教师: 时间: 地点:

单片机课程设计任务书 一、课题名称 单片机课程设计 二、设计目的 为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的单片机课程设计。通过实训使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。 三、设计容 设计基于51单片机的简易计算器系统电路,并以该电路为基础进行编程,要求能够实现0-99之间的数进行加、减、乘、除运算的功能。 四、设计要求 1、设计简易计算器,要求能对0-99之间的数进行加、减、乘、除运算。 2、用4×4的键盘作为输入设备。 3、用LED或LCD进行显示。 4、编写无符号数加、减、乘、除运算、输入和显示的程序。 5、对系统的进行综合和调试,使其具有对0-99之间的数进行加、减、乘、除运算的功能。 6、编写课程设计的总结

六、设计报告 课程设计报告的基本容至少包括封面、正文、附录三部分。课程设计报告要求统一格式,字体工整规。 1、封面 封面包括“《单片机课程设计》课程设计报告”、班级、、学号以及完成日期等。 2、正文 正文是实践设计报告的主体,具体由以下几部分组成: (1)课程设计题目; (2)课程设计任务与要求; (3)设计过程(包括设计方案、设计原理、创新点以及采用的新技术等); (4)方案的比较与论证; (5)硬件电路设计,各个模块的设计与器件的选择; (6)软件程序的设计与调试; (7)课程设计总结(包括自己的收获与体会;遇到的问题和解决的方法;技术实现技巧和创新点;作品存在的问题和改进设想等); 3.附录 附录1:系统设计原理图 附录2:系统硬件元器件清单 附录3:系统的程序 七、考核方式与成绩评定办法 及格(60分~69分)、60分以下为不及格。

自动计数器课程设计..

西安电子科技大学 长安学院课程设计实验报告 姓名: 学号: 指导老师:

自动计数器课程设计 摘要:自动计数器在日常生活中屡见不鲜,它是根据不同的情况设定的,能够通过技术功能实现一些相应的程序,如通过自动计数器来实现自动打开和关闭各种电器设备的电源。广泛用于路灯,广告灯,电饭煲等领域。 自动计数器给人们生产生活带来了极大的方便,而且大大地扩展了自动计数器的功能。诸如自动定时报警器、按时自动打铃、时间程序自动控制、定时广播、自动启闭电路,定时开关烤箱、甚至各种定时电器的自动启用等,所有这些,都是以自动计数器为基础的。由于它的功能强劲,用途广泛,方便利用,所以在这个电子科技发展的时代,它是一个很好的电子产品。如在洗衣机的定时控制以及路灯等一些人们不能再现场控制的操控。都可以利用自动计数器来完成这样的功用。可见此系统所能带来的方便和经济效益是相当远大的。因此,研究自动计数器及扩大其应用,有着非常现实的意义。 本次课设设计是检验理论学习水平、实践动手能力及理论结合实际的能力,要求具有一定的分析处理问题能力和自学能力的一个比较重要得实践课程。通过这样的过程,使我们的论文及实践水平有一次较为全面的检查,同时也使我们硬件方面的能力有所提高,对以后的学习有这非常重要的意义。 关键词:电器设备;自动计数器;电源 指导老师签名:

1. 设计任务及方案 1.1设计任务 设计并制作一个自动计数器,NE555构成时钟信号发生器,CD4518为二,十进制加计数器,CD4543为译码驱动器,调节R17课调节555的震荡频率,C1为充放电电容,电容越大,充点时间越长,振荡频率越低。 介绍了一种新型的自动计数器设计方法,以NE555构成计数脉冲信号发生器,CD4518为二/十进制加法计数器,CD4543为译码驱动器,与按键、数码管等较少的辅助硬件电路相结合,实现对LED数码管进行控制。本系统具有体积小、硬件少、电路结构简单及容易操作等优点。 本计数器可将机械或人工计数方式变为电子计数,并且采用LED数码显示,简单直观,可适用于诸多行业,以满足现代生产、生活等方面的需求。随着生产技术的不断改善和提高,在现代化生产的许多场合都可以看到计数器的使用。本计数器具有低廉的造价以及控制简单等特点。通过对计数脉冲的转换可使本计数器应用更为广泛。 2.电路原理 2.1 元器件的设计与参数 本小组设计的电路原理图所涉及的元器件有:电压为+5V的直流稳压电源;最大电阻为100K的滑动变阻器R17一个;有极性电容C1一个;无极性电容C2和C3; 开关SW一个;电阻R1~~R16总共16个;芯片有:NE555,CD4518,CD4543;以及共阴极7段数码显示器两个。

相关文档
最新文档