用C51系列的单片机控制 在8位数码管动态显示秒表 要c语言版程序 谢谢

作者&投稿:撒茂 (若有异议请与网页底部的电邮联系)
用C51系列的单片机控制 在6位数码管动态显示秒表 要c语言版程序 谢谢~

/////////////////////////////////////////////////////////////////////////////////////////////////
//程序功能:0到9999加一显示
//MCU:STC89C52
//硬件连接:P0接数据口,P1.0接段码锁存信号,P1.1接位码锁存信号。
//位码和段码各有一片573做驱动(可显示8位数码管)
//晶振大小:12MHZ
///////////////////////////////////////////////////////////////////////////////////////////////
#include
#defineuintunsignedint
#defineucharunsignedchar
sbitwei=P1^0;
sbitduan=P1^1;
uintcont,qian,bai,shi,ge,bt;//bt为一秒内循环次数标志位
ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};//共ying的代码
voidinit()
{
cont=9987;
//qian=3;
//bai=2;
//shi=1;
//ge=0;
}
/////////////////////////延时函数/////////////////////////////////////////////////////////
voiddelay(ucharz)
{
ucharx,y;
for(x=0;x<=z;x++)
for(y=0;y<=110;y++);
}
////////////////////////消影函数/////////////////////////////////////////////////////
voidxiaoying()
{
P2=0x00;
duan=1;
duan=0;

}
///////////////显示函数//////////////////////////////////////////////////////////////
voiddisplay()
{
P2=0x7f; //显示个位
wei=1;
wei=0;
P2=tab[ge];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

P2=0xbf; //显示十位
wei=1;
wei=0;
P2=tab[shi];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数

P2=0xdf; //显示百位
wei=1;
wei=0;
P2=tab[bai];
duan=1;
duan=0;
delay(2);
xiaoying(); //调用消影函数


P2=0xef; //显示千位
wei=1;
wei=0;
P2=tab[qian];
duan=1;
duan=0;
delay(2);
xiaoying();//调用消影函数

}
/////////////////////////数据处理函数/////////////////////////////////////////////
voidchuli()
{
qian=cont/1000;
bai=cont/100%10;
shi=cont/10%10;
ge=cont%10;
}
/////////////////////主函数///////////////////////////////////////////////////////////
voidmain()
{
init();

while(1)
{
while(bt!=250)
{
chuli();
display();
bt++;
}
bt=0;
cont++;
if(cont==10000)
cont=0;
}
}

只修改void refresh_led()函数即可

void refresh_led()
{
static uint8 j = 0;
P0=0x00;//要先关灯在调整输出位
switch(j)
{
case 0:ADDR0 = 0;ADDR1 = 0;ADDR2 = 0;break;
case 1:ADDR0 = 1;ADDR1 = 0;ADDR2 = 0;break;
case 2:ADDR0 = 0;ADDR1 = 1;ADDR2 = 0;break;
case 3:ADDR0 = 1;ADDR1 = 1;ADDR2 = 0;break;
case 4:ADDR0 = 0;ADDR1 = 0;ADDR2 = 1;break;
case 5:ADDR0 = 1;ADDR1 = 0;ADDR2 = 1;break;
default:break;
}
P0=number[a[j]];/调整到此处可以节省代码,便于管理
if(5>j)j++;
else j=0;
}

显示程序和硬件关联,如驱动方式、位数等,所以没有统一的程序,假定动态显示,大概思路如下:
1、设置定时中断,定时中断时间是5毫秒;
2、中断程序完成秒计时,秒数发生变化时,要将秒数对应的显示码放到显示缓冲区;
3、每次中断循环显示一位数码管;
下面是我曾经写的一个显示程序(显示缓冲区G_Disp_Buf):
#define PIN_SDIN P0_0
#define PIN_ST P0_1
#define PIN_SH P0_2
#define LOC_D1 0x08
void Display(void)
{
unsigned char i,ch,loc;

if(g_disp_location>3) g_disp_location=0; // display one digit every time, total 4 digits.
ch=G_Disp_Buf[g_disp_location];
loc=LOC_D1; // D1 position,P0_3-P0_6 located D1-D4
for(i=0;i<g_disp_location;i++) loc <<=1;
P0 &=0x87; // P0_3-6 clear, disable display
PIN_ST=0;
for(i=0;i<=7;i++) // output one character
{
PIN_SH=0;
if((ch&0x80)==0) PIN_SDIN=0;
else PIN_SDIN=1;
ch <<=1;
PIN_SH =1;
}
PIN_ST=1; // character ready
P0 |=loc; // set D1,D2,D3 or D4 ,enable display
g_disp_location++;
}

