模拟时钟源代码

合集下载

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

数字逻辑电路(数电)课程设计_电子秒表_VHDL实现(含完整源代码!!)

电子科技大学UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA数字逻辑设计实验报告实验题目:电子秒表学生姓名:指导老师:一、实验内容利用FPGA设计一个电子秒表,计时范围00.00 ~ 99.00秒,最多连续记录3个成绩,由两键控制。

二、实验要求1、实现计时功能:域值范围为00.00 ~ 99.00秒,分辨率0.01秒,在数码管上显示。

2、两键控制与三次记录:1键实现“开始”、“记录”等功能,2键实现“显示”、“重置”等功能。

系统上电复位后,按下1键“开始”后,开始计时,记录的时间一直显示在数码管上;按下1键“记录第一次”,次按1键“记录第二次”,再按1键“记录第三次”,分别记录三次时间。

其后按下2键“显示第一次”,次按2键“显示第二次”,再按2键“显示第三次”,数码管上分别显示此前三次记录的时间;显示完成后,按2键“重置”,所有数据清零,此时再按1键“开始”重复上述计时功能。

三、设计思路1、整体设计思路先对按键进行去抖操作,以正确的得到按键信息。

同时将按键信息对应到状态机中,状态机中的状态有:理想状态、开始状态、3次记录、3次显示、以及其之间的7次等待状态。

因为需要用数码管显示,故显示的过程中需要对数码管进行片选和段选,因此要用到4输入的多路选择器。

在去抖、计时、显示的过程中,都需要用到分频,从而得到理想频率的时钟信号。

2、分频设计该实验中有3个地方需要用到分频操作,即去抖分频(需得到200HZ时钟)、计时分频(需得到100HZ时钟)和显示分频(需得到25kHZ时钟)。

分频的具体实现很简单,需首先算出系统时钟(50MHZ)和所需始终的频率比T,并定义一个计数变量count,当系统时钟的上升沿每来到一次,count就加1,当count=T时就将其置回1。

这样只要令count=1~T/2时clk=‘0’,count=T/2+1~T时clk=‘1’即可。

带温度显示的万年历_数码管显示(附电路图和源代码)

带温度显示的万年历_数码管显示(附电路图和源代码)

设计报告设计任务:设计一个智能化万年历时钟电路,LED数码管作为电路的显示部分,按钮开关作为调时部分,通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期、温度。

并能准确计算闰年闰月的显示。

设计要求:通过与单片机连接数码管动态显示年、月、日、时、分、秒、星期等功能,并能准确计算闰年闰月的显示,三个个按钮连接P3.0、P3.1、P3.2可以精确调整每一个时间数值,通过对所设计的万年历时钟电路进行实验测试,达到了动态显示时间,随时调整时间等技术所连线路和单片机接口仿真图如图3所示:图3 仿真按键4)温度采集部分:DS18B20温度传感器,测温范围-55℃~+125℃,固有测温分辨率0.5℃。

独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

