Linux系统下的51单片机数码管实现精准计时
来源:互联网 发布:数控雕刻机怎么编程 编辑:程序博客网 时间:2024/06/07 15:04
**数码管主要是利用视觉暂留的效果,通过快速循环点亮数
码管方式,将数据呈现出来数码管是 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 intuchar 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短接, 学会看懂原理和其单片机的引脚图
0 0
- Linux系统下的51单片机数码管实现精准计时
- 关于PIC单片机的定时器精准计时的计算
- 精准的计时类
- 好玩的51单片机——数码管实现(二)
- Linux下的计时
- 51单片机的数码管和矩阵键盘
- 51单片机 数码管的显示与译码器
- 51单片机LED与数码管的学习
- 51单片机数码管的动态显示
- 51单片机--数码管
- 51单片机之数码管
- 51单片机数码管详解
- 51单片机点亮数码管
- LINUX下使用简单的中断程序使单片机精确计时
- 51单片机的计时/计数功能
- 用rdrtc实现linux下的精确计时
- 用rdrtc实现linux下的精确计时
- 用rdtsc实现linux下的精确计时
- 哈尔滨理工 oj2293 棋盘村
- 服务降级及dubbo中的实现示例
- Android 彻底解决城区县三级联动问题(3D,2维)
- 操作系统基础知识
- 如何在Vim+Ctags+Taglist应用中添加自定义语言: systemverilog
- Linux系统下的51单片机数码管实现精准计时
- What is the exact meaning of Runtime.getRuntime().totalMemory()
- 查找一个字符串中子串出现的次数
- unityGUI简单滚动JS
- python字典中items()和iteritems()的区别
- iOS_地图大量标记
- 构造方法
- Andromeda OS 来了,Android 再见?
- super用法