按键实现0~9999计数器 单片机

合集下载

51单片机:中断实现按键按一下数码管从00加到99循环(C语言)

51单片机:中断实现按键按一下数码管从00加到99循环(C语言)

51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)51单⽚机:中断实现按键按⼀下数码管从00加到99循环(C语⾔)
题⽬要求:
在51单⽚机上通过C语⾔编写代码,使⽤中断,按键按⼀下数码管上⾯的数字从00开始加1,实现00——99的循环
准备⼯作:
keil建⽴⼯程
proteus仿真验证
代码如下:
/*
*功能:⽤中断实现开关每按⼀次,数码管数字加⼀,
*实现00-99的循环
*/
#include<reg52.h>
sbit SEG1 = P1^0;//定义显⽰⼗位数码管
sbit SEG2 = P2^0;//定义显⽰个位数码管
sbit key = P3^2;//定义按键
int sum =0;
int i,j;
unsigned char code DSY_CODE[]={0xC0,0xF9,0xA4,
0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90};//共阳极数码管
void main()
{
IE =0x81;//使⽤外部中断0
IT0 =1;
while(1);
}
void EX0_INT(void) interrupt 0
{
sum++;
i = sum/10;//⼗位数字
j = sum%10;//个位数字
if(sum ==100)
{
sum =0;
}
P1 = DSY_CODE[i];//数码管显⽰⼗位数字
P2 = DSY_CODE[j];//数码管显⽰个位数字
}
(写的不是很规范,仅供参考)
仿真结果:。

单片机0-99计数器 秒表报告

单片机0-99计数器 秒表报告

姓名班级指导老师时间信息工程学院图1 硬件电路连接图(二)显示电路两位数码管循环显示00~99电路数码管只要就是用于数字得显示.数码管有共阴与共阳得区分,单片机都可以进行驱动,但就是驱动得方法却不同。

两位数码管循环电路就是由电阻、二极管与数码管组成,电源+5V通过560得电阻直接给数码管得7个段位供电,P0、0—P0、7对应了两个接数码管得A,B,C,D,E,F,G与小数点位,P2、6接显示个位数得数码管得3、8引角,P2、7则接十位数得。

P2、6与P2、7端口分别控制数码管得十位与个位得供电,当相应得端口变成低电平时,驱动相应得三极管会导通,+5V通过二极管与驱动三极管给数码管相应得位供电,这时只要P0口送出数字得显示代码,数码管就能正常显示需要得数字。

图2 十位显示动态数码管(共阳数码管)图3 个位显示静态数码管(共阴数码管)(三)时钟电路时钟电路得晶振频率越高,系统得时钟频率越高,单片机得运行速度也越快。

晶振频率根据设计需要设为12MHz,又根据谐振性质,电路中得电容应选择为30pF左右。

图4 时钟电路(四)复位电路MCS—51单片机得复位就是靠外部电路实现得。

MCS—51单片机工作之后,只要在她得RST引线上加载10ms以上得高点平,单片机就能有效地复位。

MCS-51单片机通常采用上电自动复位与按键复位两种方式。

最简单得复位电路如图5:图5 复位电路上电瞬间,RC电路充电,RST引线出现正脉冲,只要RST保持10ms以上得高电平,就能使单if(i++==100)//如果i=0{i=0;count++;P0=CODE[count/10];P2=~CODE[count%10];if(count==99)count=0; //如果到了99,则重新从0开始计数}}结果与分析(可以加页):(一)调试结果1.初始状态图7:初始状态结果图2.开始计时后按下按键暂停图8:中间状态图示(二)问题分析及解决措施1、一开始时没有分清楚数码管就是共阴数码管还就是共阳数码管,C语言程序中默认数码管就是共阴,所以两个P接口得值都就是按照共阴去写得,导致数码管选段及位显有问题,后来经过老师得指点,将共阳数码管P2得接口改成了共阴。

基于单片机的0-99计数器设计