DS18B20的采集数据通过DQ传入单片机,单片机读取数据后将数据输出!如图所示:程序如下:ReadOneChar(void){unsigned char i=0;// 定义i用于循环unsigned char dat = 0;// 读取的8位数据for (i=8;i>0;i--)//8次循环{DQ = 0;// 拉低DQ总线开始读时序dat>>=1;// dat左移一位DQ = 1; //释放DQ总线if(DQ)// 如果DQ=1,执dat|=0x80;(0x80即第7位为1,如果DQ为1,即读取的数据为1,将dat的第7为置1,然后dat>>=1,循环8次结束,dat 即为读取的数据)//DQ=0,就跳过dat|=0x80;Tdelay(4);// 延时以完成此次读时序,之后再读下一数据}return(dat); 返回读取的dat}//写一个字节WriteOneChar(unsigned char dat){unsigned char i=0;//for (i=8; i>0; i--)//{DQ = 0;//DQ = dat&0x01;//Tdelay(5);//延时以完成此次读时序,之后再读下一数据DQ = 1;//dat>>=1;//}}//读取温度ReadTemperature(void){unsigned char a=0;unsigned char b=0;unsigned int t=0;float tt=0;//Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0x44);// 启动温度转换Init_DS18B20();WriteOneChar(0xCC);// 写指令,跳过ROM,WriteOneChar(0xBE);// 写指令,读暂存存储器a=ReadOneChar();//读低8位b=ReadOneChar();//读高8位t=b;//t<<=8;//t=t|a;//tt=t*0.0625;//t= tt*10+0.5;//return(t); //获得0.01°C 的精度并返回}LED数码管的选择LED数码管分为共阴和共阳两种,以利用STC89C51的P0口作为LED显示的数据部分,以P2口的七个口作为显示部分的位选,通过三八译码器和4-16译码器扩展为17位的位选分别接在一个四位数码管和13个数码管的位选部分。

MSP430单片机PWM调制的说明及源代码

MSP430单片机PWM调制的说明及源代码
频率
用于产生直流电平的滤波器仅仅是用来储存电荷的而不像交流信号滤波器那样
用来滤波因此采用了一个简单的单极RC 滤波器
4.程序流程
用MSP430F449 的Timer_B 的PWM 来产生正弦波和直流电平的程序比较简单流
程如图4 所示MSP430F449 自身有FLL 可用它来实现DCO 的频率校准但是
实现低功耗尽量避免采用有
源器件
用于交流信号的滤波器是一个
双极点级联RC 滤波器如果滤
波器阶数过高可以采用提高
的抽样频率的办法来降低滤波
器阶数滤波器的截至频率fc
由下式来计算
当R2 ? R1 时滤波器的响应较
好但是如果截至频率很接近信号带宽边沿将会导致相当大的衰减因此为了
减小滤波器的衰减截至频率应该大于信号带宽边沿但是要远小于PWM 信号的
新的正弦波抽样值载入捕获/比较寄存器CCR1 中因此产生的PWM 信号的脉冲宽
度就决定了正弦波在每一个时刻的抽样值将这个PWM 信号经过低通滤波即得
所需的正弦波
3.2 直流电平的产生
直流电平产生比较简单因为它对应的PWM 占空比是一定的直流电平直接正比
于PWM 信号的占空比要产生0.5VCC 的直流电平PWM 的占空比显然是50% 考
FLL_CTL0 = XCAP18PF; // 设置XTAL1 的负载电容
SCFQCTL = 50-1; // 1.6384MHz/32768Hz = 50,fDCO=MCLK=1.6384MHz
for (i = 50000; i; i--); // 晶振初始化延时
//***设置Timer_B***//
TBCCR2=128; //PWM 的占空比为50%,产生0.5VCC 的直流电平

STC8G 系列单片机技术参考手册说明书

STC8G 系列单片机技术参考手册说明书

STC micro TM宏晶科技STC8G 系列单片机技术参考手册资料更新日期:2019/10/22目录1概述 (1)2特性及价格 (2)2.1 STC8G1K08系列特性及价格 (2)3管脚及说明 (4)3.1 管脚图 (4)3.1.1 STC8G1K08系列管脚图 (4)3.2 管脚说明 (6)3.2.1 STC8G1K08系列管脚说明 (6)3.3 功能脚切换 (9)3.3.1 功能脚切换相关寄存器 (9)3.4 范例程序 (10)3.4.1 串口1切换 (10)3.4.2 串口2切换 (11)3.4.3 SPI切换 (12)3.4.4 PCA/CCP/PWM切换 (13)3.4.5 I2C切换 (15)3.4.6 比较器输出切换 (16)3.4.7 主时钟输出切换 (17)4封装尺寸图 (19)4.1 TSSOP20封装尺寸图 (19)4.2 QFN20封装尺寸图(3mm*3mm) (20)4.3 SOP16封装尺寸图 (21)4.4 SOP8封装尺寸图 (22)4.5 STC8系列单片机命名规则 (23)5ISP下载及典型应用线路图 (24)5.1 STC8G系列ISP下载应用线路图 (24)5.1.1 使用RS-232转换器下载 (24)5.1.2 使用PL2303-SA下载 (25)5.1.3 使用PL2303-GL下载 (26)5.1.4 使用U8-Mini工具下载 (27)5.1.5 使用U8W工具下载 (28)5.1.6 USB直接ISP下载 (29)6时钟、复位与电源管理 (30)6.1 系统时钟控制 (30)6.2 STC8G系列内部IRC频率调整 (33)6.3 系统复位 (35)6.4 系统电源管理 (37)6.5 范例程序 (38)6.5.1 选择系统时钟源 (38)6.5.2 主时钟分频输出 (40)6.5.3 看门狗定时器应用 (41)6.5.4 软复位实现自定义下载 (42)6.5.5 低压检测 (44)6.5.6 省电模式 (45)6.5.7 使用INT0/INT1/INT2/INT3/INT4中断唤醒MCU (47)6.5.8 使用T0/T1/T2/T3/T4中断唤醒MCU (50)6.5.9 使用RxD/RxD2中断唤醒MCU (54)6.5.10 使用LVD中断唤醒MCU (56)6.5.11 使用CCP0/CCP1/CCP2中断唤醒MCU (58)6.5.12 CMP中断唤醒MCU (60)6.5.13 使用LVD功能检测工作电压(电池电压) (62)7存储器 (67)7.1 程序存储器 (67)7.2 数据存储器 (68)7.2.1 内部RAM (68)7.2.2 内部扩展RAM (69)7.3 存储器中的特殊参数 (70)7.3.1 读取Bandgap电压值(从ROM中读取) (71)7.3.2 读取Bandgap电压值(从RAM中读取) (74)7.3.3 读取全球唯一ID号(从ROM中读取) (76)7.3.4 读取全球唯一ID号(从RAM中读取) (79)7.3.5 读取32K掉电唤醒定时器的频率(从ROM中读取) (82)7.3.6 读取32K掉电唤醒定时器的频率(从RAM中读取) (84)7.3.7 用户自定义内部IRC频率(从ROM中读取) (87)7.3.8 用户自定义内部IRC频率(从RAM中读取) (89)8特殊功能寄存器 (91)8.1 STC8G1K08系列 (91)8.2 特殊功能寄存器列表 (92)9I/O口 (95)9.1 I/O口相关寄存器 (95)9.2 配置I/O口 (98)9.3 I/O的结构图 (99)9.3.1 准双向口(弱上拉) (99)9.3.2 推挽输出 (99)9.3.3 高阻输入 (99)9.3.4 开漏输出 (100)9.4 范例程序 (101)9.4.1 端口模式设置 (101)9.4.2 双向口读写操作 (102)9.4.3 用STC系列MCU的I/O口直接驱动段码LCD (103)10指令系统 (123)11中断系统 (127)11.1 STC8G系列中断源 (127)11.2 STC8中断结构图 (129)11.3 STC8系列中断列表 (130)11.4 中断相关寄存器 (132)11.4.1 中断使能寄存器(中断允许位) (132)11.4.2 中断请求寄存器(中断标志位) (135)11.4.3 中断优先级寄存器 (136)11.5 范例程序 (139)11.5.1 INT0中断(上升沿和下降沿) (139)11.5.2 INT0中断(下降沿) (140)11.5.3 INT1中断(上升沿和下降沿) (141)11.5.4 INT1中断(下降沿) (143)11.5.5 INT2中断(下降沿) (144)11.5.6 INT3中断(下降沿) (146)11.5.7 INT4中断(下降沿) (147)11.5.8 定时器0中断 (148)11.5.9 定时器1中断 (150)11.5.10 定时器2中断 (151)11.5.11 UART1中断 (153)11.5.12 UART2中断 (155)11.5.13 ADC中断 (157)11.5.14 LVD中断 (159)11.5.15 PCA中断 (160)11.5.16 SPI中断 (163)11.5.17 CMP中断 (164)11.5.18 I2C中断 (166)12定时器/计数器 (169)12.1 定时器的相关寄存器 (169)12.2 定时器0/1 (170)12.3 定时器2 (173)12.4 掉电唤醒定时器 (174)12.5 范例程序 (175)12.5.1 定时器0(模式0-16位自动重载) (175)12.5.2 定时器0(模式1-16位不自动重载) (176)12.5.3 定时器0(模式2-8位自动重载) (178)12.5.4 定时器0(模式3-16位自动重载不可屏蔽中断) (179)12.5.5 定时器0(外部计数-扩展T0为外部下降沿中断) (180)12.5.6 定时器0(测量脉宽-INT0高电平宽度) (182)12.5.7 定时器0(时钟分频输出) (183)12.5.8 定时器1(模式0-16位自动重载) (185)12.5.9 定时器1(模式1-16位不自动重载) (186)12.5.10 定时器1(模式2-8位自动重载) (187)12.5.11 定时器1(外部计数-扩展T1为外部下降沿中断) (189)12.5.12 定时器1(测量脉宽-INT1高电平宽度) (190)12.5.13 定时器1(时钟分频输出) (192)12.5.14 定时器1(模式0)做串口1波特率发生器 (193)12.5.15 定时器1(模式2)做串口1波特率发生器 (197)12.5.16 定时器2(16位自动重载) (200)12.5.17 定时器2(外部计数-扩展T2为外部下降沿中断) (202)12.5.18 定时器2(时钟分频输出) (203)12.5.19 定时器2做串口1波特率发生器 (205)12.5.20 定时器2做串口2波特率发生器 (208)13串口通信 (213)13.1 串口相关寄存器 (213)13.2 串口1 (214)13.2.1 串口1模式0 (215)13.2.2 串口1模式1 (216)13.2.3 串口1模式2 (219)13.2.4 串口1模式3 (219)13.2.5 自动地址识别 (220)13.3 串口2 (222)13.3.1 串口2模式0 (222)13.3.2 串口2模式1 (223)13.4 串口注意事项 (225)13.5 范例程序 (226)13.5.1 串口1使用定时器2做波特率发生器 (226)13.5.2 串口1使用定时器1(模式0)做波特率发生器 (229)13.5.3 串口1使用定时器1(模式2)做波特率发生器 (232)13.5.4 串口2使用定时器2做波特率发生器 (236)14比较器,掉电检测,内部固定比较电压 (240)14.1 比较器内部结构图 (240)14.2 比较器相关的寄存器 (241)14.3 范例程序 (243)14.3.1 比较器的使用(中断方式) (243)14.3.2 比较器的使用(查询方式) (245)14.3.3 比较器作外部掉电检测 (247)14.3.4 比较器检测工作电压(电池电压) (249)15IAP/EEPROM (253)15.1 EEPROM相关的寄存器 (253)15.2 EEPROM大小及地址 (255)15.3 范例程序 (257)15.3.1 EEPROM基本操作 (257)15.3.2 使用MOVC读取EEPROM (260)15.3.3 使用串口送出EEPROM数据 (263)16ADC模数转换 (268)16.1 ADC相关的寄存器 (268)16.2 范例程序 (271)16.2.1 ADC基本操作(查询方式) (271)16.2.2 ADC基本操作(中断方式) (272)16.2.3 格式化ADC转换结果 (274)16.2.4 利用ADC第16通道测量外部电压或电池电压 (276)17PCA/CCP/PWM应用 (279)17.1 PCA相关的寄存器 (279)17.2 PCA工作模式 (282)17.2.1 捕获模式 (282)17.2.2 软件定时器模式 (282)17.2.3 高速脉冲输出模式 (283)17.2.4 PWM脉宽调制模式 (283)17.3 范例程序 (287)17.3.1 PCA输出PWM(6/7/8/10位) (287)17.3.2 PCA捕获测量脉冲宽度 (289)17.3.3 PCA实现16位软件定时 (292)17.3.4 PCA输出高速脉冲 (295)17.3.5 PCA扩展外部中断 (298)18同步串行外设接口SPI (301)18.1 SPI相关的寄存器 (301)18.2 SPI通信方式 (303)18.2.1 单主单从 (303)18.2.2 互为主从 (303)18.2.3 单主多从 (304)18.3 配置SPI (305)18.4 数据模式 (307)18.5 范例程序 (308)18.5.1 SPI单主单从系统主机程序(中断方式) (308)18.5.2 SPI单主单从系统从机程序(中断方式) (310)18.5.3 SPI单主单从系统主机程序(查询方式) (311)18.5.4 SPI单主单从系统从机程序(查询方式) (313)18.5.5 SPI互为主从系统程序(中断方式) (315)18.5.6 SPI互为主从系统程序(查询方式) (317)19I2C总线 (320)19.1 I2C相关的寄存器 (320)19.2 I2C主机模式 (321)19.3 I2C从机模式 (324)19.4 范例程序 (327)19.4.1 I2C主机模式访问AT24C256(中断方式) (327)19.4.2 I2C主机模式访问AT24C256(查询方式) (332)19.4.3 I2C主机模式访问PCF8563 (338)19.4.4 I2C从机模式(中断方式) (343)19.4.5 I2C从机模式(查询方式) (347)19.4.6 测试I2C从机模式代码的主机代码 (351)20增强型双数据指针 (357)20.1 范例程序 (359)20.1.1 示例代码1 (359)20.1.2 示例代码2 (359)附录A无 (361)附录B无 (366)附录C使用第三方MCU对STC8G系列单片机进行ISP下载范例程序 (429)附录D电气特性 (437)附录E应用注意事项 (439)附录F STC8G系列头文件 (440)附录G更新记录 (444)1概述STC8G系列单片机是不需要外部晶振和外部复位的单片机,是以超强抗干扰/超低价/高速/低功耗为目标的8051单片机,在相同的工作频率下,STC8G系列单片机比传统的8051约快12倍(速度快11.2~13.2倍),依次按顺序执行完全部的111条指令,STC8G系列单片机仅需147个时钟,而传统8051则需要1944个时钟。

模拟时钟

模拟时钟

《C++面向对象程序设计》实验报告目录1 问题描述 (1)2 问题分析 (1)3 程序设计主要流程图 (2)3.1 系统运行流程图 (2)3.2 界面设计 (2)3.3事件处理模块 (3)3.4 操作实现模块 (3)4 程序窗口设计步骤 (3)5 程序主要源代码 (7)6 运行结果演示 (15)7 心得体会 (15)参考文献 (16)模拟时钟程序1问题描述编写一个模拟时钟程序,此程序在屏幕左方有一指针式钟面,右方有两个矩形框,上面以数字方式显示日期和时间,该时间应与指针显示的时间一致,下方的矩形框作为秒表。

用菜单选项或按钮设置时间和秒表。

时间不必与机器系统时间相同,只要可任意设置即可。

2 问题分析查阅相关资料得知本题涉及到的主要知识点有:时钟指针运动算法、屏幕重绘方法、定时器消息、鼠标消息、菜单命令、对话框、画笔/画刷、显示文字等。

指针运动算法和屏幕重绘方法是本程序主要难点所在。

时针分针秒针,每次转动均以/30π弧度(一秒的角度)为基本单位,且都以表盘中心为转动圆心。

计算指针端点(,)X Y 的公式如下:cos sin X x l Y y l θθ=+⨯⎧⎨=+⨯⎩(,)x y :表示圆心坐标l :表示指针长度 θ:表示指针方向角注意,指针长度是指自圆心至指针一个端点的长度(是整个指针的一部分),为了方便显示每一个指针都需要计算两个端点。

三个指针的运动是相关联的,秒针转一圈引起分针运动一格,分针转一圈引起时针运动一格,因此只需要使用一个定时器消息来处理指针的运动即可。

由于屏幕的重绘速度很快(50微秒一次),如果采用全屏删除式重绘则闪烁十分明显,显示效果不佳。

在参阅多方资料之后,作者本人程序采用网上常用的方法——非删除式重绘,即假定指针将要移动一格,则先采用背景色(这里是白色)重绘原来指针以删除原来位置的指针,再采用指针的颜色在当前位置绘制指针;如果指针没有动,则直接绘制指针。

另外,秒表需要采用单独的定时器消息控制。

STCCAS单片机各个模块程序代码

STCCAS单片机各个模块程序代码

//**************************************************************************** //// STC12C5A60S2可编程时钟模块////// 说明:STC12C5A60S2单片机有三路可编程时钟输出CLKOUT0/T0/P3.4// CLKOUT1/T1/P3.5、CLKOUT2/P1.0//// 涉及寄存器:AUXR(辅助寄存器)、WAKE_CLKO(时钟与系统掉电唤醒控制寄存器) // BRT(独立波特率发生器定时器寄存器)//// 程序说明:// 本程序可选实现P3.4输出CLKOUT0时钟、P3.5输出CLKOUT1时钟// P1.0输出CLKOUT2时钟//////************************************************************************** **//#include <STC12C5A60S2.H>#include <intrins.h>//#define Port_BRT //如果想测试独立波特率发生器时钟输出请打开此句//若想测试CLKOUT1和CLKOUT0请注释此句#ifdef Port_BRT /*条件编译独立波特率发生器时钟输出*///*********************************//// CLKOUT2时钟初始化 ////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x04; //Bit2-BRTCLKO 允许P1.0配置为独立波特率发生器的时钟输出//BRT工作在1T模式下时的输出频率 = Sysclk/(256-BRT)/2 //BRT工作在12T模式下时输出频率 = Sysclk/12/(256-BRT)/2 AUXR = 0x14; //Bit4-BRTR 允许独立波特率发生器运行//Bit2-BRTx12 BRT工作在1T模式下BRT = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频}#else /*条件编译CLKOUT0时钟输出*///*********************************//// CLKOUT0时钟和CLKOUT1初始化 ////*********************************//void CLKOUT_init(void){WAKE_CLKO = 0x03; //允许将P3.4/T0脚配置为定时器0的时钟输出CLKOUT0//T0工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2//T0工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍//12T指的是每12个时钟加1与普通C51一样//允许将P3.5/T1脚配置为定时器1的时钟输出CLKOUT1,只能工作在定时器模式2下//T1工作在1T模式时的输出频率 = SYSclk/(256-TH0)/2//T1工作在12T模式时的输出频率 = SYSclk/12/(256-TH0)/2 //1T指的是每1个时钟加1,是普通C51的12倍//12T指的是每12个时钟加1与普通C51一样AUXR = 0xc0; //T0定时器速度是普通8051的12倍,即工作在1T模式下//T1定时器速度是普通8051的12倍,即工作在1T模式下TMOD = 0x22; //定时器0工作模式为方式2,自动装载时间常数//定时器1工作模式为方式2,自动装载时间常数TH0 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频TL0 = 0xff;TH1 = 0xff; //更改该寄存器的值可实现对输出的时钟频率进行分频TL1 = 0xff;TR1 = 1;TR0 = 1;}#endif//**********************************//// 主程序////**********************************//void main(){CLKOUT_init();while(1);}//**************************************************************************** //// STC12C5A60S2系统时钟模块////// 说明: STC12C5A60S2单片机有两个时钟源,内部R/C振荡时钟和外部晶体时钟// 出厂标准配置是使用外部晶体或时钟////// 涉及寄存器:CLK_DIV(时钟分频寄存器)// 由该寄存器的Bit0-2组合可实现对时钟源进行0、2、4、8、16 // 32、64、128分频// //// 程序说明:// 对外部时钟进行分频得到Sysclk,然后经过P1.0的独立波特率// 时钟输出功能Sysclk/2输出时钟频率//**************************************************************************** //#include <STC12C5A60S2.h>#include <intrins.h>#define Bus_clk 12 //若要修改系统时钟直接在此处修改//12 为 12M 的sysclk//6 为 6M 的sysclk//3 为 3M 的sysclk//1500 为 1.5M 的sysclk//750 为 750kHz 的sysclk//375 为 375kHz 的sysclk//187500 为 187.5kHz 的sysclk//93750 为 93.75kHz 的sysclk//*********************************************//// 系统时钟初始化 ////*********************************************//void Sysclk_init(void){WAKE_CLKO = 0x04; //配置P1.0口为频率输出AUXR = 0x14; //允许波特率时钟工作//工作模式为1TBRT = 0xff;#if( Bus_clk == 12 )CLK_DIV = 0x00;#elif( Bus_clk == 6 )CLK_DIV = 0x01;#elif( Bus_clk == 3 )CLK_DIV = 0x02;#elif( Bus_clk == 1500 )CLK_DIV = 0x03;#elif( Bus_clk == 750 )CLK_DIV = 0x04;#elif( Bus_clk == 375 )CLK_DIV = 0x05;#elif( Bus_clk == 187500 )CLK_DIV = 0x06;#elif( Bus_clk == 93750 )CLK_DIV = 0x07;#endif}//**********************************************//// 主程序////**********************************************//void main(){Sysclk_init();while(1);}//**************************************************************************** //// STC12C5A60S2系统省电模块////// 说明: STC12C5A60S2单片机有三种省电模式以降低功耗.空闲模式,低速模式// 掉电模式////// 涉及寄存器:PCON(电源控制寄存器)// Bit0 - IDL 控制单片机进入IDLE空闲模式// Bit1 - PD 控制单片机进入掉电模式// //// 程序说明:程序实现让单片机先工作一阵子(通过P0^3指示灯显示)// 然后进入掉电状态,利用外部中断0口来唤醒单片机工作// 唤醒后单片机将通过P0^0-3口的灯闪烁显示开始工作////************************************************************************** **//#include <STC12C5A60S2.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar Power_Down_Flag = 0; //进入掉电状态标志sbit Chip_Start_LED = P0^0; //单片机开始工作指示灯sbit Power_Down_LED_INT0 = P0^1; //INT0口掉电唤醒指示灯sbit N_Power_Down_LED_INT0 = P0^2; //INT0口没有唤醒指示灯sbit Normal_Work_LED = P0^3; //正常工作指示灯sbit Power_Down_Wakeup_INT0= P3^2; //外中断唤醒输入口void Delay_ms( uint time );void Normal_work(void);void Intp_init(void);void After_Powr_Down(void);//***********************************//// 软件延时 ////***********************************//void Delay_ms( uint time ){uint t; //延时时间 = (time*1003+16)us while(time--){for( t = 0; t < 82; t++ );}}//***********************************//// 正常工作指示//***********************************//void Normal_work(void){Normal_Work_LED = 1;Delay_ms(500);Normal_Work_LED = 0;Delay_ms(500);}void After_Power_Down(void){uchar i ;for( i = 0; i < 100; i++ ){P0 = 0x0f;Delay_ms(500);P0 = 0x00;Delay_ms(500);}}//***********************************//// 中断初始化 ////***********************************//void Intp_init(void){IT0 = 0; //外部中断源0为低电平触发EX0 = 1; //允许外部中断EA = 1; //开总中断}//***********************************//// 主程序 ////***********************************//void main(){uchar j = 0;uchar wakeup_counter = 0; //记录掉电次数P0 = 0x00;Chip_Start_LED = 1; //单片机开始工作Intp_init(); //外中断0初始化while(1){P2 = wakeup_counter;wakeup_counter++;for( j = 0; j < 250; j++ ){Normal_work(); //系统正常工作指示}Power_Down_Flag = 1; //系统开始进入掉电状态PCON = 0x02;_nop_();_nop_();_nop_();_nop_();After_Power_Down(); //掉电唤醒后}}//**********************************//// 中断服务//**********************************//void INT0_Service(void) interrupt 0{if( Power_Down_Flag ) //掉电唤醒状态指示 {Power_Down_Flag = 0;Power_Down_LED_INT0 = 1;while( Power_Down_Wakeup_INT0 == 0 ){_nop_(); //等待高电平}Power_Down_LED_INT0 = 0;}else //未掉电状态{N_Power_Down_LED_INT0 = 1; //不是掉电唤醒指示while( Power_Down_Wakeup_INT0 == 0 ){_nop_();}N_Power_Down_LED_INT0 = 0;}}//**************************************************************************** //// STC12C5A60S2 A/D转换模块////// 说明: STC12C5A60S2单片机有8路10位高速AD转换器,P1^0-P1^7//// 涉及寄存器:P1ASF(模拟功能控制寄存器)、ADC_CONTR(ADC控制寄存器)// ADC_RES、ADC_RESL(转换结果寄存器)//// 注意: 1、初次打开内部A/D模拟电源需适当延时等内部模拟电源稳定后,再启动A/D转换// 启动A/D后,在转换结束前不改变任何I/O口的状态,有利于高精度A/D 转换// 若能将定时器/串行/中断系统关闭更好。

实时时钟,日历芯片-BM8563,兼容PCF8563,参考源代码

实时时钟,日历芯片-BM8563,兼容PCF8563,参考源代码

_nop_(); _nop_(); }
/******************************************************************** 函 数 名:Stop_I2C(void) 功 能:停止 I2C 总线的传输 说 明: 调 用: 入口参数:无 返 回 值:无 ***********************************************************************/ void Stop_I2C(void) { SCL=0; _nop_(); SCL=1; SomeNOP(); SDA=1; SomeNOP(); }
/******************************************************************** 函 数 名: GetBM8563(void) 功 能:从 BM8563 的内部寄存器(时间、状态、报警等寄存器)读取数据 说 明:该程序函数用来读取 BM8563 的内部寄存器,譬如时间,报警,状态等寄存器 采用页写的方式,设置数据的个数为 no,no 参数设置为 1 就是单字节方式 调 用:Start_I2C(),SendByte(),RcvByte(),Ack_I2C(),Stop_I2C() 入口参数:sla(BM8563 从地址) , suba(BM8563 内部寄存器地址) *s(设置读取数据存储的指针) , no(传输数据的个数) 返 回 值:有,返回布尔量(bit)用来鉴定传输成功否 ***********************************************************************/ bit GetBM8563(uchar sla,uchar suba,uchar *s,uchar no) { uchar i; Start_I2C(); SendByte(sla); if(ack==0)return(0); SendByte(suba); if(ack==0)return(0); Start_I2C(); SendByte(sla+1); if(ack==0)return(0); for (i=0;i<no-1;i++) { *s=RcvByte(); Ack_I2C(0); s++; } *s=RcvByte(); Ack_I2C(1); Stop_I2C();//除最后一个字节外,其他都要从 MASTER 发应答。 return(1); }

Java实现动态模拟时钟

Java实现动态模拟时钟

Java实现动态模拟时钟本⽂实例为⼤家分享了java动态模拟时钟的具体代码,供⼤家参考,具体内容如下应⽤名称:java动态模拟时钟⽤到的知识:javaGUI,java 绘图开发环境:win10+eclipse+jdk1.8功能说明:通过java绘图画出⼀个虚拟的动态时钟效果图:源代码:import javax.swing.*;import java.awt.*;import java.util.*;import ng.Thread;import java.text.DecimalFormat;public class StillClock extends JPanel {/*** @param args*/private int hour;private int minute;private int second;//构造函数public StillClock() {setCurrentTime();}//返回⼩时public int getHour() {return hour;}public int getMinute() {return minute;}public int getSecond() {return second;}//绘制时钟protected void paintComponent(Graphics g) {super.paintComponent(g);//初始化int clockRadius = (int)(Math.min(getWidth(), getHeight()) * 0.8 * 0.5);int xCenter = getWidth() / 2;int yCenter = getHeight() / 2;//画圆g.setColor(Color.black);g.drawOval(xCenter - clockRadius, yCenter - clockRadius, 2 * clockRadius, 2 * clockRadius);g.drawString("12", xCenter - 5, yCenter - clockRadius + 15);g.drawString("9", xCenter - clockRadius + 3, yCenter + 5);g.drawString("3", xCenter + clockRadius - 10, yCenter + 3);g.drawString("6", xCenter - 3, yCenter + clockRadius - 3);//画秒针int sLength = (int)(clockRadius * 0.8);int xSecond = (int)(xCenter + sLength * Math.sin(second * (2 * Math.PI / 60)));int ySecond = (int)(yCenter - sLength * Math.cos(second * (2 * Math.PI / 60)));g.setColor(Color.red);g.drawLine(xCenter, yCenter, xSecond, ySecond);//画分针int mLenth = (int)(clockRadius * 0.65);int xMinute = (int)(xCenter + mLenth * Math.sin(minute * (2 * Math.PI / 60)));int yMinute = (int)(xCenter - mLenth * Math.cos(minute * (2 * Math.PI / 60)));g.setColor(Color.blue);g.drawLine(xCenter, yCenter, xMinute, yMinute);//画时针int hLength = (int)(clockRadius * 0.5);int xHour = (int)(xCenter + hLength * Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));int yHour = (int)(yCenter - hLength * Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));g.setColor(Color.green);g.drawLine(xCenter, yCenter, xHour, yHour);//画数字时钟g.setColor(Color.black);DecimalFormat s=new DecimalFormat("00");g.drawString(s.format(getHour()) + ":" + s.format(getMinute()) + ":" + s.format(getSecond()), xCenter - 22, yCenter - clockRadius - 15); }public void setCurrentTime() {Calendar calendar = new GregorianCalendar();this.hour = calendar.get(Calendar.HOUR_OF_DAY);this.minute = calendar.get(Calendar.MINUTE);this.second = calendar.get(Calendar.SECOND);}public static void main(String[] args) {// TODO Auto-generated method stubJFrame frame = new JFrame("DiaplayClock");frame.setResizable(false);frame.setTitle("DiaplayClock");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,350);frame.setVisible(true);while(true) {StillClock clock = new StillClock();frame.getContentPane().add(clock);clock.setVisible(true);frame.validate();try {Thread.sleep(1000);}catch (InterruptedException e) {e.printStackTrace();}clock.setVisible(false);frame.remove(clock);clock = null;frame.validate();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

基于STC89C52单片机的电子时钟研究

基于STC89C52单片机的电子时钟研究

基于STC89C52单片机的电子时钟研究一、本文概述本文旨在研究和探讨基于STC89C52单片机的电子时钟设计与实现。

STC89C52单片机作为一种高效、稳定的微控制器,在嵌入式系统设计中具有广泛的应用。

通过对其内部资源的合理配置与外部硬件电路的设计,我们可以构建出功能丰富、性能稳定的电子时钟系统。

本文将详细介绍电子时钟的硬件电路设计、软件编程、功能实现以及性能优化等方面的内容,旨在为相关领域的研究者和实践者提供有益的参考和借鉴。

在硬件电路设计方面,我们将围绕STC89C52单片机的核心功能,设计包括时钟显示、按键输入、时钟校准等功能的电路模块。

在软件编程方面,我们将采用C语言进行程序编写,实现时钟的计时、显示、控制等功能。

我们还将对电子时钟的功耗、稳定性、精度等性能进行优化和提升,以满足实际应用的需求。

通过本文的研究和探讨,我们期望能够为STC89C52单片机在电子时钟设计中的应用提供有益的思路和方法,同时也为推动嵌入式系统设计和技术发展做出一定的贡献。

二、STC89C52单片机在电子时钟设计中的应用优势STC89C52单片机在电子时钟设计中具有显著的应用优势,其独特的特性和功能使其成为电子时钟设计的理想选择。

STC89C52单片机具有较高的集成度和可靠性,能够在较小的空间内实现复杂的功能,并且具有良好的稳定性,保证了电子时钟的长期稳定运行。

STC89C52单片机具有丰富的I/O接口和扩展能力,方便与其他硬件模块进行连接和通信。

这使得电子时钟设计更加灵活,可以根据实际需求添加各种功能模块,如温度显示、日期提醒等,提高了电子时钟的实用性和便利性。

STC89C52单片机还具有低功耗的特点,能够在保证性能的同时降低能耗,延长电子时钟的使用寿命。

其编程简单易懂,便于开发人员快速上手,降低了开发成本和时间。

STC89C52单片机在电子时钟设计中具有集成度高、可靠性好、扩展能力强、低功耗和编程简单等优势,使得其在电子时钟领域得到了广泛应用。

主控信号源模块说明

主控信号源模块说明

模块介绍主控&信号源模块电源指示图1 主控&信号源按键及接口说明该模块可以完成如下五种功能的设置,具体设置方法如下:1、模拟信号源功能模拟信号源菜单由“信号源”按键进入,该菜单下按“选择/确定”键可以依次设置:“输出波形”→“输出频率”→“调节步进”→“音乐输出”→“占空比”(只有在输出方波模式下才出现)。

在设置状态下,选择“选择/确定”就可以设置参数了。

菜单如下图所示:(a)输出正弦波时没有占空比选项(b)输出方波时有占空比选项图2 模拟信号源菜单示意图注意:上述设置是有顺序的。

例如,从“输出波形”设置切换到“音乐输出”需要按3次“选择/确定”键。

下面对每一种设置进行详细说明:a.“输出波形”设置一共有6种波形可以选择:正弦波:输出频率10Hz~2MHz方波:输出频率10Hz~200KHz三角波:输出频率10Hz~200KHzDSBFC(全载波双边带调幅):由正弦波作为载波,音乐信号作为调制信号。

输出全载波双边带调幅。

DSBSC(抑制载波双边带调幅):由正弦波作为载波,音乐信号作为调制信号。

输出抑制载波双边带调幅。

FM:载波固定为20KHz,音乐信号作为调制信号。

b.“输出频率”设置“选择/确定”顺时针旋转可以增大频率,逆时针旋转减小频率。

频率增大或减小的步进值根据“调节步进”参数来。

在“输出波形”DSBFC和DSBSC时,设置的是调幅信号载波的频率;在“输出波形”FM时,设置频率对输出信号无影响。

c.“调节步进”设置“选择/确定”顺时针旋转可以增大步进,逆时针旋转减小步进。

步进分为:“10Hz”、“100Hz”、“1KHz”、“10KHz”、“100KHz”五档。

d.“音乐输出”设置设置“MUSIC”端口输出信号的类型。

有三种信号输出“音乐1”、“音乐2”、“3K+1K 正弦波”三种。

e.“占空比”设置“选择/确定”顺时针旋转可以增大占空比,逆时针旋转减小占空比。

占空比调节范围10%~90%,以10%为步进调节。

rtc的c语言源代码

rtc的c语言源代码

rtc的c语言源代码RTC(Real-Time Clock)是一种实时时钟,它能够提供精确的时间信息。

本文将介绍RTC的C语言源代码实现。

在C语言中,实现RTC功能需要借助外部芯片或模块,比如DS1302或DS3231。

这些外部模块通过与单片机的通信接口进行连接,可以向单片机提供精确的时间信息。

我们需要在C语言中定义与RTC相关的变量和函数。

例如,我们可以定义一个结构体来存储日期和时间信息:```ctypedef struct {int year;int month;int day;int hour;int minute;int second;} DateTime;```接下来,我们可以定义一些函数来读取和设置RTC的时间。

以DS1302为例,我们可以使用以下函数:```cvoid rtc_set_time(DateTime time) {// 将时间信息写入DS1302芯片}DateTime rtc_get_time() {// 从DS1302芯片读取时间信息DateTime time;return time;}```在主程序中,我们可以通过调用这些函数来获取和设置RTC的时间。

例如,我们可以使用以下代码来设置当前时间为2022年3月15日10点30分:```cDateTime time;time.year = 2022;time.month = 3;time.day = 15;time.hour = 10;time.minute = 30;time.second = 0;rtc_set_time(time);```同样地,我们可以使用以下代码来获取当前的时间信息:```cDateTime current_time = rtc_get_time();printf("当前时间:%d年%d月%d日%d点%d分%d秒\n", current_time.year, current_time.month, current_time.day, current_time.hour, current_time.minute, current_time.second);```除了设置和获取时间,RTC还可以实现定时功能。

ESP8684 技术参考手册说明书

ESP8684 技术参考手册说明书

ESP8684技术参考手册版本1.1乐鑫信息科技版权©2023关于本文档ESP8684技术参考手册面向使用ESP8684系列产品进行底层软件开发的人员,介绍了ESP8684系列产品中内置的硬件模块,包括概述、功能列表、硬件架构、编程指南、寄存器列表等信息。

本文档中的跳转在本文档中实现跳转,请参考以下建议:•发布进度速览(下一页)罗列了本文档中的所有章节,您可以从这里快速跳转至某个具体章节。

•您还可以通过文档左侧的书签,从文中的任何位置直接跳转至另一个章节。

注意,本文档已设置默认打开书签功能,但一些PDF阅读器或浏览器会忽略此设置。

因此,如果您无法找到书签功能,请尝试以下方法:–在您的浏览器中安装PDF阅读器拓展;–下载本文档,使用本地PDF阅读器进行浏览;–配置您的PDF阅读器,使其默认打开书签功能。

•大多数PDF阅读器均支持跳转功能,允许您借助按钮、菜单选项或快捷键进行跳转(向上、向下、向前、向后、后退、前进及前往页面)等。

•此外,您还可以使用本文档内置的GoBack按钮(每页右上角)快速后退至跳转之前的位置。

注意,本功能仅适用于Acrobat系列的PDF阅读器(比如Acrobat Reader和Adobe DC)以及内置Acrobat系列PDF阅读器或拓展的浏览器(比如Firefox)。

发布进度速览目录1ESP­RISC­V CPU19 1.1概述19 1.2特性19 1.3地址分布20 1.4配置与状态寄存器(CSR)201.4.1寄存器列表201.4.2寄存器22 1.5中断控制器301.5.1特性301.5.2功能描述301.5.3建议操作321.5.3.1延迟321.5.3.2配置流程321.5.4寄存器列表331.5.5寄存器33 1.6调试341.6.1概述341.6.2特性351.6.3功能描述351.6.4寄存器列表351.6.5寄存器35 1.7硬件触发器381.7.1特性381.7.2功能描述381.7.3触发执行流程391.7.4寄存器列表391.7.5寄存器39 1.8存储器保护421.8.1概述421.8.2特性421.8.3功能描述421.8.4寄存器列表421.8.5寄存器43 2通用DMA控制器(GDMA)442.1概述44 2.2特性44 2.3架构44 2.4功能描述452.4.1外设和存储间的数据传输452.4.2存储到存储的数据传输462.4.3链表462.4.4启动DMA472.4.5读链表482.4.6数据传输结束标志482.4.7访问片内RAM492.4.8仲裁50 2.5GDMA中断50 2.6编程流程512.6.1GDMA时钟与复位配置流程512.6.2GDMA TX通道配置流程512.6.3GDMA RX通道配置流程512.6.4GDMA存储器到存储器配置流程51 2.7寄存器列表53 2.8寄存器553系统和存储器73 3.1概述73 3.2主要特性73 3.3功能描述743.3.1地址映射743.3.2内部存储器753.3.3外部存储器763.3.3.1外部存储器地址映射763.3.3.2高速缓存763.3.3.3Cache操作773.3.4GDMA地址空间773.3.5模块/外设783.3.5.1模块/外设地址空间映射784eFuse控制器(eFuse)80 4.1概述80 4.2主要特性80 4.3功能描述804.3.1结构804.3.1.1EFUSE_WR_DIS824.3.1.2EFUSE_RD_DIS824.3.1.3数据存储方式824.3.2烧写参数844.3.3用户读取参数854.3.4eFuse VDDQ时序864.3.5硬件模块使用参数864.3.6中断86 4.4寄存器列表88 4.5寄存器905IO MUX和GPIO交换矩阵(GPIO,IO MUX)108 5.1概述1085.2主要特性108 5.3结构概览108 5.4通过GPIO交换矩阵的外设输入1105.4.1概述1105.4.2信号同步1105.4.3功能描述1115.4.4简单GPIO输入112 5.5通过GPIO交换矩阵的外设输出1135.5.1概述1135.5.2功能描述1135.5.3简单GPIO输出114 5.6IO MUX的直接输入输出功能1145.6.1概述1145.6.2功能描述114 5.7GPIO管脚的模拟功能115 5.8Light-sleep模式管脚功能115 5.9GPIO管脚的Hold特性115 5.10GPIO管脚供电和电源管理1155.10.1GPIO管脚供电1165.10.2电源管理116 5.11外设信号列表116 5.12IO MUX管脚功能列表122 5.13IO MUX管脚模拟功能列表123 5.14寄存器列表1235.14.1GPIO交换矩阵寄存器列表1235.14.2IO MUX寄存器列表125 5.15寄存器1265.15.1GPIO交换矩阵寄存器1265.15.2IO MUX寄存器133 6复位和时钟1366.1复位1366.1.1概述1366.1.2结构图1366.1.3特性1366.1.4功能描述137 6.2时钟1376.2.1概述1376.2.2结构图1386.2.3特性1386.2.4功能描述1396.2.4.1CPU时钟1396.2.4.2外设时钟1396.2.4.3Wireless时钟1416.2.4.4RTC时钟1417芯片Boot控制143 7.1概述143 7.2特性143 7.3功能描述1437.3.1默认配置1437.3.2Boot模式控制1447.3.3ROM代码日志打印控制1468中断矩阵(INTMTRX)147 8.1概述147 8.2特性147 8.3功能描述1478.3.1外部中断源1488.3.2CPU中断1518.3.3分配外部中断源至CPU外部中断1518.3.3.1分配一个外部中断源Source_X至CPU外部中断1518.3.3.2分配多个外部中断源Source_X n至CPU外部中断1518.3.3.3关闭CPU外部中断源Source_X1518.3.4查询外部中断源当前的中断状态151 8.4寄存器列表152 8.5寄存器1559低功耗管理(RTC_CNTL)160 9.1概述160 9.2主要特性160 9.3功能描述1609.3.1功耗管理单元(PMU)1629.3.2低功耗时钟1629.3.3定时器1639.3.4调压器1649.3.4.1数字系统调压器1649.3.4.2低功耗调压器1659.3.4.3欠压检测器165 9.4功耗模式管理1669.4.1电源域1669.4.2预设功耗模式1679.4.3唤醒源1679.4.4拒绝睡眠168 9.5寄存器列表169 9.6寄存器17110系统定时器(SYSTIMER)199 10.1概述199 10.2主要特性199 10.3时钟源选择200 10.4功能描述20010.4.1计数器20010.4.2比较器和报警20110.4.3同步操作20210.4.4中断202 10.5编程示例20210.5.1读取当前计数器的值20210.5.2在单次报警模式下配置一次性报警20310.5.3在周期报警模式下配置周期性报警20310.5.4唤醒后时间补偿203 10.6寄存器列表204 10.7寄存器20611定时器组(TIMG)217 11.1概述217 11.2主要特性217 11.3功能描述21811.3.116位预分频器与时钟选择器21811.3.254位时基计数器21811.3.3报警产生21811.3.4定时器重新加载21911.3.5RTC慢速时钟(RTC_SLOW_CLK)频率计算22011.3.6中断220 11.4配置与使用22011.4.1定时器用作简单时钟22011.4.2定时器用于单次报警22111.4.3定时器用于周期性报警22111.4.4RTC_SLOW_CLK频率计算222 11.5寄存器列表223 11.6寄存器22412看门狗定时器(WDT)234 12.1概述234 12.2数字看门狗定时器23412.2.1主要特性23412.2.2功能描述23512.2.2.1时钟源与32位计数器23512.2.2.2阶段与超时动作23612.2.2.3写保护23612.2.2.4Flash引导保护237 12.3模拟看门狗定时器23712.3.1主要特性23712.3.2SWD控制器23712.3.2.1结构23812.3.2.2工作流程238 12.4中断238 12.5寄存器23813系统寄存器(SYSTEM)240 13.1概述240 13.2主要特性240 13.3功能描述24013.3.1系统和存储器寄存器24013.3.1.1内部存储器24013.3.1.2片外存储器24113.3.2时钟配置寄存器24113.3.3中断信号寄存器24113.3.4外设时钟门控和复位寄存器241 13.4寄存器列表243 13.5寄存器24414辅助调试(ASSIST_DEBUG)253 14.1概述253 14.2主要特性253 14.3功能描述25314.3.1栈指针监测25314.3.2PC记录25314.3.3CPU调试状态记录253 14.4工作流程25314.4.1栈监测配置25314.4.2PC记录配置254 14.5寄存器列表255 14.6寄存器25615ECC硬件加速器(ECC)262 15.1概述262 15.2主要特性262 15.3专业名词定义26215.3.1ECC背景知识26215.3.1.1椭圆曲线与曲线上的点26215.3.1.2仿射坐标系与Jacobian坐标系26215.3.2ESP8684ECC相关定义26315.3.2.1内存块26315.3.2.2数据与数据块26315.3.2.3数据存储26315.3.2.4数据读取26415.3.2.5标准运算与Jacobian运算264 15.4功能描述26415.4.1密钥长度模式26415.4.2工作模式26415.4.2.1标准点乘模式26515.4.2.2有限域除法模式26515.4.2.3标准点验证模式26515.4.2.4标准点验证+标准点乘模式26515.4.2.5Jacobian点乘模式26615.4.2.6Jacobian点验证模式26615.4.2.7标准点验证+Jacobian点乘模式266 15.5时钟与复位266 15.6中断267 15.7软件配置流程267 15.8寄存器列表268 15.9寄存器26916SHA加速器(SHA)271 16.1概述271 16.2主要特性271 16.3工作模式简介271 16.4功能描述27216.4.1信息预处理27216.4.1.1附加填充比特27216.4.1.2信息解析27216.4.1.3哈希初始值(Initial Hash Value)27216.4.2哈希运算流程27316.4.2.1Typical SHA模式下的运算流程27316.4.2.2DMA-SHA模式下的运算流程27416.4.3信息摘要存储27516.4.4中断275 16.5寄存器列表276 16.6寄存器27717片外存储器加密与解密(XTS_AES)280 17.1概述280 17.2主要特性280 17.3模块结构280 17.4功能描述28117.4.1XTS算法28117.4.2密钥28117.4.3目标空间28117.4.4数据写入28217.4.5手动加密模块28217.4.6自动解密模块283 17.5软件流程283 17.6寄存器列表285 17.7寄存器28618随机数发生器(RNG)289 18.1概述289 18.2主要特性289 18.3功能描述289 18.4编程指南28918.5寄存器列表290 18.6寄存器29019UART控制器(UART)291 19.1概述291 19.2主要特性291 19.3UART架构292 19.4功能描述29319.4.1时钟与复位29319.4.2UART RAM29419.4.3波特率产生与检测29619.4.3.1波特率产生29619.4.3.2波特率检测29619.4.4UART数据帧29719.4.5AT_CMD字符格式29819.4.6RS48529819.4.6.1驱动控制29819.4.6.2转换延时29919.4.6.3总线侦听29919.4.7IrDA29919.4.8唤醒30019.4.9流控30019.4.9.1硬件流控30119.4.9.2软件流控30219.4.10UART中断302 19.5编程流程30319.5.1寄存器类型30319.5.1.1同步寄存器30319.5.1.2静态寄存器30419.5.1.3立即寄存器30519.5.2具体步骤30519.5.2.1UART n模块初始化30619.5.2.2UART n通信配置30719.5.2.3启动UART n307 19.6寄存器列表30819.6.1UART寄存器列表308 19.7寄存器31019.7.1UART寄存器31020SPI控制器(SPI)329 20.1概述329 20.2术语329 20.3特性330 20.4架构概览331 20.5功能描述33120.5.1数据模式33120.5.2FSPI总线信号描述33120.5.3数据位读/写顺序控制33420.5.4传输方式33620.5.5CPU控制的数据传输33620.5.5.1CPU控制的主机模式33620.5.5.2CPU控制的从机模式33820.5.6DMA控制的数据传输33920.5.6.1GDMA配置33920.5.6.2GDMA TX/RX Buffer长度控制34020.5.7GP-SPI2主机模式和从机模式下的数据流控制34020.5.7.1GP-SPI2功能块图34120.5.7.2主机模式下的数据流控制34220.5.7.3从机模式下的数据流控制34220.5.8GP-SPI2主机模式34320.5.8.1主机模式状态机34320.5.8.2状态控制和位模式控制寄存器34620.5.8.3主机全双工通信(仅支持1-bit模式)34920.5.8.4主机半双工通信(支持1/2/4-bit模式)35020.5.8.5DMA控制的分段配置传输35120.5.9GP-SPI2从机模式35420.5.9.1可配置的通信格式35520.5.9.2半双工通信支持的CMD值35620.5.9.3从机单次传输和从机连读传输35820.5.9.4配置从机单次传输模式35820.5.9.5配置半双工模式下从机连续传输35920.5.9.6配置全双工模式下从机连续传输359 20.6CS建立时间和保持时间控制360 20.7GP-SPI2时钟控制36120.7.1时钟相位和极性36120.7.2主机模式下的时钟控制36320.7.3从机模式下的时钟控制363 20.8GP-SPI2时序补偿363 20.9中断363 20.10寄存器列表366 20.11寄存器36721I2C主机控制器(I2C)393 21.1概述393 21.2主要特性393 21.3I2C架构394 21.4功能描述39621.4.1时钟配置39621.4.2滤除SCL和SDA噪声39621.4.3SCL空闲时产生SCL脉冲39621.4.4同步39621.4.5漏级开路输出39721.4.6时序参数配置39821.4.7超时控制39921.4.8指令配置39921.4.9TX/RX RAM数据存储40021.4.10数据转换40121.4.11寻址模式40121.4.12启动控制器401 21.5编程示例40221.5.1I2C主机写入从机,7位寻址,单次命令序列40221.5.1.1场景介绍40221.5.1.2配置示例40221.5.2I2C主机写入从机,10位寻址,单次命令序列40421.5.2.1场景介绍40421.5.2.2配置示例40521.5.3I2C主机写入从机,7位双地址寻址,单次命令序列40521.5.3.1场景介绍40621.5.3.2配置示例40621.5.4I2C主机写入从机,7位寻址,多次命令序列40721.5.4.1场景介绍40721.5.4.2配置示例40821.5.5I2C主机读取从机,7位寻址,单次命令序列40921.5.5.1场景介绍40921.5.5.2配置示例41021.5.6I2C主机读取从机,10位寻址,单次命令序列41021.5.6.1场景介绍41121.5.6.2配置示例41121.5.7I2C主机读取从机,7位双寻址,单次命令序列41221.5.7.1场景介绍41321.5.7.2配置示例41321.5.8I2C主机读取从机,7位寻址,多次命令序列41421.5.8.1场景介绍41521.5.8.2配置示例416 21.6中断417 21.7寄存器列表419 21.8寄存器42122LED PWM控制器(LEDC)438 22.1概述438 22.2特性438 22.3功能描述43922.3.1架构43922.3.2定时器43922.3.2.1时钟源43922.3.2.2时钟分频器配置44022.3.2.314位计数器44022.3.3PWM生成器44122.3.4占空比渐变44222.3.5中断443 22.4寄存器列表444 22.5寄存器44623片上传感器与模拟信号处理453 23.1概述453 23.2SAR ADC45323.2.1概述45323.2.2特性45323.2.3功能描述45323.2.3.1输入信号45423.2.3.2ADC转换和衰减45523.2.3.3DIG ADC控制器45523.2.3.4DIG ADC时钟45623.2.3.5DIG ADC FSM45623.2.3.6ADC滤波器45823.2.3.7阈值监控459 23.3温度传感器45923.3.1概述45923.3.2特性45923.3.3功能描述459 23.4中断460 23.5寄存器列表460 23.6寄存器46124相关文档和资源471词汇列表472外设相关词汇472寄存器相关缩写472寄存器的访问类型473如何配置寄存器的保留域475概述475如何配置保留域475中断配置寄存器476修订历史477表格1-1CPU地址分布20 1-3中断ID与异常向量地址31 1-5NAPOT编码的maddress38 2-1配置寄存器与外设选择关系表45 2-2链表描述符参数对齐要求50 3-1内部存储器地址映射75 3-2外部存储器地址映射76 3-3模块/外设地址空间映射表78 4-1BLOCK0参数81 4-2BLOCK1-3参数82 4-3用户读取寄存器信息85 4-4VDDQ默认时序参数配置86 5-1IO MUX Light-sleep管脚功能控制寄存器115 5-2GPIO交换矩阵外设信号117 5-3IO MUX管脚功能122 5-4IO MUX管脚的模拟功能123 6-1复位源137 6-2CPU_CLK时钟源选择139 6-3CPU_CLK时钟频率139 6-4外设时钟140 6-5APB_CLK时钟141 6-6CRYPTO_CLK时钟141 6-7MSPI_CLK时钟141 7-1管脚默认上拉/下拉144 7-2系统启动模式144 7-3ROM代码日志打印控制146 8-1CPU外部中断配置寄存器、外部中断状态寄存器、外部中断源149 9-1低功耗时钟163 9-2RTC定时器的触发条件163 9-3预设功耗模式167 9-4唤醒源168 9-5拒绝睡眠168 10-1UNIT n配置控制位201 10-2报警触发条件202 10-3同步操作202 11-1可逆计数器向上计数时的报警触发场景219 11-2可逆计数器向下计数时的报警触发场景219 12-1超时动作236 13-1内存功耗控制位241 13-2外设时钟门控与复位控制位242 15-1ECC硬件加速器内存块263 15-2ECC加速器密钥长度模式控制264 15-3ECC硬件加速器工作模式控制26416-1工作模式选择271 16-2运算标准选择272 16-3不同运算标准信息摘要的寄存器占用情况275 17-1根据Key A￿Key B生成的Key值281 17-2目标空间与寄存器堆的映射关系282 19-1UART n同步寄存器303 19-2UART n静态寄存器305 20-2GP-SPI2支持的数据模式331 20-3FSPI总线信号功能描述332 20-4各种SPI模式下使用到的信号333 20-5GP-SPI主机模式和从机模式下的数据位控制335 20-6主机模式和从机模式下支持的传输方式336 20-7GP-SPI2从机模式下数据传输中断触发条件340 20-81/2/4-bit模式下状态控制寄存器346 20-9命令值的发送顺序348 20-10地址值的发送顺序348 20-11CONF阶段BM位图353 20-12传输事务i中CONF buffer i配置示例354 20-13BM位图与待更新的寄存器354 20-14GP-SPI2从机SPI模式支持的CMD值357 20-15QPI模式支持的CMD值358 20-16主机模式下的时钟相位和极性配置363 20-17从机模式下的时钟相位和极性配置363 20-18GP-SPI2主机模式下用到的中断365 20-19GP-SPI2从机模式下用到的中断365 21-1需同步的I2C寄存器396 22-1常用配置频率及精度441 23-1SAR ADC的信号输入455 23-2温度传感器的温度偏移460 24-4ENA/RAW/ST寄存器的配置476插图1-1CPU框图19 1-2调试系统架构34 2-1具有GDMA功能的模块和GDMA通道44 2-2GDMA引擎的架构45 2-3链表结构图46 2-4链表关系图48 3-1系统结构与地址映射结构74 3-2Cache系统结构77 4-1移位寄存器电路图(前32字节)83 4-2移位寄存器电路图(后12字节)83 5-1IO MUX和GPIO交换矩阵框图109 5-2焊盘内部结构110 5-3GPIO输入经APB时钟上升沿或下降沿同步111 5-4GPIO输入信号滤波时序图112 6-1四种复位类型136 6-2系统时钟138 7-1芯片启动流程145 8-1中断矩阵结构图147 9-1低功耗管理原理图161 9-2电源管理单元的主要工作流程162 9-3RTC_SLOW_CLOCK和RTC_FAST_CLOCK163 9-4数字系统调压器164 9-5低功耗调压器165 9-6欠压检测器165 9-7欠压处理166 10-1系统定时器结构图199 10-2系统定时器生成报警200 11-1定时器组概览217 11-2定时器组架构218 12-1看门狗定时器概览234 12-2ESP8684的数字看门狗定时器235 12-3SWD控制器结构238 17-1片外存储器加解密结构280 18-1噪声源289 19-1UART架构概况292 19-2UART基本架构图292 19-3UART共享RAM图294 19-4UART控制器分频296 19-5UART信号下降沿较差时序图297 19-6UART数据帧结构297 19-7AT_CMD字符格式298 19-8RS485模式驱动控制结构图299 19-9SIR模式编解码时序图30019-10IrDA编解码结构图300 19-11硬件流控图301 19-12硬件流控信号连接图301 19-13UART编程流程306 20-1SPI模块概览331 20-2CPU控制的传输中使用的数据Buffer336 20-3GP-SPI2功能块图341 20-4GP-SPI2主机模式下的数据流控制342 20-5GP-SPI2从机模式下的数据流控制342 20-6GP-SPI2主机模式状态机345 20-7GP-SPI2主机使用全双工模式与SPI从机通信框图349 20-84-bit模式下GP-SPI2与Flash以及外部RAM的连接方式351 20-9GP-SPI2发送到Flash的SPI Quad I/O命令序列351 20-10主机模式下DMA控制的分段配置传输352 20-11GP-SPI2访问外部RAM时推荐的CS时序配置360 20-12GP-SPI2访问Flash时推荐的CS时序配置361 20-13SPI时钟模式0和时钟模式2362 20-14SPI时钟模式1和时钟模式3362 21-1I2C主机基本架构394 21-2I2C协议时序(引自The I2C-bus specification Version2.1Fig.31)395 21-3I2C时序参数(引自The I2C-bus specification Version2.1Table5)395 21-4I2C时序图398 21-5I2C命令寄存器结构399 21-6I2C主机写7位寻址的从机402 21-7I2C主机写10位寻址的从机404 21-8I2C主机写7位双地址寻址从机406 21-9I2C主机分段写7位寻址的从机407 21-10I2C主机读7位寻址的从机409 21-11I2C主机读10位寻址的从机411 21-12I2C主机从7位寻址从机的M地址读取N个数据413 21-13I2C主机分段读7位寻址的从机415 22-1LED PWM控制器架构438 22-2定时器和PWM生成器功能块439 22-3LEDC_CLK_DIV非整数时的分频440 22-4LED PWM输出信号图442 22-5输出信号占空比渐变图443 23-1SAR ADC的功能概况454 23-2DIG ADC FSM概况456 23-3APB_SARADC_SAR_PATT_TAB1_REG与样式0-3457 23-4APB_SARADC_SAR_PATT_TAB2_REG与样式4-7457 23-5样式表中的样式结构457 23-6cmd0配置示例458 23-7cmd1配置示例4581ESP­RISC­V CPU1.1概述ESP-RISC-V CPU是基于RISC-V ISA的32位内核,包括基本整数(I),乘法/除法(M)和压缩(C)标准扩展。

AT89C51数码管电子时钟源代码

AT89C51数码管电子时钟源代码
Delay_ms(10); if (P32==0) {
while(!P32); Delay_ms(10); while(!P32); ring++; if(ring==2)
ring=0; } } if (ring==1) { if((clocksec==sec)&&(clockmin==min)&&(clockhour==hour)) {
flag1=0; sec=0; } } } switch (flag1) { case 0:
if(P30==0) {
Delay_ms(10); if(P30==0) {
while(!P30); Delay_ms(10); while(!P30); sec++; if(sec==60)
sec=0; } }
码 0--9
//数据初始化 void VarInit(void) {
num = 0; sec = 0; min = 0; hour = 0;
//初始化时间
num1=0; sec1=0; min1=0;
//初始化秒表
clocksec=0; clockmin=0; clockhour=0;
//初始化闹钟时间
for(k=123;k>0;k--); }
//计时器初始化 void TimerInit(void) {
EA=1; ET1=1; EX1=1; IT1=1; TMOD=0x10; TH1=0xd8; TL1=0xf0; TR1=1; }
//开总中断
//选择计数器工作方式,选为方式 1,16 位计数器 //装入高八位数 //低八位 //计数器开始工作
} } }
//设置闹钟 void AlarmClock() {

