单片机程序:两位数码管记秒【加分】

作者&投稿:寿汤 (若有异议请与网页底部的电邮联系)
急求:单片机程序:两位数码管记秒【加分】;用汇编语言编写~

我前几天刚做一个,用的是51单片机,12MHZ的晶振,2个共阴的数码管,

ORG 0030H
MAIN:JB P3.7,$
LCALL DELAY
JB P3.7,$

STA: MOV R1,#00
STA1:LCALL DELAY1S
INC R1
MOV A,R1
MOV B,#10
DIV AB
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P1,A
MOV A,B
MOVC A,@A+DPTR
MOV P2,A
MOV A,R1
JNB P3.7,S1
CJNE A,#99,STA1
SJMP STA
S1: JB P3.7,$
LCALL DELAY
JB P3.7,$
MOV P1,#00H
MOV P2,#00H
LCALL DELAY1S
SJMP MAIN
DELAY: MOV R2,#20
D3: MOV R3,#248
DJNZ R3,$
DJNZ R2,D3
RET
DELAY1S:MOV R5,#100
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET


TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
图没传上来 去我空间里找吧http://hi.baidu.com/%B5%E7%D7%D3%B0%AE%BA%C3%D5%DF%D1%BE%D1%BE/blog/item/c92af7ce86941935f8dc6110.html

简单说两句,这个也不是很难,有很多种方案,说一个吧,首先是两位数码管的驱动,可以选择单片机带max7219然后外扩两个led数码管,硬件连接既简单也成熟,并且单片机驱动程序也是很成熟的,这样通过程序可以随时改变数码管显示,然后就是复位键和开始键,可以使用中断或查询方式,如果是中断,直接将其连接到外部中断和1上,如果是查询直接连到单片机的两个GPIO上,最好做个防抖动电路,防止多次运行,具体程序应该也不是很困难,呵呵,就是有点麻烦。

1.单片机用89C51或者89C52,P0 P2进行显示数据的输出, P3.0键接按键。 数码管用共阴极数码管。
2.主要功能:按键控制,按一下计秒再按停止。技术显示从0到99循环开始。
采用定时计数器T0实现秒中断:
#include <REG52.H> //注意头文件,调试的时候你的软件里面是否有这个文件
#define pb P3_0
unsigned int int_count=0;//T0中断计数
unsigned char second=0;//秒计数
unsigned char count=0;//分支选择,计数器开和关
unsigned char reg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};//共阴极数码管码值表

void Key_delay()//按键延时
{unsigned char i,j;
for(i=100;i>0;i--)
for(j=248;j>0;j--);
}
void t0() interrupt 1 using 0 //T0中断函数 4000次一个循环 一个循环一秒
{int_count++;
if(int_count==4000)
{int_count=0;
second++;
if(second>99)
second=0;
}

}
void Key_scan()//按键扫描函数
{
if(pb==1)
{Key_delay();
if(pb==1)
Key_delay();//此延时主要考虑到个人的视觉感受和按键操作合理时间
count++;
switch(count)
case 0: break;
case 1: TR0=1;break;//开定时器
case 2: TR0=0;count=0;break;
}
}

void main()
{unsigned char sacn//按键扫描变量
TMOD=0X02;//8位自动重装
TH0=0x06;
TL0=0x06;//250us中断一次
ET0=1;
EA=1;//开单片机中断
while(1)//等待中断
{if(int_count)
{sacn=int_count;
if(!(scan%40))//10ms进行一次按键扫描
Key_scan();//调用按键扫描函数
P0=seg[second/10]//10位输出
P2=seg[second%10]//个位输出
}
}
}

注意共阴极数码管的连接方式:P0P2口低位到高位分别连接到两个数码管的a到g脚,因为连接方式决定了显示数据的编码方式;P0口务必要接上拉电阻。

#include <reg52.H>
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char sec; //定义计数值,每过1/10秒,sec加一
unsigned char keycnt=0;
unsigned int tcnt; //键值判断
sbit gewei=P2^6; //个位选通定义
sbit shiwei=P2^7; //十位选通定义
void Delay(unsigned int tc) //延时程序
{
while( tc != 0 )
{
unsigned int i;
for(i=0; i<100; i++);
tc--;
}
}
void LED() //LED显示函数
{
shiwei=0;
P0=table[sec/10];
Delay(8);
shiwei=1;
gewei=0;
P0=table[sec%10];
Delay(5);
gewei=1;
}
void KEY() //按键扫描程序
{
unsigned char i,j;
if(P3^0==0)
{
for(i=20;i>0;i--) //延时去干扰
for(j=248;j>0;j--);
if(P3^0==0)
{
keycnt++;
switch(keycnt) //按下次数判断
{
case 1: //第一次按下
TH0=0x06; //对TH0 TL0赋值
TL0=0x06;
TR0=1; //开始定时
break;
case 2: //第二次按下
TR0=0; //定时结束
break;
case 3: //第三次按下
keycnt=0; //重新开始判断键值
sec=0; //计数重新从零开始
break;
}
while(P3^0==0);
}
}
} //请注意写程序时的格式规范,此处是为了节省纸张
void t0(void) interrupt 1 using 0 //定时中断服务函数
{
tcnt++; //每过250ust tcnt加一
if(tcnt==400) //计满400次(1/10秒)时
{
tcnt=0; //重新再计
sec++;
if(sec==100) //定时10秒,在从零开始计时
{
sec=0;
}
}
}
void main(void)
{
TMOD=0x02; //定时器工作在方式2
ET0=1;
EA=1;
sec=0;
while(1)
{
KEY();
LED();
}
}