基于单片机的0-99计数器设计
于锁存地址的低字节;第31脚:~EA/Vpp为程序存储器内外部选通信号;P0A0-P0A7.P1A0-P1A7.P2A0-P2A7.P3A0-P3A7这32个引脚为数据的输出及输入引脚, 即I/0口。
(2)键盘模块:它是4个独立式键盘,其特点是一键一线,各键相互独立,每 个按键各接一条I/O口线,通过检测I/O输入线的电平状态,可以很容易的判断那 个键被按下,如图2-1所示。
GND和Vcc;第9脚是复位脚RST第18脚是时钟XTAL2脚,片内振荡电路的输出端; 第19脚是时钟XTAL1脚,片内振荡电路的输入端;第29脚:~PSEN却,当访问外部 程序存储器时,此引脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2
口上;第30脚:ALE/~PROG当访问外部数据存储器时,ALE(地址锁存)的输出用
2
(1)STC89C5单片机:它是一个低功耗,高性能CMOS位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦1000次的Flash只读程序存储器,器件
采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及
STC8951引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功
计数器设计
-、实习目的与要求
1
(1)掌握51系列单片机的基本硬件结构及工作原理。
(2)掌握51系列单片机的汇编语言及基本程序设计方法。
(3)学习并掌握使用51系列单片机开发控制系统的基本步骤及方法。
(4)掌握51系列单片机键盘显示电路的编程方法。
2
(1)设计十进制0〜99的计数器,采用按键计数,数码管显示。
能强大的微型计算机的STC8951可为许多嵌入式控制应用系统提供高性价比的解方 案。STC8951具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128bytes的随机存取数据存储器(RAM,32个外部双向输入输出(I/O) 口,5个中断优先级,2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信,片内时钟振 荡器。其单片机的外围引脚有40个,分别是:第20脚和40脚分别是电源,即

单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位

单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位

标准文档9创新实践实训报告学院信息电子技术学院专业电子信息工程班级14学籍号姓名指导教师蒋野2017年06月29日单片机控制秒表电路一、电路工作原理1.工作原理用STC89C52设计一个2位的LED数码显示作为“秒表”:显示时间为00—99秒,每秒自动加1,另设计一个“暂停”键S2和一个“继续”键S3。

为使本设计系统更加完善,可以引入一个“复位”键S1,以方便对系统的控制。

如图。

本系统采用STC89C51单片机为中心器件,利用其定时器/计数器定时计数的原理,结合硬件电路如电源电路,晶振电路,复位电路和显示电路,以及一些按键电路等来设计计数器,将软硬件有机结合起来,其中软件系统采用汇编语言编写程序,包括显示程序,计数程序,中断,硬件系统利用Protues强大的功能来实现,简单易于观察,在仿真中就可以观察到实际的工作状态。

2.元器件作用(1)STC89C52单片机在电子行业中有着广泛的应用。

AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。

其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。

(2)时钟电路作用是为电路提供唯一的时钟信号。

(3)复位电路外接一个开关,控制电路复位,接通电源电路直接复位,如果没有开关亦可将复位电路引出导线接电源后断开。

(4)本设计要求使用共阳极的数码管,如下是共阳极的数码管的0-9编码:0xc0,0x92,0x82,0xf8,0x80,0x90,0xf9,0xa4,0xb0,0x99.(5)控制电路:S2按下电路停止计时,S3按下电路恢复计时。

二、程序流程图主程序流程图三、检测安装与调试1.元件检测共阳极数码管检测管脚序号利用万用表二极管档红表笔接一个抵住两个管脚,利用另一个接触其他,找出1,2两个管脚,继续分别找出A,D,C,D,E,F,G,Dp管脚。

0-9999手动计数器

0-9999手动计数器

NANCHANG UNIVERSITY毕业设计GRADUATION DESIGN(2008—2011年)题目: 0-9999计数器英文题目: 0-9999 COUNTER学院: 共青学院系别: 信息工程系专业: 电子信息工程技术班级: 08电信(1)学生姓名: XXX学号: 8051308009 指导老师: XXX起讫日期:2010年5月1日-2011年5月30日二○一一年六月目录摘要 (Ⅰ)Abstract (II)第一章绪论 (1)1.1前言 (1)1.2选题背景 (1)1.3设计要求 (2)第二章方案论证与电路设计 (2)2.1方案论证与选择 (2)2.2系统总体框图和原理 (3)2.3电源供电部分 (3)2.4AT89C51单片机 (4)2.5单片复位电路 (5)2.6按键部分 (5)2.7显示部分 (6)2.8电路原理图 (8)第三章软件设计与仿真调试 (9)3.1 PROTEUS仿真图 (10)3.2程序流程图 (11)第四章总结与体会 (11)总结 (12)参考文献(References) (12)致谢 (13)附录 (14)0-9999计数器摘要本文所设计的计数器是采用手动计数的方式,能手动实现加一,减一,清零功能,该设计抗干扰性好,可靠性高.应用灵活,该产品应用广泛,可用于测量流水线上的产品的数量,也可以用于测量宾馆、饭店、商场、展览观、车站、码头、银行等场所的人员数量及人员流通数量.采用数码管静态显示方式。

通过人眼的观察,进行手动计数,经单片机识别按键端口的电平,来进行计数显示,得到想要的数据。

关键词:体积小、功耗低、单片机、廉价、8位数码管.0-9999 COUNTERAbstractThis article designs the counter is uses the manual counting the way, the anti-jamming is good, the reliability is high. Applies nimbly, this product application is widespread, whether there is available as well as can inspect the product damage in survey assembly line product quantity; Also may use in surveying place and so on guesthouse, hotel, market, display view, station, wharf, bank personnel quantities and the personnel circulates quantity. The road causes the nixietube demonstration value.Through the human eye observation, carries on the manual counting, after the monolithic integrated circuit recognition pressed key port level, carries on the counting, again passes through the nixietube to demonstrate, obtains the wish data. Key words: automatic counting, infrared detection, SCM, decoding.第一章绪论1.1引言近年来,电子技术和计算机技术应用领域不断扩大,单片机技术已经成为电子技术应用领域中的一个新亮点,使单片机技术成为电子类及计算机类工作者必须掌握的专业技术之一。

基于C51单片机的000-999计数器

基于C51单片机的000-999计数器
[1]李任青.单片机原理与应用.江西:南昌大学共青学院工程技术系,2011(1):86-88。
[2]迟忠君.单片机应用技术.北京:北京邮电大学出版社,2016(6):3-5。
三、设计执行过程(请根据以下内容填写对该设计项目用到的理论知识)
1、总体设计框图(画出总体设计框图,并结合设计框图简述工作原理,写不下可另附页)
五、项目结题评审(请根据以下内容做好记录,并提交完整的项目设计报告给老师打分)
1、项目答辩记录(请将老师提的问题和答案记录下来)
问题一:
问题二:
记录人:年月日
2、结题答辩组评审意见(以下由老师填写)
成绩专家组:、年月日
3、项目成绩评定(请将老师提的问题和答案记录下来)
项目教学活页成绩:。
答辩成绩:。
若干
12MHz晶振
1个
0.8mm焊锡
若干
30pF瓷片电容
2个
10uF电解电容
1个
10k电阻
1个
5、焊接图纸和说明(用铅笔或专业软件画出详细的焊接布局设计图,元件引脚标注详细清晰。)
说明:使用ProtellDXP画出pcb布线图,布线图采用双层布线模式,蓝色导线位于底层,红色导线位于顶层。
6、实物效果照片和功能说明(用高清相机拍出实物的效果照片,此页彩色打印,要体现出任务书中的功能效果,图片高清,并附有功能效果的文字说明,可另附页。)
说明:考虑到数码管位置的摆放问题,故将程序的P1和P0对调,P0控制十位数显示,P1口控制百位数显示,其余不变。
四、项目总结(请根据以下内容做工作总结,并提交完整的项目设计报告)
1、学习小结(对学习到的知识点进行总结、归纳)
通过这次000-999计数器的设计,总体来说,我的收获很大。无论是在培养自己的实验动手能力还是在自己独立思考能力方面。在此次点阵设计的过程中,更进一步的熟悉了proteus软件和DXP软件的使用以及加深了对芯片结构的了解和掌握,加强了对c语言的认识,学会了如何拆分数字的百位,十位以及个位,并将其传送到单片机的各个端口,了解了数码管的内部结构,在以后的学习中会有很大的帮助。

stm共阳数码管动态显示0~9999对应的代码

stm共阳数码管动态显示0~9999对应的代码

stm共阳数码管动态显示0~9999对应的代码文章主题:STM共阳数码管动态显示0~9999对应的代码在嵌入式系统开发领域,常常会使用到数码管来显示数字信息。

而对于STM32系列单片机来说,共阳数码管是一种常用的显示设备。

本文将以 STM 单片机为例,介绍如何动态显示 0 到 9999 对应的代码,并讨论其实现原理。

一、STM32单片机简介STM32 是意法半导体推出的 32 位 Flash 型存储器嵌入式微控制器产品系列。

它广泛应用于工业控制、消费类电子、电源管理、医疗保健和自动控制等领域。

STM32 单片机具有丰富的外设和强大的性能,因此备受开发者的青睐。

二、共阳数码管原理共阳数码管是一种常见的 LED 数码显示器件。

在共阳数码管中,所有的 LED 二极管的阳脚都连接在一起,而阴极则分别连接到对应的引脚上。

当将对应的引脚置为低电平时,LED 点亮,从而显示出相应的数字或字母。

三、动态显示 0 到 9999 对应的代码在 STM32 单片机中,动态显示 0 到 9999 对应的代码需要通过定时器和中断的方式来实现。

在初始化阶段,需要设置定时器的时钟周期和中断频率。

然后在中断服务函数中,根据需要显示的数字进行位选和段选操作,以便在共阳数码管上显示出对应的数字。

具体代码如下:```#include "stm32f10x.h"uint8_t dis_buf[4]; // 数码管显示缓存void TIM_Configuration(void){// 设置定时器的时钟周期和中断频率// ...}void NVIC_Configuration(void){// 设置中断优先级和使能// ...}void GPIO_Configuration(void) {// 设置数码管引脚对应 STM32 的引脚 // ...}void Number_Display(uint16_t num) {// 数字分解dis_buf[0] = num / 1000;dis_buf[1] = (num % 1000) / 100; dis_buf[2] = (num % 100) / 10;dis_buf[3] = num % 10;// 依次显示// ...}void TIM2_IRQHandler(void){// 中断服务函数,动态显示数字// ...}int main(void){// 初始化// ...while (1){// 主循环// ...}}```四、个人观点和理解动态显示共阳数码管需要较为复杂的逻辑控制和定时器中断处理,但通过合适的代码编写和优化,可以实现可靠、高效的数字显示效果。

实验三 0-9999计数器的设计

实验三 0-9999计数器的设计
entity cout is
port(clk:in std_logic;
cn1,cn2,cn3,cn4:out std_logic_vector(3 downto 0));
end ;
architecture c10 of cout is
signal temp1,temp2,temp3,temp4:std_logic_vector(3 downto 0);
entity f100 is
generic(n1 :integer:=50000000);
port(clk:in std_logic;
f1:out std_logic);
end entity f100;
architecture getsec of f100 is
--signal secout1 : std_logic :='1';
教师评价:
教师签名:批改时间:年月日
接下来就是显示把计数出来的bcd码送到显示模块把四个数分别送到对应的数码管上在进程a3中译码出来虽然数码管不是同时被点亮但是由于数码管的扫描频率很快人的眼睛的错觉我们看到的四位数码管是同时亮的
桂林航天工业学院学生实验报告
课程名称
EDA技术
实验项目名称
0-9999计数器的设计
开课院(系)及实验室
电子信息与自动化学院
when others=>duan<="11111111";
end case;
end process a3;
duanxuan<=duan;
end;
四、实验结果分析
本次实验用了两个分频器,一个用于计数分出1HZ,一个用于数码管的动态显示分出25000HZ。在计数模块的CLK接入分频器分出的1HZ,也就是来一个上升沿就是一秒,当加到9向十位进一,0~9999需要四个进程,3个进位标记,上一位的进位标记,作为下一位的时钟信号,就可实现对0~9999的计数。接下来就是显示,把计数出来的BCD码送到显示模块,把四个数分别送到对应的数码管上,在进程a3中译码出来,虽然数码管不是同时被点亮,但是由于数码管的扫描频率很快,人的眼睛的错觉,我们看到的四位数码管是同时亮的。

单片机0~99加法计数器程序设计51单片机原理及应用大学论文

单片机0~99加法计数器程序设计51单片机原理及应用大学论文

课程设计课程名称51单片机原理及应用单片机“0~99”加法计数器题目名称程序设计专业班级学生姓名学号指导教师蚌埠学院计算机科学与技术系课程设计任务书课程51单片机原理及应用班级班导教师题目基于单片机“0~99”加法计数器的设计完成时间主要内容问题描述(功能要求):利用AT89C51单片机来制作一个手动计数器。

按一次按钮计数一次,计数的范围是0~99,功能显示1为0~99的显示,另一功能是0~99的数字总和,两者可以同时实现。

设计任务及要求1) 上电时,数码管显示为00。