MSP430F2471的MCLK时钟配置

MSP430F2471的MCLK时钟配置

MSP430F2471的MCLK配置MSP430F2471的时钟树:标志的方向配置。

其中需要配置的位有:XT2OFF、XT2Sx、SELMx、DIVMx。

这几个位所涉及到的寄存器如下:在BCSCTL1寄存器中,只需配置其最高位第七位的XT2OFF,此位为1时关闭XT2;此位为0时开启XT2。

该寄存器的其他位保持为默认状态即可。

在BCSCTL2寄存器中,只需配置SELMx和DIVMx,SELMx配置为10时选择XT2作为时钟源;DIVMx是MCLK的分频器控制位,当DIVMx配置为00时表示不分频,01表示2分频,10比奥斯4分频,11表示8分频,此处我的代码中配置为不分频。

该寄存器的其他位保持为默认状态即可。

在BCSCTL3寄存器中,只需配置XT2Sx和XCAPx,XT2Sx配置为10时选择3—6MHZ的晶体或振荡器;XCAPx在XTS==1的前提下应该被配置为00,即选择外部晶振。

该寄存器的其他位保持为默认状态即可。

配置MCLK作为时钟的具体方法如下:一个PUC后,基本时钟模块+使用DCOCLK用于MCLK。

如果需要的话,MCLK可以由LFXT1或者XT2(如果有这个模块的话)作为时钟源。

