基于AT89C51单片机,利用定时器设计一个两位数码 管显示电路.求详细的设计过程。

作者&投稿:秦若 (若有异议请与网页底部的电邮联系)
1、 基于AT89C51单片机,利用定时器设计一个两位数码管显示电路。 设计要求:每隔2S显示数字加1,显示初值~

这个我仿真过了 是有用的,,,是从00开始显示 到了99会从新开始从00开始加
#include
#define uchar unsigned char
#define uint unsigned int
uchar code disp[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
uchar code bit_tab[]={0xfe,0xfd};
uchar disp_buf[2];
uchar shu;
uchar count;
void delay(uchar x)
{
uchar i,j;
for(i=0;i<x;i++)
for(j=0;j<120;j++);
}
void conv(uchar flag)
{
disp_buf[0]=flag/10;
disp_buf[1]=flag%10;
}
void display()
{
uchar tem,wei;
P2=bit_tab[wei];
tem=disp_buf[wei];
P0=disp[tem];
wei++;
if(wei==2)
wei=0;
}
void time0(void) interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
if(++count==40)
{
count=0;
shu++;
if(shu==99)
shu=0;
}
}
void time1(void) interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
display();
}
void init()
{
TMOD=0x11;
EA=1;
ET0=1;
ET1=1;
TR1=1;
TR0=1;
}
main()
{
init();
while(1)
{
conv(shu);
}
}

