搜档网
当前位置:搜档网 › c语言-时钟信号

c语言-时钟信号

c语言-时钟信号
c语言-时钟信号

中北大学

课程设计说明书

学生姓名:崔宝月学号:1305054215 学生姓名:南帅学号:1305054230 学院:信息与通信工程学院

专业:信息对抗技术专业

题目:软件信息处理课程设计

利用C语言,生成一个时钟信号

指导教师:姚金杰刘宾杨光

2016年 6月 26 日

中北大学

课程设计任务书

2015/2016 学年第二学期

学院:信息与通信工程学院

专业:信息对抗技术

学生姓名:崔宝月学号:1305054215 学生姓名:刘学文学号:1305054219 学生姓名:南帅学号:1305054230 学生姓名:田刚学号:1305054244 课程设计题目:软件信息处理课程设计

射频信号相位分析与测量软件模块设计起迄日期:2016年6月12 日~2015年6月27日课程设计地点:信息对抗技术专业综合实验室

指导教师:姚金杰刘宾杨光

学科部主任:张丕状

目录

一.设计目的简介与题目解读 (1)

1.1目的简介 (1)

1.2题目解读: (1)

二.设计主要理论介绍及方案 (1)

2.1理论介绍 (1)

2.1.1基本原理 (1)

2.1.2关键字的理解: (2)

2.2方案: (3)

2.2.1方案选择: (3)

2.2.2设计原理: (3)

三、设计主要步骤 (6)

3.1.创建客户端应用程序,采用对话框架构 (6)

3.2.为对话框界面添加控件对象 (8)

3.3为对话框中的控件对象定义相应的成员变量 (10)

3. 4添加响应消息的事件处理成员函数 (11)

3.5手工添加其他代码 (12)

3.6添加事件处理函数: (16)

3.7.根据实际结果调整控件的位置以防遮挡或被遮挡 (16)

四、设计结果与分析 (17)

4.1输出界面: (17)

4.2选择谐波次数为0 ,相位抖动参数为 0 (17)

4.3选择谐波次数为7 ,相位抖动参数为 1 (18)

4.4相位抖动参数为3 谐波次数为33 时: (19)

4.5相位抖动参数为5 谐波次数为55 时: (19)

五.设计评述及收获体会 (20)

1、设计评述 (20)

2、设计过程 (20)

3、收获体会: (20)

六.参考文献 (21)

一.设计目的简介与题目解读

1.1目的简介

(1)通过本课程设计的学习,学生将复习所学的专业知识,使课堂学习的理论知识应用于实践,通过本课程设计的实践使学生具有一定的实践操作能力;(2)掌握C语言的编程方法,能熟练运用;

(3)通过软件信息处理实践的课程设计,掌握设计信息处理系统的思维方法和基本开发过程。

(4)学习Windows程序设计的语言、过程、思想与方法。全面地学习Windows 程序设计所涉及的细枝末节,要求我们从高屋建瓴的角度,建立完整的知识体系,为以后的职业生涯奠定良好的基础。即要学习基础知识,着重学习Windows程序设计中关于图形的编写与实现。

1.2题目解读:

利用C语言,生成一个时钟信号,要求:1、频率为30MHz. 2、时钟相位抖动参数、谐波频率参数可设置,3 绘制波形 4生成文件(4人合作完成)

二.设计主要理论介绍及方案

2.1理论介绍

2.1.1基本原理

1、相位测量的基本原理:通过测量无线电信号到达不同检测地点的天线单元时间差,来对发射无线电信号的发射源进行定位。

TDOA定位流程:1.从监测站将同一时间测量同一信号得到的数据发送到主监测站;2.主监测站分别计算出无线电信号到达两个监测站天线的时间差(利用相关算法);3.根据两站之间时间差转换为距离差,可以得到一条双曲线;4.通过三个或多个无线电监测站测得的时间差可以得到两条或多条双曲线相交来实现发射源的定位。

2、PLL(Phase Locked Loop):为锁相回路或锁相环,用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术。锁相环是一种反馈电路,其作用是使得电路上的时钟和某一外部时钟的相位同步。PLL通过比较外部信号的相位和由压控晶振(VCXO)的相位来实现同步的,在比较的过程中,锁相环电路会不断根据外部信号的相位来调整本地晶振的时钟相位,直到两个信号的相位同步。

2.1.2关键字的理解:

1.时钟信号:时钟信号是提供给同步内存做讯号同步之用,同步记忆体的存取动作必需与时钟信号同步。时钟信号是一个特定类型的振荡之间的高和低的状态,并利用像一个节拍器协调电路的动作的信号。(有固定周期并与运行无关的信号量)

2.信号抽样:采样也称抽样,是信号在时间上的离散化,即按照一定时间间隔△t 在模拟信号x(t)上逐点采取其瞬时值。它是通过采样脉冲和模拟信号相乘来实现的。

3.抽样频率:定义了每单位时间内的样品数(通常为秒),从连续信号作出离散信号。

4.谐波:谐波是指电流中所含有的频率为基波的整数倍的电量,一般是指对周期性的非正弦电量进行傅里叶级数分解,其余大于基波频率的电流产生的电量。

5.时钟抖动:时钟抖动是指两个时钟周期之间存在的差值,这个误差是在时钟发生器内部产生的,和晶振或者PLL内部电路有关,布线对其没有影响。除此之外,还有一种由于周期内信号的占空比发生变化而引起的抖动,称之为半周期抖动。总的来说,抖动可以认为在时钟信号本身在传输过程中的一些偶然和不定的变化之总和。