从DCO时钟切换MCLK源到晶体时钟(LFXT1CLK或XT2CLK)的顺序是:1。

开启晶体振荡器,并选择相应的模式2。

清除OFIFG标志3。

至少等待50微秒4。

测试OFIFG,并重复步骤2、3、4步,直到OFIFG保持清零。

XT2作为MCLK时钟的相关源代码:#include "MSP430F2471.h"void MSP430F2471_System(void){/************使用XT2振荡器****OFIFG为0晶振起************/ WDTCTL = WDTPW + WDTHOLD; // Stop WDTvolatile unsigned int iq0;P5DIR = 0x10;//设置P5.4口为输出P5SEL = 0x10;//设置P5.4口为外围模块用作MCLK信号输出BCSCTL1 &= ~XT2OFF; //XT2 is onBCSCTL2 = SELM_2;//SELM_2==10:XT2CLK when XT2 oscillatorpresent on-chip.BCSCTL3 = XT2S_2+XCAP_0;//XT2S_2 == 10:3- to 16-MHz crystal or resonator//XCAP_0 == 00:If XTS = 1 or if LFXT1Sx = 11 XCAPx should be 00.do{IFG1 &= ~OFIFG; //clear OFIFG, which is presetfor (iq0 = 0xFF; iq0 > 0; iq0--); // 至少延时50us,等待XT2起振 }while ((IFG1 & OFIFG) == OFIFG);//等待XT2启振}。

