C++编程_时钟程序

合集下载

时钟程序(C语言)

时钟程序(C语言)
if(timeout>=rest_timeout) //退出设置
{
key_rest=0;
timeout=0;
}
}
TH0=0X3c; //定时器T0高8位赋初值
date[1]=num[hour%10]&0x7f;
else
date[1]=num[hour%10];
dateห้องสมุดไป่ตู้2]=num[minute/10]; //存显示数字
date[3]=num[minute%10]; //存显示数字
#define segment P0 //段码接口
sbit up=P1^0; //数字加
sbit down=P1^1; //数字减
sbit rest=P1^2; //设置
ET0=1; //定时器T0中断允许
TR0=1; //启动定时器T0
while(1)
{
key();
time();
}
return 0;
}
/***********************************************************************************************************************/
int key() //按键
{
if(rest==0&&sig==0)
{
key_rest=(key_rest+1)%3; //按键功能,'0'无操作,'1'时设置,'2'分设置
sig=1; //按键标识
TMOD=0X01; //使用定时器T0的模式1

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)

51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)效果图:程序如下://51单片机c语言电子钟(已加入调时、闹铃、整点报时功能)#include<reg51.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int/*七段共阴管显示定义*///此表为LED 的字模,共阴数码管0-9 -uchar code dispcode[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段码控制/*定义并初始化变量*/uchar seconde=0;//秒uchar minite=0;//分uchar hour=12; //时uchar shi=0;//闹铃功能uchar fen=0;uchar bjcs;//报警次数sbit P1_0=P1^0; //second 调整定义sbit P1_1=P1^1; //minite调整定义sbit P1_2=P1^2; //hour调整定义sbit P1_5=P1^5; //整点报时sbit P1_3=P1^3; //闹铃功能,调整时间sbit P1_6=P1^6; //调整时sbit P1_7=P1^7; //调整分sbit P1_4=P1^4; //关闭闹铃/*函数声明*/void delay(uint k ); //延时子程序void time_pro( ); //时间处理子程序void display( ); //显示子程序void keyscan( ); //键盘扫描子程序/*xx子程序*/void delay (uint k){uchar j;while((k--)!=0){for(j=0;j<125;j++){;}}}/*时间处理子程序*/void time_pro(void){if(seconde==60){seconde=0;minite++;if(minite==60){minite=0;hour++;if(hour==24){hour=0;}}}}/*显示子程序*/void display(void){if(P1_3==1){P2=0XFE; P0=dispcode[seconde%10];//秒个位delay(1);P2=0XFD;P0=dispcode[seconde/10];//秒十位delay(1);P2=0XFB;P0=dispcode[10];//间隔符-delay(1);P2=0XF7;P0=dispcode[minite%10];//分个位delay(1);P2=0XEF;P0=dispcode[minite/10];//分十位delay(1);P2=0XDF;P0=dispcode[10];//间隔符-delay(1);P2=0XBF;P0=dispcode[hour%10];//时个位delay(1);P2=0X7F;P0=dispcode[hour/10];//时十位delay(1);}}/*键盘扫描子程序*/void keyscan(void){if(P1_0==0)//秒位的调整{delay (30);if(P1_0==0){seconde++;if(seconde==60){seconde=0;}}delay(250);}if(P1_1==0)//分位的调整{delay(30);if(P1_1==0){minite++;if(minite==60){minite=0;}}delay(250);}if(P1_2==0)//时位的调整{delay(30);if(P1_2==0){hour++;if(hour==24){hour=0;}}delay(250);}}/*整点报警*/void zhengdian (void){if((seconde==0)&(minite==0))//整点报时{P1_5=0;delay(1000);P1_5=1;}}/*定时闹钟*/void dingshi(void){if(P1_3==0)//按住P1_3BU不松,显示闹铃设置界面,分别按P1_6、P1_7设置闹铃时间。

c语言课程设计钟表

c语言课程设计钟表

c语言课程设计钟表一、教学目标本节课的学习目标为:知识目标:使学生掌握C语言中指针、函数、结构体等基本概念;理解并掌握钟表的运行原理及其在C语言中的实现方式。