6.相位:是描述信号波形变化的度量,通常以度(角度)作为单位,也称作相角。当讯号波形以周期的方式变化,波形循环一周即为360o。

7.相位噪声:相位噪声是衡量频率标准源(高稳晶振、原子频标等)频稳质量的重要指标。相位噪声一般是指在系统内各种噪声作用下引起的输出信号相位的随

机起伏。通常相位噪声又分为频率短期稳定度和频率长期稳定度。所谓频率短期稳定度, 是指由随机噪声引起的相位起伏或频率起伏。至于因为温度、老化等引起的频率慢漂移,则称之为频率长期稳定度。

8.频率分量:周期性交流量的傅里叶级数中次数高于1的分量,其频率为基波频率的整数倍。

9.文件读写操作:文件的读操作以页为单位进行。内核每次会传送几页(文件的预读)。用户发出read()系统调用后,内核先查看要操作的文件是否在缓存中,如果在缓存之中就给进程的用户空间拷贝一份,若所要读的文件的页不在缓冲区,则会在换中区中分配一个页框,然后把相应的页框加入到页高速缓存之中,然后从磁盘读取相应的页到缓冲区并给进程的用户空间拷贝一份。

10.文件头:文件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分。头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明,而定义文件用于保存程序的实现。

2.2方案:

2.2.1方案选择:

方案一:利用VC++中MFC部分直接写出方波各个点的坐标,利用画笔连接,直接做出所需方波,即生成时钟信号。接着通过对方波的各个点的坐标进行左移或右移实现相位的抖动。

方案二:同样利用VC++中MFC部分,但是并不仅仅画出各个点再连线,而是通过方波的傅里叶级数的展开式的基波分量及谐波分量合成而生成所需时钟信号,再对其相位及谐波频率加入rand函数使其可调从而达到目的。

多次讨论之后,我们决定利用第二套方案。由于一方案中的谐波频率不可调,而且方法过于简单,实现起来较易但要求达不到,故弃之。

2.2.2设计原理:

1、信号频谱

信号频谱可分为幅度频谱和相位频谱。幅度频谱是将谐波振幅用线段高度表示并按各次谐波频率的高低顺序排列而得的图形;相位频谱与幅度频谱类似,是各次谐波的初相与各次谐波频率的关系图形。由于各次谐波角频率是基波角频率的整数倍,因此,这种频率是离散的“线性谱”。

2、傅里叶级数

(1)概念:任何周期函数都可以用正弦函数和余弦函数构成的无穷级数来表示(选择正弦函数与余弦函数作为基函数是因为它们是正交的),这种三角级数后世称为傅立叶级数。傅里叶级数在数论、组合数学、信号处理、概率论、统计学、密码学、声学、光学等领域都有着广泛的应用。 (2)傅里叶级数公式:

傅里叶级数的展开式:x(t)=0X +∑∞

