按键实现0~9999计数器 单片机
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计数器 秒表报告

姓名班级指导老师时间信息工程学院图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计数器设计

(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),暂停,复位

标准文档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手动计数器

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计数器

[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对应的代码在嵌入式系统开发领域,常常会使用到数码管来显示数字信息。
而对于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计数器的设计

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中译码出来,虽然数码管不是同时被点亮,但是由于数码管的扫描频率很快,人的眼睛的错觉,我们看到的四位数码管是同时亮的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(); }
}。