LZ很多东西没讲明白:
1.晶振多大?
2.数码管类型,共阳?共阴?
3.数码管段选,即数据接口在哪里?
4.数码管位选接口在哪里?低电平选通 还是 高电平选通?
5.八位数码管,仅显示秒表?秒表就是说,全是秒,高位表示 几万 或 几千 秒,而不是分。


C51单片机分类
从AT89C51升级到AT89S51 ,也是同理。和S51比起来,C51就要逊色一些,实际应用市场方面技术的进步是永远向前的。上面这些就是AT89S51的由来 下面是初学网友对51系列的选型的常见问题 1问:网友常见问题:请问现在学习51系列单片机应该选择AT89C51还是89S51?答:89C51和89S51内核相同,89S51针对89C51的明显的几个...

51系列单片机的含义是什么?
目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机即是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。 当前常用的51系列单片机主要产品有: *Intel的:80C31、80C51、87C51,80C32、80C52、87C52等; *...

C51系列单片机的实际运用
单片机的主要应用领域 由于单片机有许多优点,因此其应用领域之广,几乎到了无孔不入的地步。单片机应用的主要领域有:1) 智能化家用电器:各种家用电器普遍采用单片机智能化控制代替传统的电子线路控制,升级换代,提高档次。如洗衣机、空调、电视机、录像机、微波炉、电冰箱、电饭煲以及各种视听设备等。...

单片机中c51 pic 区别
不是C51,是51系列单片机.51系列单片机和PIC系列单片机的在内部结构上完全不一样:51单片机的一个指令周期占12个机器周期,但PIC单片机一个指令周期只占4个机器周期;51单片机有上百条指令,属于RISC系统,PIC的中端8位单片机最多只有38条指令属于CISC系统。传统型51单片机只有40和44和20引脚的,而PIC的...

请问51单片机(8052)电源输入电流有何要求或限制?
对于C51系列的单片机,总的来说,供电电压为5V,上下偏差0.5V。对于LV(低电压)的单片机,如AT89LV××系列的单片机,标准工作电压低至3.3V,上下偏差0.3V。一旦工作电压限制了,单片机的工作电流也就确定了。但要注意的是,单片机每个端口的工作电流不要超过15毫安,否则容易因为过流而损坏单片机。事实...

单片机的种类是AT89C51单片机?
MCS是Intel公司的注册商标。凡Intel公司生产的以8051为核心单元的其他派生单片机都可以称为MCS-51系列,有时简称为51系列。MCS-51系列单片机包括8031、8051、87513个基本型和对应的低功耗型80C31、80C51、87C51。MCS-51系列及80C51单片机有多种品种。它们的引脚及指令系统相互兼容,主要在内部结构上有所...

51单片机的内核 的单片机有哪些?
现在用的最多的单片机应该是 AT89S52 你应该多看年关书就知道了。目前的51单片机的指令只能做加减神除...但是你也知道,再难的运算也是以这四个为基础的,只要你软件写的不错arctg运算也不是难事(好像在C51中的头文件中有这个了,你可以直接调用他的函数就行)AT89S52也是使用的C51的内核。比标准的...

C51单片机用的是C语言还是汇编语言?谢谢
两种语言都可以,因为最后烧写到芯片中的是二进制文件,该二进制文件由编辑器(如KEIL)编译连接C语言源码,或者汇编语言源码获得

c51单片机是什么
问题比较大,考试用的标准答案没有,简单的说:C51单片机是单片机的一种,是一种可编程控制元件。

单片机 msp430 与c51 的区别
msp430单片机有不同系列,有f系列,c系列。比如f系列msp40f135表示的是rom是flash型的。常用的是f系列的13系列14系列。13系列的有msp430f133和msp430f135两种。14系列的有msp430f149\\msp430f144等。比如msp4301f149有60KB的flash和2KB的ram。比起51的算是很大了。c51单片机比较有代表性的如64KB的...

秭归县13446417550: 求大神做一个C51单片机的程序.问题如下:实现8位共阴数码管循环显示数字20121111,顺便求图.不胜感激!
倚窦赖氨:;项目五 ;任务2 ;点亮8位8段LED数码管 ;CA 共阳 - Common Anode 共同正极 ;CC 共阴 - Common Cathode 共同负极 PORT_O0 EQU P0;DIGITRON字符输出 PORT_O1 EQU P2;DIGITRON字位输出 ORG 0000H LJMP MAIN ORG 0030H ...