=+111)]sin()cos([k k k t k b t k a ωω

x(t)=0X +∑∞

=+1

1)cos(k k mk t k X ?ω

式中,T

πω21=

,T 为信号的周期;0X 称为x(t)的直流分量;1x =)cos(111φω+t k X m 称为x(t)的基波;)1)(cos(1>+=k t k X x k m k k φω称为x(t)的k 次谐波分量。各系数的求解如下:

?+=

T

t t dt t x T X 00

)(1

dt t k t x T a T

t t k )cos()(2

1

00

ω?+=

?+=

T

t t k dt t k t x T

b 00

)sin()(2

1

ω

?

+-=

-=∠=T

t t t

jk k k mk dt e t x T

jb a X X k 00

1)(2

mk

ωφ (3)设计步骤:

①写出所需方波的函数表达式,需要用题目给定条件30MHZ 计算出其周期

为7-103?s 。则方波表达式为分段函数,在),(30x ∈为30,在)

(0,3-x ∈为-30. ②利用上式傅里叶级数公式,可以设方波函数为奇函数,则公式可写为

?=l

dx l

x

n x f l 0n sin )(2b π n=1,2,3… 将f (x )带入30,l 带入3。

③通过运算可以求出n b ,由已知n a =0 。将n a ,n b 带入公式x(t)=0X +∑∞

=+111)]sin()cos([k k k t k b t k a ωω 则可以计算出方波的傅里叶级数展开

式。

(4)设计的平台环境:

在c++开发平台——VC++ 中进行代码编写,主要利用MFC

MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等。

程序流程图:

图2-1 方案程序框图

三、设计主要步骤

3.1.创建客户端应用程序,采用对话框架构

3.1.1运行VC++6.0软件,并新建一个MFC工程,选择”MFC AppWizard (exe)”

选择项目类型为MFC,工程名称为CLOCK,工程路径为:c\users......

图3-1 新建mfc工程

3.1.2选择基本对话框,点击完成

图3-2 选择基本对话框

3.1.3出现新建工程对话框

新建工程信息如下:

Win32:表明所创建的对话框是基于win32的应用程序

Cclockcpp: 应用程序类,对应的程序是clock.h和clock.cpp

cclockDlg:对话框类,对应的程序是cclockDlg.h和cclockDlg.cpp MFC2.dll:使用公用的DLL表示MFC2.dll

图3-3 工程信息报表

3.1.4默认工程对话框和控件如下

图3-4 工作界面

3.1.5建立 clock类的主对话框

在MFC界面左方的工作区(workspace)中选择resourceVIEW卡,从中选择dialog,双击IDD-CLOCK-DIALOG.右边会出现对话框,出现控制面板。

图3-5 主对话框

3.2.为对话框界面添加控件对象

3.2.1删除多余的控件,并修改剩余按钮控件的ID和标题如下:

图3-6 制作绘图按钮

3.2.2添加两个”静态文本”控件,以便于对”编辑框”控件做标注和解释,并修改其标题

图3-7 制作静态文本控件

3.2.3添加两个”编辑框”控件,并将所有控件摆放成如下图所示布局:

图3-8 界面中控件效果图

3.3为对话框中的控件对象定义相应的成员变量

图3-9 向导类对话框

3.3.1在对话框上单击右键,选择”建立类向导”,如下图所示

图3-10 修改控件属性

3.2选择Member Variables(成员变量卡),并选择IDC_EDIT1和IDC_EDIT2,单击右边”Add Variable”为”编辑框”控件定义相应的成员变量,具体定义如下所示:

图3-11 增加控件成员对话框

3.4添加响应消息的事件处理成员函数

点击菜单view/classwizar 进入类向导对话框,选择Message maps(消息映射)卡,确定class name 是CMYSOCKET ,从Messages(消息)栏中选择事件消息,然后选择事件信息。

图3-12 添加成员函数

3.4.1在对话框上单击右键,选择”建立类向导”,选择Message Maps(消息映射卡),确认Class name是”CClockDlg”,从Object IDs栏中选择IDC_BUTTON(按钮控件),并从Messages栏中选择BN_CLICKED,然后点击Add Function添加该事件,如下所示

图3-13 新建按钮控件

同样的,给CClockDlg添加OnSetFont事件,如下图所示

图3-14 新建按钮控件

3.5手工添加其他代码

3.4.1定义PI的值并且添加数学函数库头文件,代码如下:

#include "math.h" //调用数序函数库头文件

#define PI 3.141592653 //定义PI的取值

3.4.2为”编辑框”控件的消息响应函数编写如下代码。

void CClockDlg::OnSetFont(CFont* pFont)

{

// TODO: Add your specialized code here and/or call the base class m_edit1=0; //此为添加代码

m_edit2=0; //此为添加代码

CDialog::OnSetFont(pFont);

}

3.4.3在对话框类的OnInitDialog中添加如下代码。

int m_edit1;

int m_edit2;

UpdateData(FALSE);

3.4.4对按钮的单击消息响应函数OnButton编写代码,实现目标,得出最终结果,代码如下。

//以下为OnButton中的循环求和函数

double make_y(int i,double r)

{

double y=0;

for(;i>-1;i--)

{

y+=(-12)/((2*i+1)*PI)*sin((2*i+1)*r)*30;

}

return y;

}

void CClockDlg::OnButton()

{

// TODO: Add your control notification handler code here

char buff1[16]; // 定义字符数组,用于存放与X轴交点坐标(显示只能是字符)FILE *fp1;

fp1 = fopen("谐波.txt","w+"); // 打开文件

if( NULL == fp1 ) // 打开文件失败的话,直接返回

return;

char buff2[16]; // 定义字符数组,用于存放与X轴交点坐标(显示只能是字符)FILE *fp2;

fp2 = fopen("抖动.txt","w+"); // 打开文件

if( NULL == fp2 ) // 打开文件失败的话,直接返回

return;

//谐波参数可调绘图代码

CRect rc(0,0,1200,350); // 构造画刷矩形区域rc

CPen pen,cpen; // 创建pen和cpen画笔

pen.CreatePen(PS_SOLID,2,RGB(0,0,0)); // 创建一支黑色实心画笔

cpen.CreatePen(PS_SOLID,2,RGB(0,0,255)); // 创建一支蓝色实心画笔

CDC* pDC=GetDC(); //创建CDC类画图

pDC->FillSolidRect(rc,RGB(255,255,255)); //使用白色填充矩形rc区域

pDC->SelectObject(&cpen); //将定义画笔cpen选入设备上下文pDC->SetViewportOrg(100,200); //设置可视区域上下文的初始位置为(100,200)

//绘制坐标轴

int a=0; // 初始化参数(初始原点坐标)

pDC->MoveTo(a,b); // 移动画笔在原点处

pDC->TextOut(a-15,b,"O"); // 添加原点字母O

pDC->LineTo(a+1000,b); // 绘制X轴直线

pDC->MoveTo(a,b); // 画笔回到原点

pDC->LineTo(a,b-150); // 绘制Y轴上半轴直线

pDC->MoveTo(a,b);

pDC->LineTo(a,b+150); // 绘制Y轴下半轴直线

pDC->MoveTo(a,b);

pDC->TextOut(a+1010,b-5,"X/*(10^-8)s"); // 为x轴添加标识X/*(10^-8)s pDC->TextOut(a-15,b-150,"Y"); // 为y轴添加标识Y

UpdateData(); //将EDIT控件值赋值给成员变量int i;

double x,y=0,r;

pDC->SelectObject(&pen); //将定义画笔pen选入设备上下文for(x=0.0;x<1000;x=x+0.01) //制定谐波规则,并绘图

{

r=x/(30*2)*PI;

y=make_y(m_edit2,r);

pDC->MoveTo((double)x,(double)y);

pDC->LineTo((double)x,(double)y);

}

for(x=0;x<1000;x=x+60) //标注横坐标值

{

sprintf(buff1,"%.3f",x/4*0.1111); // 把横坐标值转换成字符类型pDC->TextOut(x,5,buff1); // 显示横坐标刻度值

fprintf(fp1, "(%.3f,%d)\n",x/4*0.1111,0); // 写入文档中

}

cpen.DeleteObject(); //释放画笔

pen.DeleteObject(); //释放画笔

//相位抖动参数可调绘图代码

int n; // 坐标参数

基于单片机的电子钟C语言程序

基于 5 1 单片机的电子钟 C 语言程序 #include #include #defineucharunsignedchar #defineuintunsignedint /* 七段共阴管显示定义*/ ucharcodedispcode[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF}; /* 定义并初始化变量*/ ucharseconde=0; ucharminite=0; ucharhour=12; ucharmstcnt=0; sbitP1_0=PM0;//seco nd 调整定义 sbitP1_ 仁P1A1;//mi nite 调整定义 sbitP1_2=P1A2;//hour 调整定义 /* 函数声明*/ voiddelay(uintk);// 延时子程序 voiddelay1(ucharh); voidtime_pro();// 时间处理子程序 voiddisplay();// 显示子程序 voidkeyscan();// 键盘扫描子程序 /*****************************/ /* 延时子程序*/ voiddelay1(ucharh) { ucharj; while((h--)!=0) { for(j=0;j<125;j++) {;} } } voiddelay(uintk) { uinta,b,c; for(c=k;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } /************************* /* 时间处理子程序*/ */ voidtime_pro(void) { if(seconde==60)// 秒钟设为60 进制 {seconde=0; minite++; if(minite==60)// 分钟设为60 进制 {minite=0; hour++;

51 数字时钟 89C52 单片机C语言程序

数字时钟89C52 单片机C语言程序 STC89C52| /************** 【数字时钟】****************/ /****【功能】1、时间显示2、秒表3、闹钟4、日期显示都可以设置****/ #include /*包含器件配置文件*/ #define uchar unsigned char /*宏定义字符型数据整型数据*/ #define uint unsigned int uchar code H[] = {0x0f, 0x07, 0x0b, 0x0d, 0x0e}; /*按键【P3】端口断码用于按键*/ char Code[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f}; /*显示【0 1 2 3 4 5 6 7 8 9】数字的数码管的段码*/ uchar code C[] = {0x0, 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F}; /*列扫描控制LED1位2位3位4位5位6位7位8位*/ uchar MON[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; uchar A; uchar BIN=0; /* 【BIN】作为倒计时开始的标志*/ uchar hour = 0; /* 定义[时][分][秒] */ uchar min = 0; uchar sec = 0; uint shi=12; uint fen=30; uchar Mmin=0; uchar Msec=30; uchar M0=0; uchar m=0; uchar year=9; uchar month=7; uchar month2; uchar day=19; uchar set1 = 1; /* set1=1 是调节时分秒set1=2时时调节年月日set=3时事调节闹钟*/ uchar set2 = 1; /* set2=1时是调节【时】位set2=2时事调节【分】位*/ uint x = 0; /* x 每【0.01s】自加一*/ void Delay(uint k);

模拟电子时钟c语言程序

算法:将当前时间显示到屏幕,当时间发生变化时,清屏,显示新的时间(当有键盘操作时退出程序)。 显示时间格式:小时:分钟:秒 /* DEV C++ Win XP*/ #include #include #include #include typedef struct { int x; int y; }Point; time_t now; struct tm *pt,t1,t2; int printpoint(Point p) { Point p1; p1.x=p.x+2; p1.y=p.y+4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x, p1.y+1); printf("%c%c",2,2); p1.y+=4; gotoxy(p1.x,p1.y); printf("%c%c",2,2); gotoxy(p1.x,p1.y+1); printf("%c%c",2,2); return 0; } int print0(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%c%4s%c",2," ",2); } return 0; }

int print1(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); printf("%5s%c"," ",2); } return 0; } int print2(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else if(i>0&&i<6) printf("%5s%c"," ",2); else printf("%c",2); } return 0; } int print3(Point p) { int i=0; for(;i<13;i++) { gotoxy(p.x+1, p.y+i); if(i==0||i==6||i==12) printf("%c%c%c%c%c%c",2,2,2,2,2,2); else printf("%5s%c"," ",2); } return 0; } int print4(Point p) {

基于c语言单片机电子时钟课程设计报告书

课程设计报告 课程名称:单片机程序设计 报告题目:电子时钟 学生: 所在学院:信息科学与工程学院专业班级: 学生学号: 指导教师:

2013年12月25日课程设计任务书

摘要 单片计算机即单片微型计算机。由RAM、ROM、CPU构成。定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。而51系列单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。 本设计主要设计了一个基于AT89C51单片机的电子时钟。并在数码管上显示相应的时间。并通过一个控制键用来实现时间的调节和是否进入省电模式的转换。应用Proteus的ISIS软件实现了单片机电子时钟系统的设计与仿真。该方法仿真效果真实、准确,节省了硬件资源。 关键词:单片机;子时钟;键控制

目录 一、概述 (5) 1.1电子时钟简介 (5) 1.2电子时钟的基本特点 (5) 1.3电子时钟的原理 (5) 二、方案设计选择 (5) 2.1计时方案 (5) 2.2显示方案 (5) 三、硬件设计 (6) 3.1单片机型号选择 (6) 3.2数码管显示工作原理 (6) 3.3键盘电路设计 (7) 3.4电路原理图 (7) 四、软件设计 (7) 五、结论与心得 (15) 六、参考文献 (16)

一、概述 1.1 电子时钟简介 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来。现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断用于一秒的定义,通过计数方式进行满六十秒分钟进一,满六十分小时进一,满二十四小时小时清零。从而达到计时的功能,是人民日常生活补课缺少的工具。 1.2 电子时钟的基本特点 现在高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟、石英钟、石英表都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调试,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED

数字万年历简易C语言程序源代码

#include"reg52.h" #define uchar unsigned char #define uint unsigned int sbit rs=P2^0; // lcd 控制端 sbit en=P2^2; // lcd 控制端 sbit all=P2^1; // lcd 控制端 sbit s0=P1^5; //时间调节 sbit s1=P1^6; sbit s2=P1^7; sbit voice=P2^7; int nt; sbit DQ=P2^6; sbit DS1302_CLK = P2^3; //实时时钟时钟线引脚sbit DS1302_IO = P2^4; //实时时钟数据线引脚sbit DS1302_RST = P2^5; //实时时钟复位线引脚sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; unsigned char time; #define ads_y 0 #define ads_mo 3 #define ads_d 6 #define ads_w 9 #define ads_h 65 #define ads_m 68 #define ads_s 71 #define DS1302_SECOND 0x80 //写入ds地址宏定义 #define DS1302_MINUTE 0x82 #define DS1302_HOUR 0x84 #define DS1302_WEEK 0x8A #define DS1302_DAY0x86 #define DS1302_MONTH 0x88 #define DS1302_YEAR 0x8C

电子钟显示时分秒c语言程序

/*电子钟显示时分秒*/ #include sbit INCH=P3^2; //小时加1 sbit INCM=P3^3; //分钟加1 #define LCDP P0 // 定义LCM 接至P0 sbit RS = P2^7; // 暂存器选择位元(0:指令,1:资料) sbit RW = P2^6; // 设定读写位元(0:写入,1:读取) sbit E = P2^5; // 致能位元(0:禁能,1:致能) sbit BF = P0^7; // 忙碌检查位元(0:不忙,1:忙碌) char count=20; // 中断次数计数,20次*50ms=1秒 char time0[]="CLOCK"; // 显示时间阵列(第1行) char time[11]; // 显示时间阵列(第2行) bit ampm=1; // 0:上午(am),1:下午(pm),初值下午 char hour=11; // 声明时,初值为11点 char minute=59; // 声明分,初值为59分 char second=50; // 声明秒,初值为50秒 void transfer(void); // 转换时分秒至time阵列中 void write_inst(char); // 写入指令函数 void write_char(char); // 写入字元函数 void write_pat(void); // 写入自建字型函数 void check_BF(void); // 检查忙碌函数 void init_LCM(void); // 声明LCM初始设定函数 void delay(int); //去抖函数 main() { char i; init_LCM(); // 初始设定 IE=0X87; // T0、INT0、INT1中断使能TMOD=0x01; // T0设为MODE1 TH0=(56636-50000) / 256; // 填入计时量之高位元组 TL0=(56636-50000) % 256; // 填入计时量之低位元组 TR0=1; // 启动Timer 0 write_inst(0x85); // 指定第1列位置 for (i=0;i<5;i++) write_char(time0[i]); //显示CLOCK while(1) { transfer(); // 转换时分秒至time阵列中write_inst(0xC0); // 指定第2列位置 for (i=0;i<11;i++) write_char(time[i]);// 显示时间 } } //转换函数 void transfer(void)

数字时钟c语言代码

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SECOND1 IS PORT(CLKS,CLR:IN STD_LOGIC; SECS,SESG:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT1:OUT STD_LOGIC); END SECOND1; ARCHITECTURE S OF SECOND1 IS BEGIN PROCESS(CLKS,CLR) V ARIABLE SS,SG:STD_LOGIC_VECTOR(3 DOWNTO 0); V ARIABLE CO:STD_LOGIC; BEGIN IF CLR='1' THEN SS:="0000";SG:="0000"; ELSIF CLKS'EVENT AND CLKS='1' THEN IF (SS="0101") AND (SG="1001") THEN SS:="0000";SG:="0000";CO:='1'; ELSIF SG<"1001" THEN SG:=SG+1;CO:='0'; ELSIF SG="1001" THEN SG:="0000";SS:=SS+1;CO:='0'; END IF; END IF;COUT1<=CO; SECS<=SS; SESG<=SG; END PROCESS; END S; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY MIN1 IS PORT(CLKM,CLR:IN STD_LOGIC; MINS,MING:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); ENMIN,ALARM:OUT STD_LOGIC); END MIN1; ARCHITECTURE M OF MIN1 IS BEGIN PROCESS(CLKM,CLR) V ARIABLE MS,MG:STD_LOGIC_VECTOR(3 DOWNTO 0); V ARIABLE SO,ALM:STD_LOGIC; BEGIN IF CLR='1' THEN MS:="0000";MG:="0000";

模拟时钟行走 C语言程序

模拟时钟行走 课程设计总体要求 采用模块儿化程序设计; 鼓励可视化编程; 源程序中有足够的注释; 学生可自行增加新功能模块儿; 必须上机调试通过; 注重算法运用,优化存储效率与运算效率; 需提交源程序及相关文件; 目录 1 课程任务书 2 系统设计 3 模块设计 3.1 总体结构 3.2 流程图 3.3 使用的主要函数 4 调试及测试 1、调试过程中的问题 2、调试结果 5 设计总结 6 心得体会及致谢 7 答辩记录 8 教师意见

一、课程设计任务书 在屏幕上显示一个活动时钟;能模拟机械钟表行走;准确地利用数字显示日期和时间;按任意键时程序退出。 二、系统设计 总体结构:在绘图窗口中先画出表盘后获取系统的时间,利用得到的系统时间计算表针的位置,并将时间在屏幕上输出。每隔一秒读取一次时间,直到键盘有输入为止。 流程图 开始 初始化绘画窗口 画表盘 否 获取系统时间 结束 使用的主要函数: setlinestyle 设置画线 setcolor 设置颜色

line(int x1,int y1,int x2,int y2)画直线 circle(int x,int y,int r)画圆 outtextxy(int x,int y,char *textstring)在指定位置输出字符 initgraph(int x, int y); 初始化绘图窗口 setwritemode( ); 设置绘图模式 kbhit() 检查是否有键盘输入 GetLocalTime(&ti); 获取当前时间 sleep() 程序暂停若干时间 三、模块设计 主要模块功能、源代码及注释: 1.计算表针的位置并画出表针 void Drawzhizhen(int hour, int minute, int second) { double a_hour, a_min, a_sec; // 时、分、秒针的弧度值 int x_hour, y_hour, x_min, y_min, x_sec, y_sec; // 时、分、秒针的位置 a_sec = second * 2 * PI / 60; // 计算时、分、秒针的弧度值 a_min = minute * 2 * PI / 60 + a_sec / 60; a_hour= hour * 2 * PI / 12 + a_min / 12; x_sec = int(120 * sin(a_sec)); y_sec = int(120 * cos(a_sec)); ///计算时、分、秒针的位置 x_min = int(100 * sin(a_min)); y_min = int(100 * cos(a_min)); x_hour= int(70 * sin(a_hour)); y_hour= int(70 * cos(a_hour)); setlinestyle(PS_SOLID, NULL, 10); // 画时针 setcolor(BLUE); line(300 + x_hour, 240 - y_hour, 300, 240 );

基于C51单片机的数字时钟课程设计(C语言带闹钟)

单片机技术课程设计 数字电子钟 学院: 班级: 姓名: 学号: 教师:

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词: 电子钟 AT89C52 硬件设计软件设计

目录 NO TABLE OF CONTENTS ENTRIES FOUND. 一、数字电子钟设计任务、功能要求说明及方案介绍 1.1 设计课题设计任务 设计一个具有特定功能的电子钟。具有时间显示,并有时间设定,时间调整功能。 1.2 设计课题的功能要求说明 设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。 1.3 设计课的设计总体方案介绍及工作原理说明 本电子钟主要由单片机、键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:

51单片机数码管显示时钟(C语言)

//以下程序都是在VC++6.0 上调试运行过的程序,没有错误,没有警告。 //单片机是STC89C52RC,但是在所有的51 52单片机上都是通用的。51只是一个学习的基础平台,你懂得。 //程序在关键的位置添加了注释。 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////以下是主文件main.c 的内容 /****************************************************************************** * * 实验名: 万年历实验 * 使用的IO : * 实验效果:1602显示时钟 * 注意: ******************************************************************************* / #include #include"ds1302.h" //数码管IO #define DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; unsigned char code DIG_CODE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned char Num=0; unsigned int disp[8]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f,0x3f}; void LcdDisplay(); void Timer0Configuration(); /****************************************************************************** * * 函数名: main * 函数功能: 主函数 * 输入: 无 * 输出: 无 ******************************************************************************* / void main() {

电子钟的设计 C语言编程

课程设计说明书 课程设计名称:专业课程设计 课程设计题目:电子钟的设计 学院名称:信息工程学院 专业:电子信息工程班级: XXXXXX 学号: XXXXXXXX 姓名: XXXX 评分:教师: XXXXXX 20 XX 年 X 月 X 日

当今信息科技高速发展,使用方便、低成本电子设备已逐步成为我们日常生活中电子产品的主力军。用软件代替硬件的电子设备能大大地节省成本,且有利于资源的节约,因此,以软代硬的设计必将成为我们现代设计的主流。本设计是利用MCS-51系列单片机内部的定时器/计数器进行中数年定时,配合软件延时实现时、分、秒的计时。该方案节省硬件成本,且能够使设计者在定时/计数器的使用中及程序设计方面得到锻炼和提高,因此本系统将采用软件方法实现计时。 关键词:单片机计数器软件

第一章实验要求及设计思路 (4) 1.1 设计内容及要求 (4) 1.2 设计的目与和意义 (4) 1.3 设计的基本思路与主要内容 (5) 第二章系统组成及工作原理 (6) 2.1 系统组成 (6) 2.2工作原理 (7) 第三章硬件设计与分析 (9) 3.1 硬件设计原理 (9) 3.2 AT89C51单片机介绍 (9) 3.3单片机最小应用系统 (9) 3.4显示电路 (11) 3.5 键盘及其接口 (12) 第四章软件设计 (14) 4.1 主程序设计 (14) 4.2 定时中断程序 (17) 4.3 显示子程序 (17) 第五章调试与运行 (19) 第六章结论与体会 (20) 参考文献 (21) 附录一系统原理图 (22) 附录二元件清单 (23) 附录三程序清单 (24)

钟表源程序代码

钟表源程序代码 采用了easyx图形库 作者:转角梦覃飞絮 #include #include #include #include #include #define PI 3.1415926 //自定义函数声明 void draw_biaozhen(int x,int y,int second,int minute,int hour);//画表针函数 void numbertime(int year,int month,int day,char week,int second,int minute,int hour);//显示数字时间 void draw_biaopan(int x,int y);//画表盘 void huaxian(); //画心形线 void main() { initgraph(640,480); srand((unsigned)time(NULL)); int x=320,y=240; //设定表盘圆心位置 SYSTEMTIME time; //定义变量保存当前时间 //画心形线 outtextxy(20,40,"稍后进入钟表界面..."); huaxian(); cleardevice(); setwritemode(R2_XORPEN); //设置XOR绘图模式 //画表盘 draw_biaopan( x, y); while(!kbhit()){ //有用户键就退出 GetLocalTime(&time); numbertime(time.wYear ,time.wMonth,time.wDay ,time.wDayOfWeek ,time.wSecond ,time. wMinute,time.wHour); //画指针 draw_biaozhen(x,y,time.wSecond ,time.wMinute ,time.wHour ); Sleep(1000); //擦表针

51单片机电子钟C语言程序1

基于51单片机的电子钟C语言程序 #include #include #define uchar unsigned char #define uint unsigned int /*七段共阴管显示定义*/ uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F, 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF, 0xDF}; /*定义并初始化变量*/ uchar seconde=0; uchar minite=0; uchar hour=12; uchar mstcnt=0; sbit P1_0=P1^0; // second 调整定义 sbit P1_1=P1^1; //minite调整定义 sbit P1_2=P1^2; //hour调整定义 /*函数声明*/ void delay(uchar k ); //延时子程序 void time_pro( ); //时间处理子程序 void display( ); //显示子程序 void keyscan( ); //键盘扫描子程序 /*****************************/ /*延时子程序*/ /****************************/ void delay (uchar k) { uchar j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } /**************************/ /*时间处理子程序*/ /**************************/ void time_pro( void) {

51单片机秒表计时器课程设计报告(含C语言程序)

XXXXXX学院 51单片机系统设计课程设计报告 题目:秒表系统设计 专业、班级: 学生姓名: 学号: 指导教师: 分数:

[摘要]本设计是一个秒表计时器,采用51单片机实现。电路包括以下几部分: 单片机最小系统部分,数码管显示部分,摁键开关部分部分。电路选用共阴型4位数码管组成时钟显示电路;时钟的增减控制以及清零部分主要由轻触开关构成的摁键系统组成;信号接收和处理部分主要由单片机来执行。接通电源后,秒表计时器处于初始状态,4位数码管显示000.0。当摁下“开始”开关时,秒表开始计时,数码管显示当前状态的时间。当再次摁下开关时,数码管停止计时。摁下“清零”键后,系统重新回到初始状态。 [关键词]单片机最小系统秒表计时摁键控制

1、任务 设计一个秒表计时器,在51单片机的控制作用下,采用4个LED数码管显示时间,计时范围设置为00.0~60.0秒,即精确到0.1秒,用按键控制秒表的“开始”、“暂停”、“复位”,按“开始”按键,开始计时;按“暂停”按键,系统暂停计时;再按“开始”键,系统继续计时;数码管显示当前计时值;按“复位”按键,系统清零。 2、设计要求 (1)开始时显示00.0。每按下S1键一次,数值加1s; (2)每按下S2键一次,数值减1s; (3)每按下S3键一次,数值清零; (4)每按下S4键一次,启动定时器使数值开始自动每秒加1, 再次按下S4键,数值停止自动加1,保持显示原数。 3、发挥部分 (1)开关按键3:“复位 60.0”按键(用来60秒倒计时)。按键按下去时数码管复位为“60.0”(用于倒计时)。 (2)开关按键4:倒计时“逐渐自减”按键。按键按下去则是数码管开始“逐渐自减”倒计时。 (3)开关按键5:倒计时初始值“增加”按键。 (4)开关按键6:倒计时初始值“减小”按键。 4、课程设计的难点 单片机电子秒表需要解决三个主要问题,一是有关单片机定时器(一个控制顺序计时,一个控制倒计时)的使用;二是如何实现 LED 的动态扫描显示;三是如何对键盘输入进行编程。 5、课程设计仪器 集成电路芯片STC89C52,八段数码管,MCS-51系列单片机微机仿真课程系统中的软件(keil uvision2)。

C语言实现电子钟编程

/************************************************************** ********二班第二组电子钟程序 ******** ***********************************************************/ #include #define uchar unsigned char #define uint unsigned int uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar i,j,k,a=0,b=0; uchar s=12,f=0,m=0; //定义时、分、秒变量 sbit LED=P1^3; sbit k1=P3^0; // 控制暂停和启动 sbit k2=P3^1; //功能选择键 sbit k3=P3^2; sbit k4=P3^3; /************************************************************** ********延时函数******** ***********************************************************/ void delay(uint k) { for(i=0;i<60;i++) for(j=0;j

基于单片机C语言电子时钟完整版(闹钟,整点报时)

《单片机技术》课程设计说明书 数字电子钟 系、部:电气与信息工程学院 学生姓名: 指导教师:职称 专业: 班级: 完成时间:2013-06-07

摘要 电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEU5键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。 关键词电子钟;AT89S52;硬件设计;软件设计

ABSTRACT Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons KEY1, KEY2, KEY3,KEY4 and KEY5 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value. Key words Electronic clock;;AT89S52;Hardware Design;Software Design

时钟显示设计c语言

时钟显示设计 1 功能:实现时钟的实时显示与定时 2 基本要求: (1)画出表盘时钟,时、分、秒针填充不同的颜色(自选)。(2)数字同步显示时间信息。 (3)整点报时。 (4)通过键盘输入闹铃时间,实现闹铃功能。 3 相关知识:图形操作、按键操作、时间函数等 4 功能扩充:1)实现秒表功能 2)给出其它国家的时钟同步信息