共阳数码管中断程序:
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x83,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
uint num,a;
uchar bai,shi,ge;
void init();
void delay(uint);
void display(ucharbai,ucharshi,ucharge);
uint fb();
uint fs();
uint fg();
void main()
{
init();
while(1)
{
display(fb(),fs(),fg());
}
}
void init()
{
num=0;
a=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void display(ucharbai,ucharshi,ucharge)
{
P1=0xfd;
P0=table[bai];
delay(1);
P1=0xfb;
P0=table[shi];
delay(1);
P1=0xf7;
P0=table[ge];
delay(1);
}
void timeoff() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65526-50000)%256;
a++;
if(a%20==0)
{
num++;
if(num==999)
{
num=0;
}
}
}void delay(uint z){
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
uint fb()
{
bai=num/100;
return bai;
}
uint fs()
{
shi=num%100/10;
return shi;
}
uint fg()
{
ge =num%100%10;
return ge;
}

扩展资料
2个可编程定时/计数器·5个中断源,2个优先级(52有6个)
一个全双工串行通信口
外部数据存储器寻址空间为64kB
外部程序存储器寻址空间为64kB
逻辑操作位寻址功能·双列直插40PinDIP封装
单一+5V电源供电
CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;
RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;
ROM:用以存放程序、一些原始数据和表格;
I/O口:四个8位并行I/O口,既可用作输入,也可用作输出
T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;
五个中断源的中断控制系统;
一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;
片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最佳振荡频率为6M—12M。
参考资料来源:百度百科-51单片机


硬件很简单,我就不画图了,简单描述一下吧。在单片机最小系统的基础上,P0口接数码管的数据端,P2.6,P2.7接数码管的控制端。
程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit s1=P2^6;//十位
sbit s2=P2^7;//个位
uchar num0,num;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(uchar x)
{
uchar i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void init()
{
TMOD=0x01; //设置定时器0工作方式01
TH0=(65536-45872)/256; //装初值11.0592晶振定时50ms
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
}
void TO_time() interrupt 1
{
TH0=(65536-45872)/256; //装初值11.0592晶振定时50ms
TL0=(65536-45872)%256;
num0++;
if(40==num0) //到了40,2秒时间到
{
num0=0;
num++;
}
}
void display()
{
s1=1;
P0=table[num/10];
s1=0;
P0=0xff;
delay(5);
s2=1;
P0=table[num%10];
s2=0;

}
void main()
{
init();
while(1)
{
display();
}
}

建议看看单片机C语言程序书。

好好看书,书里讲得很清楚,网络资料也很多,应该自己掌握了。这是很基础的东西,往后你就知道了,不从基础做起,后面根本无从下手,何必为了一时安逸,毁了以后的路呢?作为一个过来人,出来恶心一下~~~~~

自己看看书吧,挺基本的,琢磨琢磨就出来了


单片机AT89C51 单个LED灯 显示0到9A到F 设计文件和 C语言设计
单片机AT89C51 单个LED灯 显示0到9A到F 已经弄好了。你说的文件,都在文件夹里面了,你自己找一下哈!

用AT89C51单片机定时\/计数器0的定时功能可构成一简单的方波发生器,实现...
;启动入口 ORG 0000H ;复位启动 LJMP START ;ORG 000BH ;T0中断 LJMP T0INT ;ORG 0100H ;LJMP START ;YSJS EQU 30H ;;主控程序 START: MOV SP,#80H ;初始堆栈值 MOV TMOD,#01H ;定时器0工作于方式1 MOV TH0,#0ECH ;定时器0定时时间=5000uS MOV TL0,#78H ;SETB ET0 ;使能定时器...

在AT89C51单片机中的DW伪指令讲的看不明白(初学者),希望哪位大大给解释...
定义字指令,就是将连续两个字节单元的内容定义为指定的数据。比如说:ORG 1000H DW 1234H 结果就是:(1000H)=34H,(1001H)=12H 手打不易,如有帮助请采纳,谢谢!!

基于MCS-51系列单片机AT89C51,设计一个步进电机控制器
另一类是用硬件构成的环形分配器,通常称硬环形分配器。功率放大器主要对环形分配器的较小输出信号进行放大,以达到驱动步进电机的目的,步进电机的基本控制包括转向控制和速度控制两个方面。从结构上看,步进电机分为三相单三拍、三相双三拍和三相六拍3种,其基本原理如下:http:\/\/wenku.baidu.com\/link...

单片机 AT89C51 内部RAM的30H~50H单元中 有几个单元? 是20个 还是 36...
不要误人子弟了!!30H到50H一共是33个单元,(比如:30H―39H一共10和单元,这个就不用解释了吧,掰开手指头就一部了然,到但是,不要忘记后面还有3AH―3FH这6个单元,所以这一共是16个,以此类推16+16+1(这里的1是指50H)=33)之所以指令中是21H是因为 21H(十六进制)=33(十进制)...

急 在线等 AT89C51单片机内共有多少个SFR? 分别是哪些 对每个位进行...
21个SFR ACC 累加器 B 用于辅助累加器做某些运算的寄存器 PSW 程序状态字 其中最高位是进\/借位标志C;PSW.6是辅助进位标志AC,用于标识加减运算中低四位向高四位的进位;PSW.4和PSW.3是寄存器组选择位RS1和RS0,用于从00H--1FH的32个存储器单元(4组)中选出当前准备使用的一组工作寄存器的...

利用AT89C51单片机在6MHZ晶振频率下,设计一简单2ms方波发生器要求使用...
程序:include <reg51.h> sbit P1_0=P1^0;\/\/位定义 unsigned char i; \/\/定义变量 void main(void){ P1_0=0;TMOD=0x01; \/\/T0定时器,工作方式1 TH0=(65536-500)\/256;TL0=(65536-500)%256; \/\/装初值 ET0=1;EA=1;TR0=1;while (1) ;} void time0 () interrupt 1 ...

AT89C51单片机取出40H单位数据,按照取出的数据点亮或熄发光二极管,取出4...
define Led_Port P1 define Beep_Port P2 unsigned char *P;P=0x40H;Led_Port=*P;Beep_Port=*P;

at89c51单片机的最小时间单位是
这跟你用的晶振有关系,但是好像可以使用的晶振的最高频率是20MHz的?不太记得了,查一下吧!

AT89C51单片机的P1--P3不能得到低电平给p0口赋值(简单的按键控制LED...
P0口内部的上拉能力极弱。一般是应该外接上拉电阻。这样,输出1的时候,才能使外电路感受到高电平。

木里藏族自治县17060106572: 基于AT89C51单片机,利用定时器设计一个两位数码 管显示电路.求详细的设计过程. -
诏河可溶: 硬件很简单,我就不画图了,简单描述一下吧.在单片机最小系统的基础上,P0口接数码管的数据端,P2.6,P2.7接数码管的控制端. 程序如下: #include #define uint unsigned int #define uchar unsigned char sbit s1=P2^6;//十位 ...

木里藏族自治县17060106572: 若AT89C51单片机的时钟频率为12MHz,要求T1产生40ms的定时,试对T1进行初始化编程 -
诏河可溶: #include <reg52.h> #define uint unsigned int #define uchar unsigned char void main() { TMOD=0x11; TH0=(65536-40000)/256; TL0=(65536-40000)%256; EA=1; ET0=1; TR0=1; while(1); } void timer1() interrupt 3 { TH0=(65536-40000)/256; TL0=(65536-40000)%256; { } //40ms后执行花括号里面的程序 }

木里藏族自治县17060106572: 用AT89C51单片机定时/计数器0的定时功能可构成一简单的方波发生器,实现周期为2s的方波, -
诏河可溶: ;启动入口 ORG 0000H ;复位启动 LJMP START ; ORG 000BH ;T0中断 LJMP T0INT ; ORG 0100H ; LJMP START ; YSJS EQU 30H ; ;主控程序 START: MOV SP,#80H ;初始堆栈值 MOV TMOD,#01H ;定时器0工作于方式1 MOV TH0,#0...

木里藏族自治县17060106572: 用at89c51单片机做一个秒表计时器 -
诏河可溶: 参考一下:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/295f9639bccb7c2f96ddd86f.html

木里藏族自治县17060106572: 用AT89C51单片机定时/计数器0的定时功能构成一简单的方波发生器 -
诏河可溶: 这是我的一个程序: #include<reg52.h> #define uchar unsigned char #define uint unsigned int /******************************************************************** * 名称 : Time0_Init() * 功能 : 定时器的初始化,11.0592MZ晶振,50ms * 输入 : 无 * ...

木里藏族自治县17060106572: 简单描述AT89C51单片机的定时计数器的设置 -
诏河可溶: 在单片机中有两个特殊功能寄存器与定时/计数器有关,这就是TMOD和TCON. 1、通过TMOD来设置定时/计数器的工作方式, 2、通过TCON来控制启停、溢出标志等等. 3、根据定时时间来确认定时初值(TH0、TL0或TH1、TL1). 具体算法是:初值X=最大计数值-计数值,方式1的最大计数值为:2^16=65536,方式0为:2^13=8192,方式2和方式3为:2^8=256

木里藏族自治县17060106572: 用AT89C51单片机的定时器/记数器T0产生1秒的定时时间,当一秒产生时,秒计数加1,秒计数到20时,自动从0开始.单片机晶振频频为12MHZ.要写出原代码! -
诏河可溶:ORG 0000H MAIN: MOV R0,#00H ;定时次数,初值00H,MOV A,#00H ;A值初值00H, LP0: MOV TMOD,#01H ;工作方式1 MOV TH0,#3CH ;定时初值50MS MOV TL0,#0B0H SETB TR0 LP1: JBC TF0,LP2 AJMP LP1 LP2: INC R0CJNE R0,#14H,LP0 ; 满20次(时间1秒)A值加一送P1口 INC A MOV P1,A MOV R0,#00H CJNE A,#14H,LP0 ; 满20后A清零重新计时 AJMP MAIN END

木里藏族自治县17060106572: 用AT89C51单片机编程如下要求的题,该怎么写?两个定时器不知怎么同时使用.求大神们帮忙!谢谢, -
诏河可溶: 首先抱歉我没多少时间去思考具体实现过程,但又不想错过这个这么好的问题.我有个思路可以给你参考下,可以回复我一起讨论:首先定时器1一直启动TR1=1,然后当定时器1计数到1S时执行TR0=~TR0,这样就达到了1S间隔输出定时器0输...

木里藏族自治县17060106572: 基于单片机AT89C51,现要用8个LED灯和单个数码管来显示9~0倒计时,定时为30ms,且灯依次亮. -
诏河可溶: 因为你只是单个LED,所以使用静态显示就好了(9个I/O口),定时30ms若不精确,可以使用简单的延时函数,若需要精确,要使用定时器T0或者T1.8个LED就是简单的I/O口高低电平了(8个I/O口).整个功能很简单,若需要详细帮助,请再联系我!

木里藏族自治县17060106572: 利用AT89C51单片机实现两个共阳数码管倒数计时99秒,求程序!!要求是C语言的 -
诏河可溶: 这是正时,改动一下 #include unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71,0x00}; unsigned char second; unsigned char keycnt; unsigned int tcnt; void main(void) { unsigned...

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