2) 利用单片机来制作一个手动计数器,在单片机的管脚上接一个轻触开关,作为手动计数的按钮,用单片机的I/O口接数码管,作为计数器,进行加计数显示。

3)按一次按钮计数一次,计数的范围是0~99,功能显示1为0~99的显示,另一功能是0~99的数字总和,两者可以同时实现。

设计报告要求1.封面:(格式附后)2.课程设计任务书3.课程设计报告:⑴系统总体方案⑵设计思路和主要步骤⑶各功能模块和流程图⑷设计代码⑸心得体会和参考资料说明:学生完成课程设计后,提交课程设计报告及软件,要求文字通畅、字迹工整(也可用以打印),文字不少于5000 字,并装订成册。

指导时间地点上机时间,多媒体技术实验室(重型楼0411)版面要求1.题目用黑体三号,段后距18磅(或1行),居中对齐;2.标题用黑体四号,段前、段后距6磅(或0.3行);3.正文用小四号宋体,行距为1.25倍行距;4.标题按“一”、“㈠”、“1”、“⑴”顺序编号。

上机时间安排星期周次一二三四五六日第14周-第17周C51系统课程设计总学时:16刘粉[1-2节]重型楼0411C51系统课程设计总学时:16刘粉[5-6节]重型楼0411目录一.前言 (4)二.单片机介绍 (4)(一).AT89C51简介编辑 (4)(二).主要特性编辑 (5)(三).特性概述编辑 (5)(四).管脚说明编辑 (5)(五).芯片擦除编辑 (7)(六).串口通讯 (7)三.课程设计的目的和要求 (11)(一).设计目的 (11)(二).课程设计题目 (11)(三).设计任务及要求 (11)四.总体设计思路 (11)(一).硬件设计思路及系统框图 (11)1.硬件设计思路: (11)2.原器件清单 (12)3.系统框图 (12)(二).软件设计思路: (12)(三).对照表 (12)(四).程序流程图 (13)五.硬件设计 (15)(一).芯片主要特性 (15)(二)管脚说明: (15)(三).排阻的作用 (16)(四).电路图说明 (17)1.添加晶振和复位 (17)2.添加P0和P2两个按键 (17)3. 数码管动态显示 (17)六.软件设计说明 (17)七.使用Keil、preoteus软件调试仿真说明 (19)八.结束语 (20)九.参考文献 (21)附录: (22)(一).汇编源程序 (22)(二).原理图 (24)前言单片机全称叫单片微型计算机(Single Chip Microcomputer),是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