目录 一、题目介绍: (3) 二、小组成员信息:........................................................................................... 错误!未定义书签。 三、总体设计: (3) 四、模块划分: (3) 五、算法说明: (3) 六、各模块函数功能及流程图: (1) 七、程序测试: (5) 八、结论: (9) 九、体会及建议:............................................................................................... 错误!未定义书签。 十、参考文献:................................................................................................... 错误!未定义书签。附录:源程序清单. (9)

题目介绍: 时钟显示设计可以实现时钟的实时显示与定时,并且具有整点报时与闹铃的功能,具有动态效果,能够激发学生学习c语言的兴趣与热情。在设计过程中会遇到没有学过的知识,这需要自己查阅资料来完成,所以还是有一定难度的。 总体设计: 本程序设计分为三步: 1 是对时钟程序做全面的分析,即对程序要使用的编写方法功能,运行方式进行分析,并做出正确的解决方案。 2 是程序的编写。由于该程序所涉及的信息比较广泛,所以程序的编写也有些复杂。程序编写是一项困难的任务,完成此项目必须运用大量的知识,而且要有清晰的思路和较强的语言组织能力。 3 是对程序的检查和系统的调用。当程序运行时,会显示出一个时钟,并且具有一定的功能。 模块划分: 1 计算时分秒针的弧度值和末端位置, 2 画时针,分针,秒针, 3 绘制表盘,刻度, 4 设定闹钟,整分钟报时功能, 5 画表针,擦表针。 算法说明: 主函数:运用for,if等语句,执行对应的函数。 Void DrawDial 函数:画表盘。 Void DrawHand 函数:画时针,分针,秒针。

