Linux系统下的51单片机数码管实现精准计时

**数码管主要是利用视觉暂留的效果,通过快速循环点亮数
码管方式,将数据呈现出来数码管是 LED 的升级,每位数码管里面继承了 8 个 LED,点亮LED就是点亮数码管**
这里写图片描述
里面的 LED。
中断寄存器的初始化:
TCON 高四位控制定时计数器的启动和中断申请
高四位: TF1,TR1,TF0,TR0
TR0开关 其他的固定
TMOD=0x01; 将工作方式寄存器TMOD置为 0000 0001 即M0=1,M1=0————工作方式一:16位定时器/计数器。同时C/T=0设置为定时器,GATE设为0。

    EA=1;                    中断允许寄存器IE打开全局中断控制
    ET0=1;                  T0——定时器/计数器的开关在中断允许寄存器IE的D1位
    TR0=1;                 定时器/计数器控制允许寄存器TCON的D4位,在GATE为0的情况下,启动,停止仅由TR0控制

这里只举例方式1
计数是16位 , 由TL0 作为低8位, TH0作为高8位 组成加1计数器
个数与初值关系: X=2^16-N

如,计算50000 (50毫秒)

TH0=(65536-50000)/256 放入高8位
TL0=(65536-50000)%256 放入低8位

要在数码管上面显示相应的值,就是点亮不同位置的 LED。数码管有共阴和共阳两种,共阴数码管公共端是所有 LED 的负极连接在一起,相反共阳数
码管公共端是所有 LED 的正极连接在一起。一般公共端称作“位选”,
控制每一个 LED 的称为“段选…….
共阴数码管
共阳数码管
数码管动态显示就是延时程序和数码管静态显示的结合,首先点亮数码管显示数值,然
后将数值显示一段时间,然后再关闭显示,重新点亮数码管显示另一个数值,实现动态显示。
下面为我自己写的计时代码:

//定时时间,作为秒计数时间,当一秒产生时,秒
//计数加1,秒计数到60时,自动从0开始。单片机
//晶振频率为12MHZ
#include<8051.h>       //linux下的头文件
#define uchar unsigned char
#define uint unsigned int
uchar  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
     0x6f};
void display(uchar miao);
uchar a,miao,shu;
uint  num;
void delay(uint z);
void init();
void main()
{
 init();
 while(1)
 {
  display(miao);   
 }

}
void timer0()__interrupt(1)__using(1) 
{
 TH0=(65536-50000)/256;   //设置50毫秒计时器
 TL0=(65536-50000)%256;   //通过循环20次实现精确控制1秒的计时
 a++;
 if(a==20)
 { 
     a=0;
   miao++;
   if(miao==60)
    miao=0;
 }

}
//初始化函数
void init()
{
 TMOD=0x01;   //将其工作方式设置为16位计时器
 TH0=(65536-50000)/256;
 TL0=(65536-50000)%256;
 EA=1;        //允许打开全局中断控制
 ET0=1;
 TR0=1;
 P0=table[miao];  //初始化传递的数据
}
//显示函数
void display(uchar miao)
{
 P0=table[miao%10]; //传递数据
 P1=1;              //打开位选
    delay(5);
    P1=0;           //关闭位选
 P0=table[miao/10];
 P1_1=1;            //打开P1_1引脚的位选
 delay(5);   
 P1_1=0;            //关闭位选


}

void delay(uint z)
{
 uint x,y;
 for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

注意将跳帽将J1短接, 学会看懂原理和其单片机的引脚图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值