单片机“0~99”加法计数器程序设计51单片机原理及应用

单片机“0~99”加法计数器程序设计51单片机原理及应用

课程设计课程名称51单片机原理及应用题目名称单片机“0~99”加法计数器程序设计专业班级学生姓名学号指导教师蚌埠学院运算机科学与技术系课程设计任务书目录前言 (6)一.单片机介绍 (6)(一).AT89C51简介 (6)(二).主要特性 (7)(三).特性概述 (7)(四).管脚说明 (7)(五).芯片擦除 (9)(六) (9)二.课程设计的目的和要求 (13)(一).设计目的 (13)(二).课程设计题目 (13)(三).设计任务及要求 (13)三.整体设计思路 (13)(一).硬件设计思路及系统框图 (13)1.硬件设计思路: (13)2.原器件清单 (14)3.系统框图 (14)(二).软件设计思路: (14)(三).对照表 (14)(四).程序流程图 (15)四.硬件设计 (17)(一).芯片主要特性 (17)(二).管脚说明: (17)(三).排阻的作用 (18)(四).电路图说明 (19)1.添加晶振和复位 (19)2.添加P0和P2两个按键 (19)3. 数码管动态显示 (19) (19)五.软件设计说明 (19)}得和体会: (20)(二).建议和意见: (20)八.参考文献 (21)附录: (22)(一).汇编源程序 (22)(二).原理图 (24)前言单片机全称叫单片微型运算机(Single Chip Microcomputer),是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处置能力的中央处置器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、按时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上组成的一个小而完善的运算机系统。