秭归县13446417550: {汇编}麻烦哪位大神给个c51单片机频率计须8位数码管显示 -
倚窦赖氨: 展开全部8位的话,一个定时中断,一个计数器,在定时中断没有到来之前,对16位计数器的溢出次数进行累计,做成一个24位的计数单元.定时中断程序里面读取24位计数单元数值,后清零,继续计数 程序关键的部分要对这个24位计数单元进行BCD转换,三字节二进制数转BCD程序写个子程序.对这个三个字节(R0,R1,R2)连续进行24次带进位位左移,每移位一次执行一次乘2+C操作((R3,R4,R5,R6)*2+C),移位结束之后,R3-R6内的数据就是计数值的压缩BCD码,然后转换BCD码,分别存到8个存储单元. 这样后面就是调用显示子程序,用这8个存储单元的BCD数值进行数码管显示.

秭归县13446417550: 单片机是怎么控制8个数字的数码管?8个数字要64个引脚,单片机总共才40个引脚? -
倚窦赖氨: 驱动的方法有很多,你说的这是单片机直接静态驱动,这种驱动方式编程上最简单,但是消耗IO口太多,一般2位以上的数码管都不用它. 使用单片机直接动态驱动,8位数码管只需要占用16个IO口,其中8个输出段选信号,8个输出片选信号,这种方式比较常用,编程上也不是特别麻烦. 使用锁存器(比如74HC573)通过IO口分时复用来实现,8位数码管只需要8个IO口,段选和片选共用这8个IO口. 最终极的办法:通过串入并出移位寄存器级联驱动,这种方法是静态驱动,无论多少位数码管,只需占用2个IO口,单片机将段选信号串行发出,静态驱动没有片选信号.

秭归县13446417550: 关于C51单片机的计数问题 -
倚窦赖氨: 不知道你的计数依据是什么!一个16位的变量最多计数65536,要记到100万,可以定义15个16位变量(在RAM允许的情况下),当一次计数触发,从第一个变量开始计数,当记到最大即65536时,该变量清零,下一个变量开始计数,当记到...

秭归县13446417550: 跪求....用C51单片机输出频率及占空比可调的方波,分别用两个按键调增大和减小,并用三个八位数码管显 -
倚窦赖氨: 这个程序很简单的,提示你一下,但是不会给你写,因为会害了你,频率是定时器控制的 TH0=(65536-50000)/256;TL1=(65536-50000)%256;这样就能计时50ms;{ //中断里这样写 a++;} if(a<=n) { P0.1=1; //用按键控制n的值就能实现脉宽 } if(a<(m-n)&&a>n) { P0.1=0; //用按键去控制m就能实现周期也就是频率的控制 } a用完了清零 这样你就能完成你要的功能了 至于按键扫描,或者是数码管显示,还有定时器的初始化配置以及中断程序,自己解决吧

秭归县13446417550: C51单片机程序
倚窦赖氨: <p>TH0 = 0xf6;</p> <p>TL0 = 0xff;</p> <p>上两行是定时器/计数器T0的初值,因为T0是16位的,所以用TH0表示高八位,TL0表示低八位</p> <p>TH1 = 0xfd;</p> <p>TL1 = 0xfd;</p> <p>T1初值</p> <p>TMOD = 0x21;</p> <p>定时器/计数器模式...

秭归县13446417550: 用八位C51单片机如何传十六位数呢 -
倚窦赖氨: 把高位和低位分开来传就可以了.

秭归县13446417550: 跪求基于DS1302 芯片的单片机c51电子时钟代码.单片机型号是8用8位数码管显示,具有闹钟功能 -
倚窦赖氨: #include <reg51.h> typedef unsigned int uint; typedef unsigned char uchar; sbit DS1302_SDA=P1^0; sbit DS1302_SCK=P1^1; sbit DS1302_RST=P1^2; sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; sbit KEY4=P3^3; sbit BEEP=P3^7; ...

秭归县13446417550: 51内核8位单片机处理16位数据可行吗 -
倚窦赖氨: 别说是16位数据了,就是浮点数也照常处理的.只要写出程序来,多少位数据都一样处理.虽然是8位内核,不等于只能处理8位数据.

秭归县13446417550: 在c51单片机中可不可以使用长整型数据计算? 感觉51单片机是8位运算ALU,长整型数据是十六位 -
倚窦赖氨: 整型是16位的, 长整型是32位的 可以运算, 只不过没有8位的字符型速度快而已

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