恩智浦半导体FlexIO模拟通信和定时外设应用笔记说明书

恩智浦半导体FlexIO模拟通信和定时外设应用笔记说明书

恩智浦半导体文档编号:AN12174 应用笔记第0版,2018年6月使用 FlexIO 模拟通信和定时外设1. 简介FlexIO 是用在 Kinetis 和 S32K 微控制器系列上的新外设模块。

它具有高度可配置性,能够模拟各种通信协议,例如本文档中提到的UART、I2C、SPI、I2S和LIN,以及其它一些通讯协议,像J1850、I3C、曼彻斯特。

FlexIO 作为微控制器的一个独立外设模块,并不能替代任何通信外设。

FlexIO 的主要特点是可以根据用户的需求来直接构建自己的外设。

本文的示例代码基于 S32K SDK(包含在S32DS_v2018 中的软件开发套件中)和 Bare Metal 的配置代码,以便于更好地了解什么是FlexIO。

通过这些示例,用户可以模拟不同的通信协议和 PWM 信号。

目录1. 简介 (1)2. FlexIO 模块概述 (2)3. 使用FlexIO 模拟UART (4)3.1. 简介 (4)3.2. 配置移位器和定时器 (7)3.3. 函数说明 (10)3.4. 运行例程 (11)4. 使用FlexIO模拟双SPI (12)4.1. 移位器和定时器的配置 (14)4.2. 软件概述 (18)4.3. 操作实现 (20)4.4. 运行例程 (20)5. 使用FlexIO模拟I2C总线主设备 (24)5.1. 简介 (24)5.2. 总体说明 (24)5.3. 移位器和定时器的配置 (25)5.4. 软件概述 (27)5.5. 执行 (30)5.6. 运行例程 (31)6. 使用FlexIO生成PWM (32)6.1. 简介 (32)6.2. 总体概述 (33)6.3. 定时器的配置 (33)6.4. 软件实现概述 (35)6.5. 运行例程 (36)7. 使用FlexIO 模拟I2S 总线Master (36)7.1. 总体概述 (37)7.2. 移位器和定时器的配置 (38)7.3. 软件实现概述 (40)7.4. 运行例程 (40)8. 使用FlexIO模拟 LIN主/从 (41)8.1. 简介 (41)8.2. 使用FlexIO模拟LIN (41)8.3. 配置移位器和定时器 (42)9. 结论 (45)10. 修订历史 (45)FlexIO 模块概述2. FlexIO 模块概述FlexIO 模块具有以下主要硬件资源:∙移位器∙定时器∙引脚可以从 FLEXIO_PARAM 寄存器中获取特定MCU 里面这些资源数量。

