今天来用C语言制作一款电子时钟程序,相信你们一定能用的上。

效果展示

1.窗口创建

 

2.基本绘图

3.时间获取

4.代码展示

绘制表盘部分代码:

#include <stdio.h>
#include <SDL.h>
#include <SDL_mixer.h>                //音乐
#include <SDL_image.h>                //图像
#include <time.h>
#include <stdbool.h>
#define W_WIDTH 640
#define W_HEIGHT 480
#define PI 3.1415926
SDL_Window* window = NULL;          //窗口
SDL_Renderer* render = NULL;        //渲染器
Mix_Chunk* music = NULL;            //音乐
void InitGraph(int w, int h)
{//1.初始化过程if (SDL_Init(SDL_INIT_EVERYTHING) != 0) //返回0表示初始化成功{SDL_Log("SDL init error!");          //打印初始化失败}if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) != 0) {SDL_Log("Music init error!");}//2.调用相关函数创建窗口//SDL_CreateWindow(const char name,int x,int y,int w,int h,int flag);//name: 窗口名字//x,y:窗口显示的位置//w.h:窗口的宽度和高度//flag: 显示方式window = SDL_CreateWindow("clock_Demo", 100, 100, w, h, SDL_WINDOW_SHOWN);//SDL_WINDOW_SHOWN等效写4render = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE);//SDL_RENDERER_SOFTWARE等效写1}
//画线
//SDL_RenderDrawLine(render,int x,int y,int xx,int yy);
//为画表盘做准备
//圆心坐标+半径
void SDL_RenderDrawCircle(SDL_Renderer* render, int x, int y, int r)
{SDL_FPoint point;          //点坐标for (float t = 0; t < 360; t += 0.1) {point.x = x + r * SDL_cos(t);point.y = y + r * SDL_sin(t);SDL_RenderDrawPoint(render, point.x, point.y);}}
//表盘布局
void DrawDial()
{SDL_SetRenderDrawColor(render, 0, 0, 0, 255);          //绘制颜色SDL_RenderDrawCircle(render,W_WIDTH / 2, W_HEIGHT / 2, 2);SDL_RenderDrawCircle(render, W_WIDTH / 2, W_HEIGHT / 2, 60);SDL_RenderDrawCircle(render, W_WIDTH / 2, W_HEIGHT / 2, 160);int x, y;for (int i = 0; i < 60; i++) {x = 320 + 145 * SDL_sin(PI * 2 * i / 60);y = 240 + 145 * SDL_cos(PI * 2 * i / 60);if (i % 15 == 0) {//画矩形SDL_Rect rect = { x - 5,y - 5,10,10 };      //起点坐标和矩形宽度和高度SDL_RenderFillRect(render, &rect);}else if (i % 5 == 0) {//画圆SDL_RenderDrawCircle(render,x, y,3);}else {//画点SDL_RenderDrawPoint(render, x, y);}}
}
//时针绘制
void DrawHand(int hour, int min, int sec)
{double a_hour, a_min, a_sec;                       //弧度int x_hour, y_hour, x_min, y_min, x_sec, y_sec;     //表针坐标//怎么时间转换弧度//弧度=度数*π/180//一圈是60秒,一圈是360,一秒就是6度a_sec = sec * 2 * PI / 60;a_min = min * 2 * PI / 60 + a_sec / 60;a_hour = hour * 2 * PI / 12 + a_min / 12;//计算坐标x_sec = 120 * SDL_sin(a_sec);y_sec = 120 * SDL_cos(a_sec);x_min = 100 * SDL_sin(a_min);y_min = 100 * SDL_cos(a_min);x_hour = 70 * SDL_sin(a_hour);y_hour = 70 * SDL_cos(a_hour);//画针--->画线SDL_RenderDrawLine(render, 320 + x_hour, 240 - y_hour, 320 - x_hour / 7, 240 + y_hour / 7);SDL_RenderDrawLine(render, 320 + x_min, 240 - y_min, 320 - x_min / 5, 240 + y_min / 5);SDL_RenderDrawLine(render, 320 + x_sec, 240 - y_sec, 320 - x_sec / 3, 240 + y_sec / 3);
}
//Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param);
Uint32 PlayMusic(Uint32 interval, void* param)
{music = Mix_LoadWAV("1.wav");Mix_PlayChannel(-1, music, 1);return interval;
}
//事件处理
//鼠标事件
//按键事件
//窗口事件
void Event()
{//esc键关闭窗口//点x可以关闭窗口//SDL_AddTimer(1000,func,NULL);int id=SDL_AddTimer(1000, PlayMusic, NULL);bool close = false;while (close == false) {SDL_SetRenderDrawColor(render, 255, 255, 255, 255);       //设置为黑色-->窗口渲染的颜色SDL_RenderClear(render);//获取事件struct tm* pTime = NULL;time_t data = time(NULL);pTime = localtime(&data);DrawDial();DrawHand(pTime->tm_hour, pTime->tm_min, pTime->tm_sec);SDL_RenderPresent(render);SDL_Event event;       //事件变量while (SDL_PollEvent(&event) != 0)        //获取事件{if (event.type == SDL_KEYDOWN)       //按键事件{if (event.key.keysym.sym == SDLK_ESCAPE) //判断按键值是esc键{close = true;}}if (event.type == SDL_QUIT)         //x的鼠标事件{close = true;}}}SDL_RemoveTimer(id);
}
void CloseGraph()
{SDL_DestroyWindow(window);         //销毁窗口SDL_Quit();                           //关闭SDL
}
int main()
{InitGraph(W_WIDTH, W_HEIGHT);      //创建窗口  Event();//SDL_Delay(3000);                  //延时CloseGraph();return 0;
}

时间函数部分代码

#include <time.h>
#include <stdio.h>
int main()
{long long data = time(NULL);struct tm* time = NULL;time = localtime(&data);printf("%d:%d:%d\n", time->tm_hour, time->tm_min, time->tm_sec);puts(ctime(&data));return 0;
}

5.电子时钟教程

利用C语言和SDL图形化打造电子时钟程序

6.完整电子时钟程序代码

这不是很难,效果还不错,创建了两个源文件哦,大家可以尝试的去写一下~

源码素材直通车https://jq.qq.com/?_wv=1027&k=A6HavGrN

C语言制作电子时钟程序(内附代码)相关推荐

  1. 数字时钟程序c语言,C语言实现电子时钟程序

    本文实例为大家分享了C语言实现电子时钟程序的具体代码,供大家参考,具体内容如下 Qt 里面运行 #include #include #include #include #include typedef ...

  2. 我用Python爬取了难下载的电子教材(内附代码)

    我用Python爬取了难下载的电子教材(内附代码) 第一次在CSDN上面分享经历,有点激动.本大二狗最近这段时间去不了学校又想看教材,不巧学习通上面的部分内容老师设置了不可下载啊.好在最近学习了一点P ...

  3. 独家 | 手把手教你用scrapy制作一个小程序 !(附代码)

    目录 一.前言 二.原理 2.1 爬取流程 2.2 各部块的解释 2.3 scrapy数据流的分析 三.理解 四.实战 4.1 首先是安装scrapy 4.2 建立项目和下载pycharm以及pych ...

  4. 时钟电路程序设计c语言,STC89C52单片机简易时钟程序电路设计(附源代码和电路图)...

    51(STC89C52)单片机简易时钟程序电路设计(附源代码和电路图) 上一篇做了一个温湿度采集电路,觉得这东西玩起来还是挺有意思,然后就想做一个时钟,于是就有了下文 1.成品图 51hei图片_20 ...

  5. 微课|中学生可以这样学Python(例11.1):tkinter电子时钟程序(1)

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章  综合案例设计与分析 例11.1  GUI版电子时钟程序 京东购买链接:https:// ...

  6. 微课|中学生可以这样学Python(例11.1):tkinter电子时钟程序(2)

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第11章  综合案例设计与分析 例11.1  GUI版电子时钟程序 京东购买链接:https:// ...

  7. 用python写个电子钟_[TPYBoard - Micropython之会python就能做硬件 3] 制作电子时钟

    欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231模块 一块 3.NOKIA 5110 LCD 屏 一块 4.杜邦线:若干 ===感谢某宝 ...

  8. 51驱动DS1302制作电子时钟1602显示

    51驱动DS1302制作电子时钟1602显示 模组选型 模组选型解析 设计思路 产品接线 部分代码解析 总结 原文链接:https://www.yourcee.com/newsinfo/2928557 ...

  9. 用74ls90及少量器件制作电子时钟

    2022-12-22 前言:用74ls90及少量器件制作电子时钟是一个课设作业,设计的过程中顺便也就写了这篇文章,分享一下在设计中的一些思路.文章中哪些不懂的可以评论区留言,看到就一定回复,建议不要C ...

最新文章

  1. dubbo服务使用spring-data-mongodb进行时间查询的bug记录
  2. 安全的 ActiveMQ
  3. Leetcode4-寻找两个正序数组的中位数原理及代码实现
  4. boost::hana::list用法的测试程序
  5. QT如何设置应用程序的图标
  6. iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度
  7. Linux系统CPU相关信息查询
  8. VS2012生成C的dll并调用以及Python调用C的DLL
  9. 页面上传图片只能通过表单完成,且页面端向服务器端发送消息除了ajax外基本通过表单;通过JavaScript ajax代码只能post到服务器json与xml;...
  10. 浅谈C#深拷贝,浅拷贝
  11. java学生成绩管理系统(集合与泛型、文件读写)
  12. 通过bat文件批量判断url地址的状态
  13. linux gz解压 指定目,linux解压tar.gz到指定文件夹或目录
  14. 数据结构 实验2——表达式求值
  15. 夏普计算机各键功能,夏普打印机按键说明
  16. 金山云智能营销平台再升级,AI 投放助力游戏厂商精准到达;微医发布 AI 解决方案,提升县域医疗服务能力...
  17. 亚马逊云科技助力学习者轻松开启云计算知识学习之旅
  18. 对策论基础---引言
  19. CM安装成功,CM的web界面登录不上解决方案
  20. Java获取当天0时0分0秒时间的方法

热门文章

  1. mysql 弱口令暴力破解本地渗透测试
  2. SwitchHosts!报没有权限(operation not permitted)解决方案
  3. HotSpot-多维属性的kpi异常定位(根因分析)
  4. oracle10g安装教程
  5. Java连接数据库(JDBC非常重要)
  6. Java数据库连接池的实现(不用框架)
  7. 工信部牵头成立可信号码数据中心 预防电话骚扰
  8. R语言学习之路——进入R的大门
  9. java经典算法思想 贪心_这几道经典例题帮你轻松搞透贪心算法
  10. Hello Ionic - Ionic学习笔记