先加点分咋样?

太长了,明天帮你。


2022年度江西省南昌市西湖区公开选调事业单位工作人员公告
面试成绩按百分制计,采取“四舍五入法”保留小数点后两位数。 如实际面试人数达到选调职位数与报名人数1:4比例要求时,根据选调计划数和面试成绩从高分到低分的顺序,按照1:3的比例确定进入现场资格审查。如遇末位同分情况,一并进入现场资格审查。如选调职位实际参加面试人数未达到1:4比例时,该职位考生面试成绩须达...

计算机初中奥赛学习内容noip
32位二进制数 0~232-1 00000000H~0FFFFFFFFH 带符号数的机器码表示方法1.带符号二进制数的表示...A.以笔划多少 B.以部首 C.以ASCⅡ码 D.以机内码十进制数2004等值于八进制数( B )。A. 3077 ...光盘存储器(CD-ROM):普通的CD-ROM,只能读,不能写; CD盘片的存储量大约是650 MB。 输入设备 ...

LED封装技术的结构类型
点、面光源现已开发出数百种封装外形及尺寸,供市场及客户适用。LED发光显示器可由数码管或米字管、符号管、矩陈管组成各种多位产品,由实际需求设计成各种形状与结构。以数码管为例,有反射罩式、单片集成式、单条七段式等三种封装 结构,连接方式有共阳极和共阴极两种,一位就是通常说的数码管,两位以上的一般称作...

主板诊断故障代码是什么.是内存发生问题还是显卡~等等.我要具体的回...
现在是向前查代码状态,显示约半秒后将十六进制的故障代码显示在千百位,将代码个数显示在十个位 -E ...视频显示器已停用,端口B已作初始准备;即将开始电路片初始化\/存储器自动检测.查显卡中控制芯片,显存...1、特殊代码“00”和“FF”及其它起始码有三种情况出现: ①已由一系列其它代码之后再出现:“00”或...

分区参数是什么意思
主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确...每个盘片上的每个磁道又被划分为几十个扇区(Sector),通 常的容量是512byte,并按照一定规则编号为1...其高两位做柱 面数10位中的高两位,偏移7H组成的8位做柱面数10位中的低8位。由此可知,实际上用...

电脑后期修片怎样提速最快!
1、“开始”——运行中输入msconfig——确定——启动——除了输入法ctfmon以外的勾全去掉。重启。2、右键我的电脑”——属性——点高级——点启动和故障恢复中的设置——去掉所有的勾——写入调试信息选择“无”——确定——点高级下面错误报告——点禁用——2次确定。3、“开始”——打开控制面板中...

身份证编码是什么意思
根据有关规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。18位身份证号码的编排规则:1、第1、2位数字表示:所在省份的代码。2、第3、4位数字表示:所在城市的代码,01-20...