VHDL数字时钟

VHDL数字时钟

一、功能要求:1、能够分别显示时、分、秒,以24小时循环设计;2、能够对小时、分钟进行调时;3、能够设置闹钟,使其能够在指定时间响;二、设计原理:该数字时钟有三个状态,分别是正常显示状态、调时状态和闹钟设置状态,每当来到一个z的上升沿时,状态改变一次;正常显示状态:对输入的频率clk1进行分频,产生一个与秒的频率相等的频率信号clk,用clk来控制秒的走时,秒的个位每到10往秒的十位进位,秒的十位每到6就往分的个位进位,分的个位十位进位和秒一样,时的个位每到10就往时的十位进位,时的十位每到2就为0;当时间为23:59:59时,全部清零,重新开始计时;调时状态:当处于调时状态时,可对时间进行调整,先选择对哪位进行调整,可分别对分和时的个位和十位进行调整,每当来到一个md2的上升沿时可选中其中一位,每来到一个md3的上升沿时对其进行加“1”操作并设置一个开关allow1,当allow1接通一次时可把设置的时间赋给正常显示的时间,否则不影响正常显示的时间;闹钟设置状态:当处于闹钟设置状态时,同样通过md2选择要调整的位,并通过md3对其进行加“1”操作,并设置一个闹钟开关allow2,接通时闹钟开启;数字显示:对6个显示器用一个频率进行循环扫描,利用人眼停留的效果使其达到同时显示的效果;三、变量说明:端口说明:clk1:输入频率md1:负责对时钟状态的切换,每接通一次,状态就切换一次md2:在调时状态和闹钟设置状态时,负责选定对那个位进行操作(时的个位和十位,分的个位和十位)md3:负责对所选中的位进行加“1”操作,每接通一次,就加“1”allow1:负责是否确定对时钟的设置,设置好时钟后,若allow1接通一次,时钟就被修改;若allow1没有接通,则所调整的时间对原来的时钟没有影响allow2:负责是否确定开启闹钟,当allow2处于接通状态时,时钟到了设置的时间闹钟会响,断开allow2闹钟关闭speak:负责闹钟的发声dout,sellout:负责板子上显示管的显示数字内部变量说明:sel:选择哪个位置显示数counter:对输入频率进行分频,得出秒的频率clkcounter1:对输入频率进行分频,得出闹钟发声的频率z:选择时钟的状态,“00”为正常显示状态,“01”为调整状态,“10”为闹钟设置状态k:选择要对哪位进行操作,“00”为分的个位,“01”为分的十位,“10”为时的个位,“11”为时的十位hou1,hou2,min1,min2,sec1,sec2:分别代表正常显示状态下的时的十位,个位;分的十位,个位;秒的十位,个位;hou1n,hou2n,min1n,min2n,:分别代表处于调时状态时的时和分的十位和个位;seth1,seth2,setm1,setm2:分别代表处于闹钟设置状态的时和分的十位和个位;h1,h2,m1,m2,s1,s2:分别代表最终显示在板子上的时、分、秒的十位和个位;四、源代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity zhong isport(clk1:in std_logic;md1:in std_logic;-----xuan ze zhuang taimd2:in std_logic;------xuan ze she zhi na ge wei zhimd3:in std_logic;------jia yiallow1:in std_logic;allow2:in std_logic;speak:out std_logic;-----nao zhongdout:out std_logic_vector(6 downto 0);-------shu chuselout:out std_logic_vector(5 downto 0));-----xuan ze xian shi end zhong;architecture one of zhong issignal sel:std_logic_vector(2 downto 0);signal hou1:std_logic_vector(3 downto 0);signal hou2:std_logic_vector(3 downto 0);signal min1:std_logic_vector(3 downto 0);signal min2:std_logic_vector(3 downto 0);signal hou1n:std_logic_vector(3 downto 0);signal hou2n:std_logic_vector(3 downto 0);signal min1n:std_logic_vector(3 downto 0);signal min2n:std_logic_vector(3 downto 0);signal seth1:std_logic_vector(3 downto 0);signal seth2:std_logic_vector(3 downto 0);signal setm1:std_logic_vector(3 downto 0);signal setm2:std_logic_vector(3 downto 0);signal sec1:std_logic_vector(3 downto 0);signal sec2:std_logic_vector(3 downto 0);signal h1:std_logic_vector(3 downto 0);signal h2:std_logic_vector(3 downto 0);signal m1:std_logic_vector(3 downto 0);signal m2:std_logic_vector(3 downto 0);signal s1:std_logic_vector(3 downto 0);signal s2:std_logic_vector(3 downto 0);signal counter:std_logic_vector(8 downto 0);-----------secondsignal countern1:std_logic_vector(7 downto 0);----------speakersignal clk:std_logic;----------secondsignal clkn1:std_logic;-----speakersignal k:std_logic_vector(1 downto 0);---------xuan ze xian shisignal z:std_logic_vector(1 downto 0);------00 zheng chang ;01 tiao zheng;10 nao ling;-------------------------------------------------beginfen:process(clk1)beginif(clk1'event and clk1='1')thenif(counter="110000000")thencounter<="000000000";clk<=not clk;elsecounter<=counter+'1';end if;if(countern1="10000000")thencountern1<="00000000";elseclkn1<=not clkn1;end if;end if;end process fen;-------------------------------------------kong:process(md2)beginif( md2'event and md2='1')thenif(k="11")thenk<="00";elsek<=k+1;end if;end if;end process kong;process(md1)beginif(md1'event and md1='1')thenif(z="10")thenz<="00";elsez<=z+1;end if;end if;end process;----------------------------------------------choice:process(clk1)beginif clk1'event and clk1='1' thenif sel="101" thensel<="000";elsesel<=sel+1;end if;end if;end process choice;-------------------------------------------zheng chang xian shi-----------------------------------------------hour1hou_1:process(clk,hou2,min1,min2,sec1,sec2)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011" and min1="0101" and min2="1001" and sec1="0101" andsec2="1001") thenhou1<="0000";elsif (hou2="1001"and min1="0101" and min2="1001" and sec1="0101" and sec2="1001") thenhou1<=hou1+1;end if;end if;if(allow1='1' and z="01")thenhou1<=hou1n;end if;end process hou_1;-----------------------------------------------hour2hou_2:process(clk,min1,min2,sec1,sec2,hou1)beginif clk'event and clk='1' thenif (hou1="0010" and hou2="0011"and min1="0101" and min2="1001" and sec1="0101" andsec2="1001") thenhou2<="0000";elsif hou2="1001"and(min1="0101" and min2="1001" and sec1="0101" and sec2="1001") thenhou2<="0000";elsif (min1="0101" and min2="1001" and sec1="0101" and sec2="1001")thenhou2<=hou2+1;end if;end if;if(allow1='1' and z="01")thenhou2<=hou2n;end if;end process hou_2;-----------------------------------------------min1min_1:process(clk,min2,sec1,sec2)beginif clk'event and clk='1' thenif (min1="0101" and min2="1001" and sec1="0101" and sec2="1001") then min1<="0000";elsif (min2="1001"and sec1="0101" and sec2="1001") thenmin1<=min1+1;end if;end if;if(allow1='1' and z="01")thenmin1<=min1n;end if;end process min_1;----------------------------------------------min2min_2:process(clk,sec1,sec2)beginif clk'event and clk='1' thenif (min2="1001" and sec1="0101" and sec2="1001")thenmin2<="0000";elsif (sec1="0101" and sec2="1001")thenmin2<=min2+1;end if;end if;if(allow1='1' and z="01")thenmin2<=min2n;end if;end process min_2;---------------------------------------------second1sec_1:process(clk)beginif clk'event and clk='1' thenif (sec1="0101" and sec2="1001")thensec1<="0000";elsif sec2="1001"thensec1<=sec1+1;end if;end if;if(allow1='1' and z="01")thensec1<="0000";end if;end process sec_1;--------------------------------------------second2sec_2:process(clk)beginif clk'event and clk='1' thenif sec2="1001" thensec2<="0000";else sec2<=sec2+1;end if;end if;if(allow1='1' and z="01")thensec2<="0000";end if;end process sec_2;-----------------------------------------------------------------------------------shi jian tiao zheng process(md3)-----------hour1beginif(z="01")thenif(k="11")thenif(md3'event and md3='1')thenif(hou1n="0010")thenhou1n<="0000";elsehou1n<=hou1n+1;end if;end if;end if;end if;end process;process(md3)-----------hour2beginif(z="01")thenif(k="10")thenif(md3'event and md3='1')thenif(hou2n="1001")or(hou1n="0010" and hou2n="0011")then hou2n<="0000";elsehou2n<=hou2n+1;end if;end if;end if;end if;end process;process(md3)-----------min1beginif(z="01")thenif(k="01")thenif(md3'event and md3='1')thenif(min1n="0110")thenmin1n<="0000";elsemin1n<=min1n+1;end if;end if;end if;end if;end process;process(md3)------------min2beginif(z="01")thenif(k="00")thenif(md3'event and md3='1')thenif(min2n="1001")thenmin2n<="0000";elsemin2n<=min2n+1;end if;end if;end if;end if;end process;--------------------------------------------------------------------------------------she zhi nao zhong sethour1:process(md3)beginif(z="10")thenif(k="11")thenif(md3'event and md3='1')thenif(seth1="0010")thenseth1<="0000";elseseth1<=seth1+1;end if;end if;end if;end if;end process sethour1;-------------------------------------------sethour2:process(md3)beginif(z="10")thenif(k="10")thenif(md3'event and md3='1')thenif(seth2="1001")or(seth2="0010" and seth2="0100")then seth2<="0000";elseseth2<=seth2+1;end if;end if;end if;end if;end process sethour2;-------------------------------------------setmin1:process(md3)beginif(z="10")thenif(k="01")thenif(md3'event and md3='1')thenif(setm1="0110")thensetm1<="0000";elsesetm1<=setm1+1;end if;end if;end if;end if;end process setmin1;----------------------------------------------setmin2:process(md3)beginif(z="10")thenif(k="00")thenif(md3'event and md3='1')thenif(setm2="1001")thensetm2<="0000";elsesetm2<=setm2+1;end if;end if;end if;end if;end process setmin2;----------------------------------------------------------------------------------------nao zhongspeaker:process(clk1,hou1,hou2,min1,min2)beginif clk1'event and clk1='1'thenif(allow2='1')thenif seth1=hou1 and seth2=hou2 and setm1=min1 and setm2=min2 thenspeak<=clkn1;elsespeak<='0';end if;end if;end if;end process speaker;--------------------------------------------------------------------------------------disp:process(sel,md1,hou1,hou2,min1,min2,sec1,sec2,seth1,seth2,setm1,setm2) beginif sel="000" thenselout<="111110";case h1 iswhen "0000"=>dout<="1000000";--0when "0001"=>dout<="1111001";--1when "0010"=>dout<="0100100";--2when others =>dout<="1000000";--0end case;elsif sel="001" thenselout<="111101";case h2 iswhen "0000"=>dout<="1000000";--0when "0001"=>dout<="1111001";--1when "0010"=>dout<="0100100";--2when "0011"=>dout<="0110000";--3when "0100"=>dout<="0011001";--4when "0101"=>dout<="0010010";--5when "0110"=>dout<="0000010";--6when "0111"=>dout<="1111000";--7when "1000"=>dout<="0000000";--8when "1001"=>dout<="0010000";--9when others=>dout<="1000000";end case;elsif sel="010" thenselout<="111011";case m1 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when others=>dout<="1000000";--0 end case;elsif sel="011" thenselout<="110111";case m2 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when "0110"=>dout<="0000010";--6 when "0111"=>dout<="1111000";--7 when "1000"=>dout<="0000000";--8 when "1001"=>dout<="0010000";--9 when others=>dout<="1000000";--0 end case;elsif sel="100" thenselout<="101111";case s1 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5 when others=>dout<="1000000";--0 end case;elsif sel="101" thenselout<="011111";case s2 iswhen "0000"=>dout<="1000000";--0 when "0001"=>dout<="1111001";--1 when "0010"=>dout<="0100100";--2 when "0011"=>dout<="0110000";--3 when "0100"=>dout<="0011001";--4 when "0101"=>dout<="0010010";--5when "0110"=>dout<="0000010";--6when "0111"=>dout<="1111000";--7when "1000"=>dout<="0000000";--8when "1001"=>dout<="0010000";--9when others=>dout<="1000000";--0end case;end if;if z="00" then---------------zheng chang xian shih1<=hou1;h2<=hou2;m1<=min1;m2<=min2;s1<=sec1;s2<=sec2;elsif z="01"thenh1<=hou1n;h2<=hou2n;m1<=min1n;m2<=min2n;s1<="0000";s2<="0000";elsif z="10" then ----------------nao zhong xian shi h1<=seth1;h2<=seth2;m1<=setm1;m2<=setm2;s1<="0000";s2<="0000";end if;end process disp;------------------------------------------end one;11。

VC6.0时钟教程-支持高清浏览

VC6.0时钟教程-支持高清浏览

{
CPoint ptEnd = ptCenter;
p t E n d . O f f s e t ( ( i n t ) ( n Radius * s i n ( 2 * PI * ( i %60) / 60) ) ,
( i n t ) ( - nRadius * cos(2 * PI * ( i %60) / 60) ) ) ; CRect r c Dot(- 2, - 2, 2, 2) ;
■ 下面对类CClockElement的源代码进行编写。 ➢ 因为在后面的绘图中需要用到sin和cos这两个数
学计算公式,因此需包含头文件<MATH.H>以便使 用数学函数库。为后面计算使用,还需定义数学 常量PI(3.1415926535)。 ➢ 时钟的每个组成部分都有绘图区域区域,因此, 可在基类中定义绘图区域变量。同理,可以定义 颜色变量,为了是颜色不显得单调,这里为每个 控件设置两种颜色(如果想使程序更加绚丽,可 以设置更多颜色)。 ➢ 对应的,这些变量需增加接口函数来进行访问。 ➢ 对于每个组成部分都应该有的Draw函数,当然也 需在基类中定义,但是,该函数对于基类来说是 无需函数实现的,因此可定义为纯虚函数。
rc Dot.OffsetRect(ptEnd);
pDC-> E l l i p s e ( r c Dot); }
// 绘制12 个小方框,表示12 个正点 p
DC- >SelectObject(& penMain); pOld Brush = pDC->SelectObject(& brOther);
CClockElement::CClockElement() {
m_nRadius = 0; m_crMain = RGB(255, 255, 255); m_crOther = RGB(128, 128, 128); }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
int xh, yh, xm, ym, xs, ys, s, m, h, xcenter, ycenter;
Date rightnow = enw Date(); //获取当前日期和时间
String today = rightnow.toLocaleString(); //时间对应的字符串
yh = (int)(Math.sin((h*30+m/2)*3.14f/180-3.14f/2)*30+ycenter);
g.setFont(new Font("TimesRoman", Font.PLAIN, 14));
g.setColor(Color.blue);
xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter);
ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter);
xh = (int)(Math.cos((h*30+m/2)*3.14f/180-3.14f/2)*30+xcenter);
repaint(); //调用paint()方法重画时钟
}
timer = null;
}
public void update(Graphics g)
{
paint(g); //重写该方法是为了消除抖动现象
public void init()
{
setBackground(Color.white); //设置Applet背景
}
public void paint(Graphics g) //显示数字和图形时钟
g.drawLine(xcenter-1, ycenter, xh, yh);
lastxs=xs; lastys=ys; //保存指针位置
lastxm=xm; lastym=ym;
lastxh=xh; lastyh=yh;
}
}
}
if (xh != lastxh || yh != lastyh) //时针变化
{
g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
g.drawLine(xcenter-1, ycenter, lastxh, lastyh);
g.drawString("12",xcenter-5,ycenter-37);
g.drawString("6",xcenter-3,ycenter+45);
//时间变化时,需要重新画各个指针,即先消除原有指针,然后画新指针
g.setColor(getBackground()); //用背景色画线,可以消除原来画的线
{
while (timer != null)
{
try
{
Thread.sleep(1000);
}
catch (InterruptedException e) {}
}
}
public void stop() //停止线程
{
timer = null;
}
public void run() //每隔一秒钟,刷新一次画面
ycenter=80; //以下计算秒针、分针、时针位置
xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter);
ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter);
if (xs != lastxs || ys != lastys) //秒针变化
{
g.drawLine(xcenter, ycenter, lastxs, lastys);
g.drawString(today, 5, 150); //消除数字时钟
}
public void start() //启动线程
{
if(timer == null)
{
timer = new Thread(this);
timer.start();
s = rightnow.getSeconds();
m = rightnow.getMinutes();
h = rightnow.getHours();
xcenter=80; //图形钟的原点
}
if (xm != lastxm || ym != lastym) //分针变化
{
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym);
import java.util.*;
import java.awt.*;
import java.applet.*;
public class Clock extends Applet implements Runnable
{
Thread timer = null;
int lastxs=0, lastys=0, lastxm=0, lastym=0, lastxh=0, lastyh=0;
}
g.setColor(Color.darkGray); //显示数字时钟
g.drawString(today, 5, 150);
lor(Color.blue); //画新指针
g.drawArc(xcenter-50,ycenter-50,100,100,0,360); //画圆和数字
g.setColor(Color.darkGray);
g.drawString("9",xcenter-45,ycenter+3);
g.drawString("3",xcenter+40,ycenter+3);
g.drawLine(xcenter, ycenter, xs, ys);
g.drawLine(xcenter, ycenter-1, xm, ym);
g.drawLine(xcenter-1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter-1, xh, yh);
相关文档
最新文档