简单的时钟程序(C语言)

#include // 头文件 #define uchar unsigned char; #define uint unsigned int; /////**********全局变量声明************************* uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0-9段码表uchar h,m,s,k=0,j; void delay(); void display() ; //*****************延时1ms************************ void delay() { unsigned char i,j; for(i=0;i<20;i++) for(j=0;j<100;j++); } //*******************函数初始化******************** void int_init() { EA=1; TMOD=0x01;; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; //定时器T0开启 ET0=1; //定时器0允许中断 P0 = 0X00; P2 = 0X00; h=m=s=0; //****时,分,秒,初值 } //******************数码管显示函数*********************** void display() { P0=tab[h/10]; //取小时的十位 P2=0x01; delay(); P2=0X00; //P2口清屏 P0=tab[h%10]; //取小时的个位 P2=0x02; delay(); P2=0X00; P0=tab[m/10]; //取分钟的十位

C语言模拟时钟转动课设报告-附代码

模拟时针转动程序 姓名: 学号: 完成日期:2012年12月

设计目的 加深对讲授内容的理解,尤其是一些语法规定。通过课程设计,自然地、熟练地掌握。熟悉所用的计算机系统的操作方法,也就是熟悉语言程序开发的环境。学会上机调试程序。熟悉C语言图形模式下的编程,掌握利用C语言相关函数开发电子时钟的基本原理。 能模拟机械钟表行走;要准确地利用数字显示时间;在屏幕上显示一个活动时钟;程序界面设计合理,色彩得体大方,显示正确;各指针运动规律正确;数字式时钟的时间显示与指针式时钟显示一致。 总体设计 电子时钟的功能描述