技能目标:培养学生具备运用C语言进行钟表程序设计的能力;提高学生的编程思维和问题解决能力。

情感态度价值观目标:激发学生对计算机科学的兴趣,培养学生的创新精神和团队合作意识。

二、教学内容本节课的教学内容主要包括:1.C语言基础知识:指针、函数、结构体等基本概念。

2.钟表运行原理:时钟、分针、秒针的运动规律及其表示方法。

3.钟表程序设计:利用C语言实现钟表的运行,包括时钟、分针、秒针的动态显示。

三、教学方法本节课采用以下教学方法:1.讲授法:讲解C语言基础知识,引导学生理解并掌握基本概念。

2.案例分析法:分析钟表运行原理,让学生通过实际案例理解并掌握钟表的实现方法。

3.实验法:学生动手编写钟表程序,培养学生的实际编程能力和问题解决能力。

四、教学资源本节课所需教学资源包括:1.教材:《C语言程序设计》等相关教材,用于引导学生学习基础知识。

2.多媒体资料:钟表运行原理PPT、编程实例等,用于辅助讲解和展示。

3.实验设备:计算机、编程环境等,用于学生动手实践。

4.在线资源:相关编程教程、讨论区等,用于学生课后自学和交流。

五、教学评估本节课的评估方式包括:1.平时表现:评估学生在课堂上的参与程度、提问回答等情况,占总评的30%。

2.作业:评估学生完成的编程练习质量和进度,占总评的40%。

3.考试:进行一次钟表程序设计考试,评估学生的综合编程能力,占总评的30%。

评估方式应客观、公正,全面反映学生的学习成果。

教师应及时给予反馈,指导学生改进学习方法和策略。

六、教学安排本节课的教学安排如下:1.进度:按照教材和教学大纲,合理安排每个阶段的教学内容,确保在有限的时间内完成教学任务。

2.时间:根据学生的作息时间,选择合适的时间段进行授课,保证学生的学习效果。

3.地点:选择安静、设施齐全的教室作为教学地点,创造良好的学习环境。

C语言51单片机时钟程序