目前单片机渗透到咱们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各类仪表的控制,运算机的网络通信与数据传输,工业自动化进程的实时控制和数据处置,普遍利用的各类智能IC卡,民用奢华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,和程控玩具、电子宠物等等,这些都离不开单片机。

单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位

单片机控制秒表显示时间为00—99(每秒自动加1),暂停,复位
(3)二次接通电源,电路依然不工作。
(4)复查电路:重新检测电路,利用万用表电流档,检测电路电流,发现电路无电流,检查40引脚VCC,发现单片机40引脚与插座短路,接触不良导致,陆续检查其他引脚。发现还有部分引脚短路。
(5)继续检查电路,直至数码管显示数字为止。
结果显示,秒表运行正常。按照预期实现了99s计时、暂停以及继续的功能。
附件
1.利用单片机完成一定的任务,你的创意(创新)是什么?
我的创意就是电路的布局,实验操作起来与仿真不同,需要注意很多细节,例如原件检测。我的电路布局既节省空间,又不影响电路结构。
2.程序
#include<reg52.h>
sbit W=P1^4;
sbit H=P1^6;
unsigned char msec,sec;
void delay(unsigned char i)
{
unsigned int j,k;
for(k=0;k<i;k++)
for(j=0;j<255;j++);
}
void To_INT(void) interrupt 1
2.元器件作用
(1)STC89C52单片机在电子行业中有着广泛的应用。AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2 个读写口线,STC89C52可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的 Flash存储器可有效地降低开发成本。
9
创新实践实训报告
学院
信息电子技术学院
专业
电子信息工程