电子时钟流程图 模块描述 动画处理模块在屏幕上显示sin和cos型的动态函数图像,显示运动的问候语。 转时针动处理模块指针式的时钟表盘为椭圆形并且圆周上有分布均匀的12个刻度刻度显示清楚钟面上有长度不相同的指针即时针、分针、秒针指针的运动具有规律性为顺时针。 数字时钟处理模块数字钟显示时间的格式是年月日时分秒小时为24进制,分钟和秒是60进制,指针式的时钟和数字式的时钟显示的时间同步且两个时钟所显示的时间与计算机的系统时间一致。 详细设计 time结构体 strume time { usigned char ti_min; usigned char ti_hour; usigned char ti_hud; usigned char ti_sec; }; time 结构体定义在dos.h文件中,可以保存系统的当前时间。

double h,m,s;这三个变量分别保存小时,分钟,秒。 double x,y,x1,y1,x2,y2;保存数字时钟中小时分钟秒在屏幕中显示的位置。 struct time t[1];定义一个time结构类型的数组。 函数功能的描述 1.def() 函数原型: void def() def()函数是用来输出一组彩带的,通过输入位置和颜色的变化来输出sin型的彩带,且在整个函数中保留结果。 2. abc() 函数原型: void abc() abc()函数是用来在退出系统是输出运动的问候语,函数类型单一且比较简单。 3 .digitclock() 函数原型:void digitclock() digitclock函数用于在(x,y)位置显示clock值,clock值为时分秒。 4. clockhandle() 函数原型:void clockhandle() clockhandle()函数用于完成时针转动和数字时钟的显示,包括时针转动角度的运算,还有对声音的输出。

相关主题