简易计数器的设计
- 格式:ppt
- 大小:411.00 KB
- 文档页数:25
简易计数器的设计与制作该计数器可实现按键计数、增减控制、手/自动清零等功能。
需要准备下列元件:共阴极7段数码管、按键开关、4511(BCD锁存/7段译码/驱动器)、4516(可预置4位二进制加/减计数器)、40106(或7414,六反相施密特触发器)、4001(或7400,四2输入与非门)、4093(或74132,四与非施密特触发器)以及面包板、电阻、电容若干。
另外还需要准备+5V稳压电源一台,或自制电源模块.本电路以计数器集成块为核心,其输人为:计数、清零、增减切换三个按键,其输出经译码驱动器处理后,由数码管显示。
原理框图如下图所示。
一、计数器根据设计要求能增减计数,应选用可逆计数器,本设计选用可预置4位二进制加/减计数器4516,如下图。
计数脉冲从CP输入,每到来1个脉冲上升沿,二进制输出数据改变1。
如果U/D端为高电平,就增加1;反之减少l。
RD为异步清零端,RD为高电平时、计数器清零。
本设计就是要对这三个输入端进行控制。
此外,其他控制端也应合理设定:LD为异步数据预置控制端,当LD高电平时,DO~D3上的数据置入计数器中,为计数控制端,控制计数器的计数操作,CI=O时、允许计数,CI=1时、保持。
至于究竟设置为高电平还是为低电平,请自行考虑。
二、按键控制按键开关一般有两种接法,一种是平时为低电平,按下变成高电平,如下图(a)所示,图中A点为控制信号输入端子;另一种相反,平时高,按下后变低,如下图(b)所示。
读者可自行选择脉冲按键的接法,但清零键必须按(a)图接,读者可自行分析其原因。
三、译码驱动计数器输出的4位二进制数据不能直接送至数码管进行显示,并且4516也无法驱动点亮发光二极管。
本设计选用7段译码/驱动器4511,引脚排列下如图所示。
其中Al、A2、A3、A4为BCD码输入,A1为最低位。
LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码'8',各笔段都被点亮以检查显示器是否有故障。
基于单片机的简易计算器的设计引言:计算器作为一种常见的便携式计算设备,在我们的生活中扮演着重要的角色。
基于单片机的简易计算器凭借其小巧的体积、低功耗和简单易用的特点,成为了很多人的选择。
本文将介绍一种基于单片机的简易计算器的设计。
一、设计思路设计思路如下:1.显示部分设计使用4位共阴数码管来作为计算结果的显示和反馈。
单片机通过控制不同的引脚,将待显示的数字依次输出到数码管的不同位上,实现显示。
2.控制部分设计使用独立按键作为用户输入,并通过行列扫描的方式进行检测。
通过分析用户输入的按键,识别出相应的操作,并进行相应的计算。
根据不同的按键组合,可以实现加、减、乘、除等运算。
二、硬件设计1.单片机选择为了实现计算器的功能,选择一种性能良好、资源丰富的单片机是很重要的。
根据需求,选择一款采用8051内核的单片机,如AT89S51或AT89C51、这两款单片机具有5V供电、8位数据总线、4KB内存和32个I/O口等特点,并且广泛应用于各种嵌入式开发领域。
2.数码管显示设计为了显示计算结果,采用4位共阴数码管。
通过将各段控制端接通高电平或低电平,实现不同数字的显示。
3.按键设计使用独立按键作为用户输入,通过行列扫描的方式进行检测。
使用矩阵键盘可以减少I/O口的使用,避免使用太多的引脚。
4.电源设计计算器可以通过外接电源供电,同时还可以使用电池作为备用电源。
为了延长电池寿命,可以使用低功耗的工作模式,并在无操作时自动进入休眠状态。
5.外设接口设计为了增加计算器的功能,可以添加一些扩展模块,如蓝牙模块、USB 接口等。
这样可以实现与其他设备的通信和数据传输。
三、软件设计1.按键检测和解码将行列扫描的结果通过软件进行解码,识别用户输入的按键。
通过判断不同的按键组合,可以实现加、减、乘、除等运算。
2.计算实现根据用户输入的数字和操作符,进行相应的计算。
将结果显示到数码管上,并可以通过串口输出到其他设备。
3.界面设计设计简洁、友好的用户界面,提供用户输入和计算结果的显示。
1一. 设计任务简易计算器的设计制作二.设计内容利用16个4脚按键开关组合成4×4的键盘,4根行线和4根列线接至单片机的另一并行输出口上,作为输出设备;再配合使用电源,时钟电路,复位电路即可构成一基于51单片机的最小输入,输出系统。
三.设计要求1、设计简易计算器,要求能对0-99之间的数进行加、减、乘、除运算。
2、用4×4的键盘作为输入设备。
3、用LED 或LCD 进行显示。
4、编写无符号数加、减、乘、除运算、输入和显示的程序。
5、对系统的进行综合和调试,使其具有对0-99之间的数进行加、减、乘、除运算的功能。
6、编写课程设计的总结 四.参考选取元器件见附录1 五.设计方案论证液晶显示模块与单片机的连接方式通常有两种,一种为直接访问方式(总线方式),另一种为间接控制方式(模拟口线)。
直接访问方式就是将液晶显示模块的接口作为存储器或I/O 设备直接挂在单片机总线上,单片机以访问存储器或I/O 设备的方式控制液晶显示模块的工作。
间接控制方式是单片机通过自身的或系统中的并行接口与液晶显示模块连接,单片机通过 对这些接口的操作,达到对液晶显示模块的控制。
间接控制方式的特点是电路简单,可省略单片机外围的数字逻辑电路,控制时序由软件产生,可以实现高速单片机与液晶显示模块的接口,故本次设计采用间接控制方式。
(1)模拟口线2图2-2-1(2)总线方式图2-2-2六.设计原理1.逻辑框图(由于实际电路与任务电路有部分出入,但原理相同,见图2-2-3)图2-2-3 2.键盘结构及其原理图2-2-4如图2-2-4所示,键盘中有无键按下是由列线送入全扫描字,然后读LCD 显示AT89C51矩阵键盘输入时钟电路 复位电路入行线状态来判断。
具体是:向列线输出全扫描字00H,将全部列线置为低电平,然后将行线的电平状态读入累加器A中。
如果有键按下,总会有一根行线电平被拉至低电平,从而使输入不全为1。
键盘中哪一个键被按下是通过将列线逐列置低电平后,检查行输入状态实现的。
51单片机简易计算器设计一、设计思路计算器的基本功能包括加法、减法、乘法和除法。
我们可以使用按键作为输入方式,将输入的数字和操作符暂时保存在内存中,然后根据操作符进行相应的运算。
最后再将运算结果显示在数码管上。
具体设计思路如下:1.确定计算器所需的硬件组件:数码管、按键、51单片机和相关电路。
2.定义按键与数字和操作符的对应关系。
3.编写51单片机的程序,实现按键输入、运算和结果显示的功能。
二、硬件设计1.数码管:使用常见的7段数码管作为显示器,通过引脚连接到51单片机的IO口。
2.按键:使用4个按键分别表示数字输入键、加法键、减法键和等于键。
三、软件设计1.初始化:将数码管引脚设为输出模式,将按键引脚设为输入模式。
2.按键处理:采用中断方式检测按键输入,通过编程判断所按的键。
3.数字输入:将按键所对应的数字保存在变量中,最多支持四位数的输入。
4.操作符输入:将按下的操作符保存在变量中。
5.运算:根据保存的操作符进行相应的运算,并将结果保存在变量中。
6.结果显示:将结果显示在数码管上。
四、代码实现下面是一个示例代码的框架,供参考:```c#include <reg52.h>sbit SDA = P0^0; // I2C总线数据线sbit SCL = P0^1; // I2C总线时钟线//定义按键的IO口sbit BUTTON0 = P1^0; // 数字输入键sbit BUTTON1 = P1^1; // 加法键sbit BUTTON2 = P1^2; // 减法键sbit BUTTON3 = P1^3; //等于键unsigned char num1 = 0; // 第一个操作数unsigned char num2 = 0; // 第二个操作数unsigned char op = 0; // 操作符unsigned char result = 0; // 运算结果//判断按键所对应的数字或操作符void buttonif (BUTTON0 == 0) // 数字输入键//将按键所对应的数字保存在变量中//显示数字}else if (BUTTON1 == 0) // 加法键//保存操作符为加号}else if (BUTTON2 == 0) // 减法键//保存操作符为减号}else if (BUTTON3 == 0) //等于键//根据保存的操作符进行相应的运算//将结果保存在变量中//显示结果}void mainwhile (1)button(; // 按键处理}```五、总结通过以上的设计思路和示例代码,我们可以轻松地实现一个简易的计算器。
单片机计数器的设计可以根据具体的需求进行灵活的选择。
以下是一个简单的单片机计数器的设计:
确定计数范围:根据需求确定计数器的范围,例如0-99或0-999。
选择计数器类型:根据计数范围选择合适的计数器类型,可以是二进制计数器、十进制计数器或BCD码计数器等。
确定计数方式:确定计数的方式,可以是递增计数、递减计数或双向计数等。
确定计数信号源:确定计数信号的来源,可以是外部信号源或内部时钟信号源。
连接计数器到外设:根据需求将计数器的输出连接到外设,例如LED显示器、数码管或继电器等。
编写计数器程序:使用适当的单片机编程语言编写计数器程序,包括计数器的初始化、计数操作和显示操作等。
测试和调试:在硬件连接完成后,对计数器进行测试和调试,确保计数器功能正常。
以上是一个简单的单片机计数器的设计流程,具体的实施可以根据具体的需求和单片机型号进行调整。
简易计算器设计范文首先,我们需要决定计算器的基本功能。
一个简易计算器通常应该具备加法、减法、乘法和除法的功能。
此外,我们还可以添加开方、求平方以及取模等功能。
在设计计算器之前,我们需要确定用户界面。
对于一个简易计算器来说,我们可以使用命令行界面或者图形用户界面。
在本文中,我们将使用命令行界面。
接下来我们需要设计计算器的算法。
为了实现加、减、乘、除这些基本运算,我们可以编写四个函数来完成。
比如,加法函数可以接收两个数并返回它们的和,减法函数可以接收两个数并返回它们的差,乘法函数可以接收两个数并返回它们的乘积,除法函数可以接收两个数并返回它们的商。
同时,我们还需要添加一些辅助函数来处理开方、求平方以及取模等功能。
比如,开方函数可以接收一个数并返回它的平方根,求平方函数可以接收一个数并返回它的平方,取模函数可以接收两个数并返回它们的余数。
在设计计算器时,我们还要考虑到用户输入的错误处理。
如果用户输入无效的操作或者除数为零,我们需要给出错误的提示信息。
接下来,我们来设计主要的程序流程。
首先,我们需要显示一个欢迎信息,告诉用户如何使用计算器。
然后,在一个循环中,我们会要求用户输入要执行的操作,然后读取用户输入的操作和操作数。
根据用户的选择,我们会调用相应的函数来执行计算,并输出结果。
接着,我们会继续询问用户是否要继续进行计算。
如果用户选择退出,我们会结束循环并显示一个退出信息。
最后,我们需要编写测试用例来确保计算器的功能正常。
我们可以输入一些固定的操作和操作数,然后验证计算器返回的结果是否正确。
如果测试用例中出现错误,我们需要进行修复。
在编写代码之前,我们还需要选择一个编程语言。
对于一个简易计算器来说,Python是一个非常适合的选择。
Python具有简单易读的语法,能够轻松地实现我们的设计。
下面是本文的设计示例:```python#导入所需的库import math#加法函数def add(x, y):return x + y#减法函数def subtract(x, y):return x - y#乘法函数def multiply(x, y):return x * y#除法函数def divide(x, y):if y == 0:raise ValueError("除数不能为零") return x / y#开方函数def square_root(x):if x < 0:raise ValueError("不能对负数开方") return math.sqrt(x)#求平方函数def square(x):return x ** 2#取模函数def modulo(x, y):if y == 0:raise ValueError("除数不能为零") return x % y#欢迎信息print("欢迎使用简易计算器!")print("请按以下方式输入操作:")print("加法:'a 数1 数2'")print("减法:'s 数1 数2'")print("乘法:'m 数1 数2'")print("除法:'d 数1 数2'")print("开方:'r 数'")print("求平方:'q 数'")print("取模:'o 数1 数2'")#主程序循环while True:#用户输入operation = input("输入操作:")data = operation.splitif data[0] == "a":result = add(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "s":result = subtract(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "m":result = multiply(float(data[1]), float(data[2])) print("结果为:", result)elif data[0] == "d":try:result = divide(float(data[1]), float(data[2])) print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "r":try:result = square_root(float(data[1]))print("结果为:", result)except ValueError as e:print("错误:", str(e))elif data[0] == "q":result = square(float(data[1]))print("结果为:", result)elif data[0] == "o":try:result = modulo(float(data[1]), float(data[2]))print("结果为:", result)except ValueError as e:print("错误:", str(e))else:print("无效的操作")#判断是否继续计算choice = input("是否继续计算?(y/n)")if choice == "n":breakprint("谢谢使用,再见!")```通过以上设计,我们可以在命令行中使用这个简易计算器来执行加、减、乘、除、开方、求平方和取模等操作。
基于单片机的简易计算器设计引言:计算器是一种广泛应用的电子设备,可以进行各种数学计算。
基于单片机的计算器是一种使用单片机作为核心处理器的计算器。
本文将介绍如何设计一个基于单片机的简易计算器。
一、设计思路:1.硬件设计:选择适合的单片机,LCD显示屏,按键开关和电源电路,将它们连接在一起组成计算器的硬件。
2.软件设计:使用单片机的编程语言编写程序,实现计算器功能,如加法、减法、乘法、除法等运算,以及清零、退格、等号等功能。
二、硬件设计:选择单片机:在设计单片机计算器时,我们可以选择MCU,如STC89C52、ATmega32等。
这些单片机性能稳定,功能强大,适合用于计算器的设计。
LCD显示屏:选择合适尺寸和接口的LCD显示屏,用于显示计算结果和输入的数字。
按键开关:选择合适的按键开关,用于接收用户的按键输入,如数字、运算符等。
电源电路:设计适合的电源电路,为计算器提供稳定的电源。
三、软件设计:1.初始化功能:启动计算器时,进行相关初始化操作,如清屏、设置计算器状态等。
2.数字输入功能:通过按键输入,将数字输入到计算器中,同时刷新LCD显示屏上的内容。
3.运算功能:根据用户输入的数字和运算符,进行相应的运算操作,如加法、减法、乘法、除法等。
4.清零功能:按下清零按钮时,将计算器的状态重置为初始状态。
5.退格功能:当用户输入错误时,可以通过按下退格按钮,删除最后一个输入的数字或运算符。
6.等号功能:用户按下等号按钮时,计算器将完成运算,并将结果显示在LCD屏上。
7.错误处理功能:当用户输入错误时,计算器应该给出合适的错误提示。
四、程序实现:1.确定单片机的引脚分配,将LCD显示屏、按键开关和单片机的引脚连接起来。
2.使用单片机的编程语言编写程序,实现计算器的功能。
3.根据运算符和数字的不同,确定相应的运算方法,并在LCD显示屏上显示结果。
4.使用条件语句和循环结构,实现计算器的控制逻辑。
5.通过编程实现按键响应功能,当用户按下相应按键时,执行相应的操作。
不用珠子做计数器的方法
1. 使用纸张折叠
可以使用纸张通过折叠的方法做简易的计数器。
折叠出确定的折痕后,展开纸张按折痕折叠,每折一次表示计数一次。
2. 利用小石子
找一些大小和形状相近的小石子,将它们分散放置。
每次需要计数时,取一个石子放到一边,直到石子用完为止。
3. 采用线圈表示
取一段等长的线或绳子,每计一个数就在线上打一个结。
线上打的结数目就表示总的计数次数。
4. 用筷子排列组合
取多根相同的筷子,将它们平行排列,每计一个数就改变一根筷子的方向。
筷子排列组合表示计数。
5. 制作计数板
可以在木板上钉上一定数量的图钉,每次计数时就翻转一个图钉的方向。
图钉方向表示总数。
6. 线条符号记录
在纸上绘制线条或符号,每次计数就增加一个一样的线条或符号,数量代表计数结果。
7. 利用可堆叠物品
像积木、盒子等可堆叠物品,每次计数将一个物品堆上,堆叠高度表示计数值。
8. 线性表示
在纸或地上划一条线,每计数一次就在线上划一个刻度,刻度数量即是总数。
9. 利用声音或动作
也可以通过击掌、拍手、说话等声音或动作来计数。
简易计算器的文档一、设计任务设计并制作一个四位数范围内的简易计算器二、要求⏹系统通过4×4的矩阵键盘输入数字及运算符。
⏹可以进行4位十进制数以内的加法运算,如果计算结果超过4位十进制数,则屏幕显示E⏹可以进行加法以外的计算(乘、除、减)。
三、实训元器件1.单片机最小系统2.74LS245芯片一片3.74LS04芯片一块4.共阳四位数码管一个5.按键16《元器件的介绍》74LS04 六反向器的图74ls245DIR是H时,A→B74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。
由于P2口始终输出地址的高8位,接口时74LS245的三态控制端1G和2G接地,P2口与驱动器输入线对应相连。
P0口与74LS245输入端相连,E端接地,保证数据线畅通。
8051的/RD 和/PSEN相与后接DIR,使得RD且PSEN有效时,74LS245输入(P0.1←D1),其它时间处于输出(P0.1→D1)A5461AH四位共阳数码管电源部分:单片机与TTL电平是兼容的,因此单片机的供电电源一般为+5V。
单片机的电源部分电路直接将40脚接VCC,20脚接GND就可以了。
9V的电压通过整流桥后变成脉动直流电,再经过滤波电路后减小脉动,LM7805用于输出电压为恒定的5V直流电压。
B S1SW-PBS2SW-PBS3SW-PBS4SW-PBS5SW-PBS6SW-PBS7SW-PBS8SW-PBS9SW-PBS10SW-PBS11SW-PBS12SW-PBS13SW-PBS14SW-PBS15SW-PBS16SW-PBP10P11P12P13P14P15P16P17四、硬件设计流程图五、程序设计/***************************************************//* 矩阵键盘扫描程序*//* 方法:行列反转扫描法*//* 功能:使用四位动态数码管显示按键值*/ *//*/***************************************************/#include <reg51.h>//包含头文件#define uchar unsigned char#define uint unsigned intunsigned char A_SEG[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//0-Funsigned char A_Bit[]={0xfe,0xfd,0xfb,0xf7};/*函数声明*/uchar keyscan(void);void delay(uint i);unsigned char key_dectde(void) ;void Timer1_init();unsigned char led_point,Max_bit,key_nmber,led_buff[4];/*主函数*/void main(){uchar temp,i;Timer1_init();//led_buff[0]=1;//led_buff[1]=2;//led_buff[2]=3;// led_buff[3]=4;Max_bit=4;while(1){temp=key_dectde();//调用按键释放检测函数if(temp!=0xff){for(i=3;i>0;i--)led_buff[i]=led_buff[i-1];led_buff[0]=temp ;// led_buff[i++]=temp; //若有按键按下,显示按键值// if(i>=4)i=0;}}}/********键盘扫描函数*****//*函数名:keyscan() *//*返回值:key_temp*//*************************/uchar keyscan(void){uchar cord_h,cord_l,value,key_temp;//行列变量定义P1=0xf0; //行线初始化为全1cord_h=P1&0xf0; //读出行线值if(cord_h!=0xf0) //先检测行线有无按键按下{delay(100); //去抖if(cord_h!=0xf0){cord_h=P1&0xf0; //读出行线值P1=0x0f;//初始化列线值为全1cord_l=P1&0x0f; //读出列线值value=cord_h|cord_l; //行列组合switch(value){case 0x7e:key_temp=0;break;//0 按下相应的键显示相对应的码值case 0x7d:key_temp=1;break;//1case 0x7b:key_temp=2;break;//2case 0x77:key_temp=3;break;//3case 0xbe:key_temp=4;break;//4case 0xbd:key_temp=5;break;//5case 0xbb:key_temp=6;break;//6case 0xb7:key_temp=7;break;//7case 0xde:key_temp=8;break;//8case 0xdd:key_temp=9;break;//9case 0xdb:key_temp=10;break;//acase 0xd7:key_temp=11;break;//bcase 0xee:key_temp=12;break;//ccase 0xed:key_temp=13;break;//dcase 0xeb:key_temp=14;break;//ecase 0xe7:key_temp=15;break;//fdefault:return 0xff;}return key_temp;//键盘最后组合码值}}return(0xff); //返回该值}/*****按键释放检测函数*****//*函数名:key_dectde() *//*返回值:temp1 *//**************************/unsigned char key_dectde(void){unsigned char temp1,temp2;temp1=keyscan();if(temp1==0x7f)return 0x7f;do{temp2 =keyscan();}while (temp1==temp2) ;return temp1;}/*延时函数*/void delay(uint i){while(i--);}/*****定时器T1初始化函数*****//*函数名:Timer1_init(void) *//*返回值:无*//****************************/void Timer1_init(void){TH1=0xfc; // 1msTL1=0x18;TMOD |=0x10;TR1=1;EA=1;ET1=1;}/***********数码管扫描处理函数************//*功能:定时器T1定时1ms,每1ms中断扫描一次*//*函数名:Timer1_ISR (void) *//*****************************************/void Timer1_ISR (void) interrupt 3 using 1 //1ms //数码管扫描处理程序{TH1=0xfc;TL1=0x18;P2 |=0x0f ; //初始化位选,确保P2 口的低四位为全1P0=A_SEG[led_buff[led_point]]; //段选显示P2 &=A_Bit[led_point]; //位选扫描led_point++;//if(led_point==Max_bit){led_point=0;}}实训总结通过这次实训,让我们进一步掌握单片机的理论知识。