按键实现0~9999计数器 单片机

按键实现0~9999计数器 单片机

按键调节数码管显示功能:通过按键加减数码管所显示的数字按下k1加1,最大加到9999按下k2减1,最小减到0按下k3清零复位C语言程序//---------------------------------------------------------------------- //名称:按键调节数码管显示//---------------------------------------------------------------------- //功能:通过按键加减数码管所显示的数字// 按下k1加1,最大加到9999// 按下k2减1,最小减到0// 按下k3清零复位//---------------------------------------------------------------------- //姓名:陈润源//地点:内江职业技术学院//时间:2019年4月6日21:40:41//---------------------------------------------------------------------- #include <reg51.h>#define uchar unsigned char#define uint unsigned intsbit k1 = P1^0; //加sbit k2 = P1^1; //减sbit k3 = P1^2; //复位void key(void);void display(void);uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数组char m=99,n=98; //显示初值,m,n的值决定开机显示数值//****************************************//延时程序//****************************************void delayms(uint xms){uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}//***********************************************//显示程序//***********************************************void display(void){P2=0X08;P0=table[m%10]; //显示个位delayms(5);P2=0X04;P0=table[m/10]; //显示十位delayms(5);P2=0X02;P0=table[n%10]; //显示百位delayms(5);P2=0X01;P0=table[n/10]; //显示千位delayms(5);}//***************************************************//按键处理//***************************************************void key(){if(k1==0) //检测按键是否被按下{ //延时消抖delayms(10);if(k1==0) //再次检测是否真正按下按键{m++; //m自加一if(m>=100) //如果m加到100则n加一 (限制m的取值范围) 个位、十位最大显示99 {n++; //n自加一m=0; //使m又从0开始计数if(n>=100) //如果n加到100则m=n=99 (限制n的取值范围) 百位、千位最大显示99 {m=99; //最大显示9999n=99;}}}while(!k1); //按键松开}if(k2==0) //检测按键是否被按下{ //延时消抖delayms(10); //再次检测是否真正按下按键if(k2==0){ //m自减一m--;if(m<=0) //如果m减到0则n减一 (限制n的取值范围) 个位、十位最小显示00 {m=99; //重新给m装初值n--; //n自减一if(n==-1) //如果n减到-1,则m=n=0 (限制n的取值范围) 百位、千位最小显示00{n=0; //最小显示0000m=0;}}}while(!k2); //按键松开}if(k3==0) //检测按键是否被按下{delayms(10); //延时消抖if(k3==0) //再次检测是否真正按下按键{m=0; //复位,显示0000n=0;}while(!k3); //按键松开}}void main(){while(1){ //调用按键检测key(); //数码管显示display(); }}。

51单片机按键控制数码管闪烁位置