C语言51单片机时钟程序
/*延时?函数*/ void delay(uint k) { uint i,j; for(i=0;i<k;i++){ for(j=0;j<121;j++) {;}}
} /*----------------------- 主函数 ------------------------- */
/*主函数*/
void main()
{
init_timer();
/*定时器 T0 初始化*/
while(1) /*无限循环*/
{
if(P2_4==0)scan_key(); /*有按键,调用按键扫描?函数*/
switch(set)
/*根据 set 键值散转*/
{
case 0:time(); break; /*走时时间程序*/
程序三
同时用两个定时器控制蜂鸣器发声, 定时器 0 控制频率,定时器 1 控制同个 频率持续的时间,间隔 2s 依次输出 1,10,50,100,200,400,800, 1k(hz)的方波
#include<reg52.h> //52 单片机头文件 #include <intrins.h> //包含有左右循环移位子函数的库 #define uint unsigned int //宏定义 #define uchar unsigned char //宏定义 sbit beep=P2^3;
ET0=1;//开定时器 0 中断
TR0=1;//启动定时器 0
a=0xfe;
while(1);//等待中断产生
}
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==2) {

数字时钟_89C52_单片机C语言程序

数字时钟_89C52_单片机C语言程序
/*列扫描控制 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】作为倒计时开始的标志 */
TH0 = (65536 - 10000) / 256; /*给定计时器高位赋予 初值=15536/256*/
TL0 = (65536 - 10000) % 256; /*给定计时器低位赋予 初值=15536%256 */
ET0 = 1; /*打开定时器外部终断0允许 ET1是中断器1的开关*/
P2 = C[4];
Delay(1);
P0 = Code[Msec%10]; /*第五位的数字显示【分】的【个】位 */
P2 = C[5];
Delay(1);
Delay(1);
P0 = 0x40; /*第六位符号【-】的显示 */
P2 = C[6];
Delay(1);
P2 = C[2];
Delay(1);
if(x/50==0)
P0 = 0x40; /*第三位符号【-】的显示 */
else
P0 = 0x00;
P2 = C[3];
Delay(1);
P0 = Code[min/10]; /*第四位的数字的显示【分】的【十】位 */
uchar month=7;
uchar month2;
uchar day=19;
uchar set1 = 1; /* set1=1 是调节 时分秒 set1=2时时调节 年月日 set=3时事调节闹钟 */

AT8951单片机带闹钟数字时钟 C语言编程

AT8951单片机带闹钟数字时钟 C语言编程

{
delay(10);
//延时去抖
if(K2==0)
//加键按下
{
if(hour<23) hour++;
else hour=0;
}
while(!K2);
//等待按键释放
}
if(K3==0) {
delay(10); if(K3==0) {
if(hour> 0) hour--; else hour=23; } while(!K3); } } break;
}break; case 1:
{ if(S_flag==1) { a[0]=led[hour/10]; a[1]=led[hour%10]; } else {
a[0]=led[11]; a[1]=led[11]; } a[2]=led[10]; a[3]=led[minute/10]; a[4]=led[minute%10]; a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second%10]; }break; case 2: { a[0]=led[hour/10]; a[1]=led[hour%10]; a[2]=led[10]; if(S_flag==1) { a[3]=led[minute/10]; a[4]=led[minute%10]; } else { a[3]=led[11]; a[4]=led[11]; } a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second%10]; }break; case 3: { if(S_flag==1) { a[0]=led[hour1/10]; a[1]=led[hour1%10]; } else { a[0]=led[11]; a[1]=led[11]; } a[2]=led[10]; a[3]=led[minute1/10]; a[4]=led[minute1%10];

ds时钟程序详解ds程序流程图C程序

ds时钟程序详解ds程序流程图C程序

ds时钟程序详解,ds程序流程图(C程序)ds1302时钟程序详解,ds1302程序流程图(C程序)ds1302时钟程序详解DS1302 的控制字。

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。

2.3 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。

同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

2.4 DS1302的寄存器DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表1。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。

时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。

DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。

ds1302程序流程图3.2 DS1302实时时间流程图4示出DS1302的实时时间流程。

根据此流程框图,不难采集实时时间。

下面结合流程图对DS1302的基本操作进行编程:根据本人在调试中遇到的问题,特作如下说明:DS1302 与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5~D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。

用c语言实现钟表

用c语言实现钟表
要使用 C 语言编写一个简单的钟表程序,你可以按照以下步骤进行:
1. 引入所需的头文件:你需要引入一些头文件来实现程序的功能,例如 stdio.h、stdlib.h、time.h 等。
2. 定义程序的数据结构:你可以定义一个结构体来表示钟表的时间,包括时、分、秒等字段。
3. 获取当前时间:使用 time 函数获取当前系统时间,并将其转换为时、分、秒等字段。
localTime->tm_sec);
22.
23.
// 暂停一秒钟
Байду номын сангаас
24.
sleep(1);
25. }
26.
27. return 0;
28. }
29. 这个程序会不断获取当前系统时间,并输出格式为"时:分:秒"的钟表界面。程序会每 秒钟更新一次时间,并在终端上显示。你可以根据需要进行适当的修改和扩展,例
time_t currentTime = time(NULL);
17.
struct tm *localTime = localtime(&currentTime);
18.
19.
// 输出钟表界面
20.
system("clear"); // 清屏(适用于 Linux 和 Mac)
21.
printf("%02d:%02d:%02d\n", localTime->tm_hour, localTime->tm_min,
7. 下面是一个简单的 C 语言实现钟表的代码示例:
8. c 复制代码
9. #include <stdio.h>
10. #include <stdlib.h>
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// clock2Dlg.cpp : implementation file#include "stdafx.h"#include "clock2.h"#include "clock2Dlg.h"#include "math.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App Aboutclass CAboutDlg : public CDialog{public:CAboutDlg();// Dialog Data//{{AFX_DATA(CAboutDlg)enum { IDD = IDD_ABOUTBOX };//}}AFX_DATA// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected://{{AFX_MSG(CAboutDlg)//}}AFX_MSGDECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){//{{AFX_DATA_INIT(CAboutDlg)//}}AFX_DATA_INIT}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CAboutDlg)//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)//{{AFX_MSG_MAP(CAboutDlg)// No message handlers//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CClock2Dlg dialogCClock2Dlg::CClock2Dlg(CWnd* pParent /*=NULL*/): CDialog(CClock2Dlg::IDD, pParent){//{{AFX_DATA_INIT(CClock2Dlg)// NOTE: the ClassWizard will add member initialization here//}}AFX_DATA_INIT// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CClock2Dlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CClock2Dlg)// NOTE: the ClassWizard will add DDX and DDV calls here//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CClock2Dlg, CDialog)//{{AFX_MSG_MAP(CClock2Dlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_WM_TIMER()//}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CClock2Dlg message handlersBOOL CClock2Dlg::OnInitDialog(){CDialog::OnInitDialog();//定时器:SetTimer(1,1000,NULL);// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization herereturn TRUE; // return TRUE unless you set the focus to a control}void CClock2Dlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}// If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework.void CClock2Dlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}//下面输入时钟程序代码:CDC *pDC=this->GetDC();CRect rc;GetClientRect(&rc);//int xStart=rc.right/2; //计算中心点 int yStart=rc.bottom/2;CTime time=CTime::GetCurrentTime(); //得到当前的时间 CString strDigits;int i,x,y;CSize size;CPen Pen(PS_SOLID,5,RGB(0,0,0));CPen *pOldPen=pDC->SelectObject(&Pen);pDC->Ellipse(5,5,rc.right-5,rc.bottom-5); //画圆盘double Radians; //定义角度pDC->SetTextColor(RGB(0,0,0)); //开始写入数字1-12for(i=1;i<=12;i++){strDigits.Format("%d",i);size=pDC->GetTextExtent(strDigits,strDigits.GetLength());Radians=(double)i*6.28/12.0;x=xStart-(size.cx/2)+(int)((double)(xStart-20)*sin(Radians));//数字水平位置y=yStart-(size.cy/2)-(int)((double)(yStart-20)*cos(Radians));//数字垂直位置pDC->TextOut(x,y,strDigits);}//开始绘制时针Radians=(double)time.GetHour()+(double)time.GetMinute()/60.00+(double)time.GetSe cond()/3600.00;Radians*=6.28/12.0;CPen HourPen(PS_SOLID,5,RGB(0,0,0)); //定义时针线宽pDC->SelectObject(HourPen);pDC->MoveTo(xStart,yStart);pDC->LineTo(xStart+(int)((double)(xStart/2)*sin(Radians)),yStart-(int)((double)(yStart/2)*cos(Radians)));//开始绘制分针Radians=(double)time.GetMinute()+(double)time.GetSecond()/60.00;Radians*=6.28/60.0;CPen MinutePen(PS_SOLID,3,RGB(0,0,0)); //定义分针线宽pDC->SelectObject(MinutePen);pDC->MoveTo(xStart,yStart);pDC->LineTo(xStart+(int)((double)(xStart*2/3)*sin(Radians)),yStart-(int)((double) (yStart*2/3)*cos(Radians)));//开始绘制秒针Radians=(double)time.GetSecond();Radians*=6.28/60.0;CPen SecondPen(PS_SOLID,1,RGB(0,0,0)); //定义秒针线宽pDC->SelectObject(SecondPen);pDC->MoveTo(xStart,yStart);pDC->LineTo(xStart+(int)((double)(xStart*4/5)*sin(Radians)),yStart-(int)((double)(yStart*4/5)*cos(Radians)));pDC->SelectObject(pOldPen);//时钟代码结束}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CClock2Dlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}//有关定时器:void CClock2Dlg::OnTimer(UINT nIDEvent){InvalidateRect(NULL,true);UpdateWindow();CDialog::OnTimer(nIDEvent);}。

相关文档
最新文档