晋中介休乡镇卫生院2022公开招聘20人公告
五、招聘程序 (一)发布招聘公告 介休市乡镇卫生院2022年公开招聘领导组制定公开招聘实施方案,报晋中市人力资源和社会保障局备案后,2022年8月19日在介休市...面试没有形成竞争的岗位(即参加面试人数少于或等于招聘计划数的岗位),综合成绩最低合格分数线为70分。 笔试成绩、面试成绩和综合成绩保留两位小数(尾数四舍...

夏普数码复印机AR455 插上打印USB接口开机代码L8-01这代码维修书上的...
84 01 清除总复印张数计数器[22-05]85 ** 显示或修改当前载体印张计数器[22-06],[22-01](小...89 02 清除键操作码.记忆数据 键入"2"按复印键90 1 显示[47]AE传感器增益数据80V *** 60V **...6: 夏普数码复印机用户程序模式夏普数码复印机用户程序模式注:*号为缺省值AR158\/AL12401.进入方式....

红警2共和国之辉window7怎么玩不了啊
假如是玩游戏、做3D时才花屏那么在排除掉散热问题后你可以先尝试着换一个版本的显卡驱动试下,因为有可能是显卡驱动与程序本身不兼容的原因或驱动存在BUG造成...在“目标网路”中,填上四个16进制的两位数,中间用小点隔开,联机的每台电脑都要一样。 如: 00.00.00.00 或: 56.78.12.34 退出游戏重新进入,也可能需要...

威县18356122249: 用AT89C51单片机编写一个C语言程序实现2个数码管秒计数器,用4个按键分别控制暂停、加一秒、减一秒和继续 -
宇文瑶方希: #include<reg51.h>#define uchar unsigned char; uchar LED1,LED2; uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar num=0;sec,key; void delay(unsigned int a) { unsigned int i,j; for(i=0;i<a;i++) for(j=0;j<120;j++); } void ...

威县18356122249: 设计一个单片机编程,两位的简易秒表,记时单位60 - 50s,用两位的数码管 -
宇文瑶方希: #include unsigend char sec = 0; unsigend char code ledchar[] = {0xC0,x0F9, 0xA4, 0xB0 ,0x99, 0x92, 0x82, 0xF8, 0x80 ,0x90}; void ConfigTimer0() {TMOD = 0x01;TH0 = 0xFC; TL0 = 0x18; ET0 = 1; TR0= 1; EA = 1;} void main() ...

威县18356122249: avr 单片机用c写个数码管每秒加一的程序
宇文瑶方希: //秒表的设定 #include<iom16v.h> #define uint unsigned int #define uchar unsigned char #define display_data PORTC //数码管数据口 #define display_contrl PORTD //数码管控制口 uchar x[10]={0xc0,0xf9,0xa4,0xb0,0x99, //共阳数码管段码值 0x...

威县18356122249: 求编程实现倒计时的秒表,2位LED数码管显示,延时采用硬件延时的方法 -
宇文瑶方希: 用单片机的定时器T0定时,计时1秒,实现倒计时的秒表的功能. 程序如下 #include<reg51.h> unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管段码表 unsigned char second;//秒倒计时变量 ...

威县18356122249: 单片机共阴极两位数码管动态显示15秒倒计时 -
宇文瑶方希: 没有具体的原理图,所以就从原理上说明一下吧,首先应该先根据原理图推出每个数码管每个数字对应的8位驱动信号类型,既然是共阴极,那么如果给数码管对应的引脚置1,就会让该位发光,这样就可以推出从0到9的数码管驱动序列,如果是...

威县18356122249: 单片机100秒倒计时程序(两位数码管,设置复位和开始两个按钮 -
宇文瑶方希: 简单说两句,这个也不是很难,有很多种方案,说一个吧,首先是两位数码管的驱动,可以选择单片机带max7219然后外扩两个led数码管,硬件连接既简单也成熟,并且单片机驱动程序也是很成熟的,这样通过程序可以随时改变数码管显示,然后就是复位键和开始键,可以使用中断或查询方式,如果是中断,直接将其连接到外部中断和1上,如果是查询直接连到单片机的两个GPIO上,最好做个防抖动电路,防止多次运行,具体程序应该也不是很困难,呵呵,就是有点麻烦.

威县18356122249: 51单片机如何用定时器中断,实现按键计数加减,两位数码管,C语言,谢谢 -
宇文瑶方希: 用一个单元,存放计数值,每隔1秒加一,然后进行十进制调整,之后向P2输出即可.

威县18356122249: 单片机设计,两位秒表 -
宇文瑶方希: 这个也太简单了吧,一点难度都没有,不想写代码了.我的百度空间里有电子钟的程序,是4位LED的,有图有代码.你可以参考一下. 需要修改的就是把时和分去掉,把秒最大值改到99,再加一个按键就可以. 至于按键次数的处理,设一个变量来计算按下次数就可以.

威县18356122249: 求用单片机汇编语言帮我写一个数码管倒计时程序,用中断延时50ms循环20次得到1秒,P0口为双位7 -
宇文瑶方希: 查询方式: ORG 00H START: MOV R0,#20 MOV R4,#60 LP0: MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H MOV DPTR,#TABLE SETB TR0 LP1: JBC TF0,LP2 ACALL DISP AJMP LP1 LP2: DJNZ R0,LP0 CLR TR0 MOV R0,#20 MOV A...

威县18356122249: 求单片机数码管倒计时程序 -
宇文瑶方希: #include<reg52.h> #include <intrins.h> //内部包含延时函数 _nop_(); #define uchar unsigned char #define uint unsigned int sbit d1=P2^0; sbit key1=P0^4; sbit SDATA_595=P0^0; //串行数据输入 ----接板卡上的SPI 数据信号输入端 sbit SCLK_...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网