51单片机按键控制数码管闪烁位置
display();
n--;
if (n > 3)
n = 3;}Βιβλιοθήκη }display();
}
}
void T0_INT() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
n_50ms++;
n_50ms %= 6; //10对应1Hz
if(!n_50ms)
flag = ~flag;
}
while(1)
{
if (!k_a)
{
display();
if (!k_a)
{
while (!k_a)
display();
num[n]++;
if (num[n] > 9)
num[n] = 0;
}
}
if (!k_s)
{
display();
if (!k_s)
{
while (!k_s)
display();
#include <intrins.h>
sbit k_a = P3^1;
sbit k_s = P3^3;
sbit k_l = P3^5;
sbit k_r = P3^7;
unsignedchar code SEG7[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
for(i = 0; i < 8; i++)
{
P0 = SEG7[DISP_BUFF[i]];
P2 = w;
DelayMS(1);
P2 = 0;
w = _cror_(w, 1);

基于单片机的计数器M=999的计数器的设计与实现

基于单片机的计数器M=999的计数器的设计与实现

第一章绪论i目录第一章绪论 (1)1.1选题背景 (1)1.1.1 数字单片机的技术发展 (1)1.1.2 以单片机为核心的嵌入式系统 (2)1.2本研究课题的发展趋势 (3)1.3设计研究的要求及主要内容应解决的问题 (4)第二章整体设计方案 (5)2.1设计方案选择 (5)2.2设计原理 (5)第三章硬件电路设计 (7)3.1最小系统设计 (7)3.2原理图 (10)3.3重要元器件介绍 (11)3.3.1 单片机介绍 (11)3.3.2 PCB版的介绍 (15)3.3.3 数码管的介绍 (16)3.4 PROTEUS软件介绍 (18)3.5电路仿真 (20)3.6PCB图 (22)第四章软件设计 (23)4.1系统软件设计流程图 (23)4.2C语言介绍 (24)4.3程序 (25)4.4 KEIL软件调试 (27)4.4.1 软件介绍 (27)ii第一章绪论4.4.2 系统概述 (27)4.4.3 Keil C51单片机软件开发系统的整体结构 (27)第五章焊接调试与功能说明 (29)5.1系统性能测试与功能说明 (29)5.2软件调试问题及解决 (29)结论 (31)参考文献 (33)致谢 (35)附录 (37)第一章绪论 1第一章绪论本章介绍了本研究课题的背景及意义,阐述了其发展状况。

对当前各种计数器的特点及其计数器的未来发展趋势作了概况。

另外,简要说明了本文所做的工作。

1.1 选题背景随着计数器技术的不断发展与进步,计数器的种类越来越多,应用的范围越来越广,随之而来的竞争也越来越激烈。

过硬的技术也成为众多生产厂商竞争的焦点之一。

厂商为了在竞争中处于不败之地,从而不断地改进技术,增加产品的种类。

现计数器的种类以增加到:电磁计数器、电子计数器、机械计数器(拉动机械计数器、转动机械计数器、按动机械计数器、测长机械计数器)、液晶计数器等。

计数器的应用范围也遍布印刷、纺织、印染、针织、电缆、电讯、军工、轻工、机械、开关、断路器、矿山、实行多班制的纺织行业的织布机、织带机、制线、制带、造纸、制革、薄膜、高压开关电器产品、试验设备,印刷设备、短路器、医疗、纺织、机械、仓库和码头的货运、行人及车辆过往的数量计数、冶金、食品、国防、包装、配料、石油、化工、发电、机床、仪表、自动化控制等行业。

0~9999的计数器电路的设计

0~9999的计数器电路的设计

EDA实验报告实验二:0~9999的计数器电路的设计1.实验目的(1)进一步熟悉和掌握Quartus II软件的使用。

(2)进一步熟悉和掌握GW48-CK或其他EDA实验开发系统的使用。

(3)学习和掌握VHDL进程语句和元件例化语句的使用。

2.实验容设计并调试好一个技术围为0~9999的4位十进制计数器电路CNT9999,并用GW48-CK或其他EDA实验开发系统(可选用的芯片为ispLSI 1032E-PLCC84或EPM7128S-PL84或XCS05/XCS10-PLCC84芯片)进行硬件验证。

3.实验条件(1)开发软件:Quartus II8.0。

(2)实验设备:GW48-CK EDA实验开发系统。

(3)拟用芯片:EPM7128S-PL84。

4.实验设计(1)系统原理框图为了简化设计并便于显示,本计数器电路CNT9999的设计分为两个层次,其中底层电路包括四个十进制计数器模块CNT10,再由这四个模块按照图所示的原理框图构成顶层电路CNT9999。

CNT9999电路原理框图(2)VHDL程序计数器CNT9999的底层和顶层电路均采用VHDL文本输入,有关VHDL 程序如下。

1)CNT10的VHDL源程序:--CNT10.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO:OUT STD_LOGIC);END ENTITY CNT10;ARCHITECTURE ART OF CNT10 ISSIGNAL CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(CLK,CLR,ENA)ISBEGINIF CLR='1'THEN CQI<="0000";ELSIF CLK'EVENT AND CLK='1'THENIF ENA='1'THENIF CQI="1001"THENCQI<="0000";ELSECQI<=CQI+'1';END IF;END IF;END IF;END PROCESS;PROCESS(CLK,CQI) ISBEGINIF CLK'EVENT AND CLK='1'THEN IF CQI<"1001"THENCO<='0';ELSECO<='1';END IF;END IF;END PROCESS;CQ<=CQI;END ARCHITECTURE ART;2)CNT9999的VHDL源程序:--CNT9999.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CNT9999 ISPORT(CLK:IN STD_LOGIC;CLR:IN STD_LOGIC;ENA:IN STD_LOGIC;DOUT:OUT STD_LOGIC_VECTOR(15 DOWNTO 0));END ENTITY CNT9999;ARCHITECTURE ART OF CNT9999 ISCOMPONENT CNT10 ISPORT(CLK,CLR,ENA:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO:OUT STD_LOGIC);END COMPONENT CNT10;SIGNAL S0,S1,S2,S3:STD_LOGIC;BEGINU0:CNT10 PORT MAP(CLK,CLR,ENA,DOUT(3 DOWNTO 0),S0);U1:CNT10 PORT MAP(S0,CLR,ENA,DOUT(7 DOWNTO 4),S1);U2:CNT10 PORT MAP(S1,CLR,ENA,DOUT(11 DOWNTO 8),S2);U3:CNT10 PORT MAP(S2,CLR,ENA,DOUT(15 DOWNTO 12),S3);END ARCHITECTURE ART;(3)仿真波形设置本设计包括两个层次,因此先进行底层的十进制计数器CNT10的仿真,再进行顶层CNT9999的仿真。

10.-00-99计数器

10.-00-99计数器

一.题目:00-99计数器二.主要元器件:单片机89C52··········1个共阴数码管··············2个蜂鸣器······················1个按钮开关··················1个单片机底座··············1个12MH晶振·············1个22PF电容················2个极性电容··················1个1K电阻····················2个排阻················2个NPN三极管···········1个导线若干三.主要功能:利用AT89C52单片机来制作一个手动计数器,按一下加1,计数器从00一直加到99,实现100个数值的计数功能。

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

按键调节数码管显示
功能:通过按键加减数码管所显示的数字
按下k1加1,最大加到9999
按下k2减1,最小减到0
按下k3清零复位
C语言程序
//---------------------------------------------------------------------- //名称:按键调节数码管显示
//---------------------------------------------------------------------- //功能:通过按键加减数码管所显示的数字
// 按下k1加1,最大加到9999
// 按下k2减1,最小减到0
// 按下k3清零复位
//---------------------------------------------------------------------- //姓名:陈润源
//地点:内江职业技术学院
//时间:2019年4月6日21:40:41
//---------------------------------------------------------------------- #include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit k1 = P1^0; //加
sbit k2 = P1^1; //减
sbit k3 = P1^2; //复位
void key(void);
void display(void);
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90}; //数组
char m=99,n=98; //显示初值,m,n的值决定开机显示数值
//****************************************
//延时程序
//****************************************
void delayms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//***********************************************
//显示程序
//***********************************************
void display(void)
{
P2=0X08;
P0=table[m%10]; //显示个位
delayms(5);
P2=0X04;
P0=table[m/10]; //显示十位
delayms(5);
P2=0X02;
P0=table[n%10]; //显示百位
delayms(5);
P2=0X01;
P0=table[n/10]; //显示千位
delayms(5);
}
//***************************************************
//按键处理
//***************************************************
void key()
{
if(k1==0) //检测按键是否被按下
{ //延时消抖
delayms(10);
if(k1==0) //再次检测是否真正按下按键
{
m++; //m自加一
if(m>=100) //如果m加到100则n加一 (限制m的取值范围) 个位、十位最大显示99 {
n++; //n自加一
m=0; //使m又从0开始计数
if(n>=100) //如果n加到100则m=n=99 (限制n的取值范围) 百位、千位最大显示99 {
m=99; //最大显示9999
n=99;
}
}
}
while(!k1); //按键松开
}
if(k2==0) //检测按键是否被按下
{ //延时消抖
delayms(10); //再次检测是否真正按下按键
if(k2==0)
{ //m自减一
m--;
if(m<=0) //如果m减到0则n减一 (限制n的取值范围) 个位、十位最小显示00 {
m=99; //重新给m装初值
n--; //n自减一
if(n==-1) //如果n减到-1,则m=n=0 (限制n的取值范围) 百位、千位最小显示00
{
n=0; //最小显示0000
m=0;
}
}
}
while(!k2); //按键松开
}
if(k3==0) //检测按键是否被按下
{
delayms(10); //延时消抖
if(k3==0) //再次检测是否真正按下按键
{
m=0; //复位,显示0000
n=0;
}
while(!k3); //按键松开
}
}
void main()
{
while(1)
{ //调用按键检测
key(); //数码管显示
display(); }
}。

相关文档
最新文档