编程钟
❶ 急求C++MFC编程时钟
我发了!
❷ 编程中的时钟时间是如何得到
简单的说,有几种时钟,可部分参见clock_gettime函数描述。(1)挂钟,返回的是系统内核里面的一个变量。这个变量是从主板上的CMOS芯片里读出的。CMOS芯片是独立供电的,在电脑断电后也有小电池供电,就像电子表一样计时。(2)CPU的计时,是CPU有一个寄存器不断自动累加,比如2GHz的CPU每0.5ns就+1。(3)可编程时钟,有低精度的和高精度的两种,其实都是主板上的芯片,受到CPU的控制。
这个描述非常简化,系统在其中做了很多事情,其实linux时钟系统非常复杂,详情请参阅有关书籍。
❸ plc编程时钟指令操作数是什么意思
时钟指令主要指读时钟指令READ
-RTC
和
写时钟指令SET
-RTC
读时钟指令的操作数是
VB10
的话,意思就是将读出的时间放到VB10为起始的8个字节
即VB10
代表年
VB11
月
VB12
日
VB13
时
VB14
分
VB15
秒
VB16
空缺
VB17
星期几
写时钟同样道理!
❹ c语言 allegro库 中的时钟怎么用 求具体的例子~~~
基本的 PC 时钟只能是每秒触发 18.2 次, 这对于快节奏的动作游戏不是很适用. Allegro 可以用重新配置过的一个时钟例程来代替系统原来的,这个重编程过的时钟有 更高的触发频率,但是仍然以以前的速度调用 BIOS 处理程序. 你可以设置几个你自己 的虚拟时钟, 每个可以以不同的速度运行, Allegro 将不断的重编程时钟使它们在正 确的时间被调用.因为 Allegro 改变了 PIT 始终芯片的设置,它不能和 djgpp 的 libc 里的 uclock() 函数一起使用.
int install_timer();
加载 Allegro 时钟中断处理程序. 你必须在加载任何用户时钟例程之前,和在显示 鼠标,播放 FLI 动画或者 MIDI 音乐,使用其它的 GUI 例程之前执行它.
void remove_timer();
卸载 Allegro 时钟处理程序并且将时钟的控制权交还 BIOS. 你不必明显的调用它, 因为 allegro_exit() 将为你做这些.
int install_int(void (*proc)(), int speed);
加载用户始终处理程序, 参数 speed 的单位为万分之一秒.它和 install_int_ex(proc, MSEC_TO_TIMER(speed)) 作用相同.
int install_int_ex(void (*proc)(), int speed);
在用户时钟处理程序列表上加一个函数, 如果这个函数已经被加载,则调整它的速度. speed 的单位为硬件时钟单位, 即 1193181 分之一秒. 你可以利用以下的宏将其它 时间单位转换到这个单位上:
SECS_TO_TIMER(secs) - 给出两次触发间的秒数
MSEC_TO_TIMER(msec) - 给出两次触发间的万分之一秒数
BPS_TO_TIMER(bps) - 给出每秒触发多少次
BPM_TO_TIMER(bpm) - 给出每分钟触发多少次
如果没有空间再增加新的用户时钟程序, install_int_ex() 将返回一个负值, 否则返回零. 同时只能有 16 个时钟程序在使用,并且 Allegro 的其它部分 (GUI 代码, 鼠标显示例程, rest(), FLI 播放程序, 和 MIDI 播放程序) 需要加载它们自己的处理程序, 因此你要避免同时使用它过多.
你的函数将被 Allegro 中断处理程序调用而不是被处理器直接调用, 所以它能够 按正常的 C 函数来写而不需要特别的包装. 然而, 你必须知道,它将在一个中断中 被调用,而这给你希望在函数中做的事增加了许多约束.它不能使用大数量的堆栈, 不能调用任何 DOS 例程和使用调用了 DOS 例程的 C 库函数, 而且它必须被很快 的执行.不要在时钟处理程序里写太多的复杂代码: 一个基本的规则是你应该设置 一些标志然后在你的主控制循环里来回应它们.
在象 djgpp 这样的保护模式环境里, 内存被虚拟化并可以向磁盘交换. 由于 DOS 的不可重入, 如果磁盘交换发生在中断处理程序内部,系统将痛苦的死机, 所以你 需要确认你锁住了所有时钟例程中触及的所有内存 (包括代码和数据). Allegro 将锁住它用的所有东西,但是你有责任锁住你自己处理程序的. 宏 LOCK_VARIABLE (变量), END_OF_FUNCTION(函数名), 和 LOCK_FUNCTION(函数名) 可以被用来简化 这项任务.例如, 你想用一个中断处理程序来增加一个记数变量, 就应该这样写:
volatile int counter;
void my_timer_handler()
{
counter++;
}
END_OF_FUNCTION(my_timer_handler);
在你的初始化代码里,应该锁住内存:
LOCK_VARIABLE(counter);
LOCK_FUNCTION(my_timer_handler);
很明显,如果你使用了复杂的数据结构并且在这个处理程序中调用了其它的 函数,这就显得很笨拙,所以你应该使你的中断处理程序尽量简洁.
void remove_int(void (*proc)());
从用户中断例程列表中卸载一个函数.在程序的结束处, allegro_exit() 会自动运行它.
extern int i_love_bill;
如果被设为 TRUE, 打开专门的 'windows friendly' (对瘟都死友好) 时钟模式, 这将硬件时钟中断锁在 200 次每秒的速度,而不是对它动态重编程.这个模式减少 了时钟的精确性 (例如, rest() 将延时长度误差在 5 个百万分之一秒左右), 并且阻止了垂直回扫模拟器的工作 ( 在这个模式下对 timer_simulate_retrace() 的调用被忽略). 然而, 它带来的好处是, 使得 Allegro 程序可以工作在 windows 3.1 下, 而且使在 win95 的 DOS 模式下运行而没有出错信息. 这个标记应该在你加载始终模块前被设置, 而且在时钟在激活时不能改变它. 缺省状态下, allegro_init() 如果检测到 windows 的存在,将打开这个模式.
void timer_simulate_retrace(int enable);
时钟处理程序可以被用来模拟垂直回扫中断. 回扫中断在处理平滑动画时极其有用, 但不幸的是, VGA 硬件不支持它. EGA 可以,一些 SVGA 卡也可以,但这不够, 那些方法不够标准,来使其变的有用. Allegro 使这些运作起来依靠的是对时钟编程 使其成为一个普通的中断,当它认为下一次回扫将要发生时在中断处理程序里轮询 (polling) VGA 确认处于显示器刷新时的 sync(垂直回扫同步) 中. 这些在一些情 况下工作的非常好,但是它有一大堆限制:
- 在 SVGA 模式下不要在任何时候都用回扫模拟器. 它只能在某些芯片上用, 而在其它的芯片上不行, 并且它和所有的 VESA 实现程序有冲突. 回扫模拟器 仅仅在 VGA 13h 模式和 mode-X 下可信.
- 回扫模拟器不能工作在 win95 下, 因为 win95 在我试着从 PIT 里读取逝去的 时间时返回的是一些垃圾.如果有人知道我应该怎么做这些,请告诉我!
- 回扫模拟器在时钟处理程序里关掉了中断造成了许多的等待. 这将使你的整个系 统慢下来, 还可能在用 SB 1.0 声卡播放声音时造成无声 (因为它们不支持自动 初始化 DMA: SB 2.0 及以上版本没有问题).
由于要忍受这么多的问题, 我强烈建议你不要依赖于回扫模拟器. 如果你在 mode-X 下编程,而且不在乎你的程序能否在 win95 下使用, 它好极了 ,但交给用户一个可以 关掉它的开关却是个好主意.
回扫模拟器必须在你在 mode-X 下使用三缓冲函数时打开. 它也可以被用在简单的 回扫检测上, 因为轮询 vsync() 函数在声卡或时钟中断正好发生在回扫的同时时, 偶尔会丢失回扫. 当回扫中断模拟器打开, vsync() 将检查 retrace_count (回扫 计数器) 变量而不是轮询 VGA, 因此只有在它们被其它中断屏蔽时才会丢失回扫.
extern volatile int retrace_count;
如果回扫模拟器被加载,这个会随着每次垂直回扫而递增,否则它将每秒递增 70 次 (忽略回扫).这提供了一个避开加载用户时钟中断函数的麻烦而控制你的程序速度 的有效方法.
回扫变量的速度依赖于图形模式. 在 13h 模式 和 200/400 行的 mode-X 分辨率 下是每秒 70 次 回扫, 在 240/480 行模式下是 60 次. 它可以被慢到 50 次 (在 376x282 模式下) 也可能高到 92 次 (在 400x300 模式下).
extern void (*retrace_proc)();
如果回扫模拟器被加载, 这个函数将在每次垂直回扫时被调用, 否则将被每秒调用 70 次 (忽略回扫). 将其设置为 NULL 可以关掉回叫. 这个函数必须遵守和中断函 数相同的规则 (即, 它必须被锁住, 不能调用 DOS 或 libc 函数) 而且更甚的是: 它必须被 _非常_ 快的执行, 否则回对时钟同步造成混乱. 我能想到的唯一作用是 用来对调色板做一些巧妙的处理, 而三缓冲能够用 request_modex_scroll() 函数 来实现, 且 retrace_count 变量可以用来对你的代码记时. 如果你希望在 retrace_proc 里来改变调色板,则应该使用 inline _set_color() 函数而不是常 规的 set_color() 或 set_palette(), 而且你不要去尝试在一次回扫中改变二或 三个以上的调色板入口.
void rest(long time);
Allegro 一度接管了时钟, 基本的 delay() 函数将不能再工作,所以你必须使用这 个例程来代替. 时间的单位是百万分之一秒.
void rest_callback(long time, void (*callback)())
有点象 rest(), 不过它在等待所需的离开时间的同时将不停的调用指定的函数.
❺ idt可编程时钟发生器怎么编程
IDT公司多重市场时序部总经理Kris Rausch介绍说:“这些最新的VersaClock产品在同类性能水平的可编程时钟发生器中可实现无与伦比的低功耗。VersaClock 6器件使客户能够满足其系统中严格的抖动和低功耗要求,同时又可以减少电路板空间和物料成本。凭借其出众的低相位抖动和低功耗组合,VersaClock 6器件非常适用于高端消费电子、网络、计算、工业和通信等市场要求。”
VersaClock 6可编程时钟发生器能够提供通用的输出对,可独立配置为LVDS、LVPECL、HCSL或双LVCMOS,并能够在每个输出对上独立产生1 MHz到350 MHz的任何频率。本次发布的新器件包括:
· 5P49V6901 可实现任何频率的四路输出
· 5P49V6913 可实现任何频率的两路输出
· 5P49V6914 可实现任何频率的三路输出
VersaClock 6的高灵活性可使客户以高性价比的方式得到他们真正所需要的功能,而出色的RMS相位抖动性能满足高性能应用的要求,相位噪声性能也符合最新的FPGA规范要求。
VersaClock 6器件采用4×4mm 24-VFQFPN封装,引脚与VersaClock 5器件兼容,从而可凭借最少的设计改变实现性能扩展。
❻ 单片机编程时钟 秒针达到60后分针不增加反而清零,从1开始增加,之后一切正常,这是为什么
代码我就懒得看了,出现这种问题只需检查设置分钟的代码就行了。
❼ 52单片机可编程时钟输出是必须禁止定时器2的中断的,这句话是什么意思看不懂你说的
禁不禁止没关系的,定时器2做可编程成时钟输出的时候是不产生中断的,在作为可编程时钟输出的同时也可以用于波特率的产生,两者频率相同。
T2CON EQU 0C8H
T2MOD EQU 0C9H
TR2 EQU T2CON.2
RCAP2L EQU 0CAH
RCAP2H EQU 0CBH
TH2 EQU 0CDH
TL2 EQU 0CCH ;在keil里面要先对定时器2相关的寄存器进行定义。
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
MOV TH2,#00H
mov tl2,#00h
mov rcap2l,#00h
mov rcap2h,#00h
mov t2con,#00h
mov t2mod,#02h
setb tr2
ajmp $
END
程序通过实物电路板测试通过的。
❽ 谁知道用C语言led编程时钟的程序吗,要求显示有年,月,日,还有时间的时钟谢谢
这个程序网上有很多啊
❾ VC++编程时钟 实践急需源代码~
import java.applet.Applet;
import java.util.Date;
import java.util.*;
import javax.swing.*;
import java.awt.Graphics;
import java.util.Calendar;
import java.util.GregorianCalendar;
//通过Runnable接口定义线程类
public class RunnableThread extends JApplet implements Runnable
{
Thread clockThread;
public void start()
{
if (clockThread==null)
{
clockThread=new Thread(this,"Clock");
clockThread.start();
}
}
public void run()
{
while(clockThread!=null)
{
repaint();//实际上是显示一个时钟
try
{
clockThread.sleep(1000);
}catch(InterruptedException e) {}
}
}
public void paint(Graphics g)
{
super.paint(g);
Calendar now = GregorianCalendar.getInstance();
g.drawString(now.get(Calendar.HOUR)+":"+now.get(Calendar.MINUTE)+":"+now.get(Calendar.SECOND),5,10);
}
public void stop()
{
clockThread = null;
clockThread=null;
}
}
❿ 可编程时钟发生器,什么是可编程时钟发生器
大约在主板的南桥附近,有一块母指头大的黑色芯片,上面写着那些英文和数字就是了或者直接用软件everest查看。