15.9 单片机电子时钟程序设计
本例直接忽略了星期这项内容,通过上、下、左、右、回车、ESC 这 6 个按键可以调整时间。这也是一个具有综合练习性质的实例,虽然在功能实现上没有多少难度,但要进行的操作却比较多而且烦琐,同学们可以从中体会到把繁杂的功能实现分解为一步步函数操作的必要性以及方便灵活性。简单说一下这个程序的几个要点,方便大家阅读理解程序。
- 把 DS1302 的底层操作封装为一个 DS1302.c 文件,对上层应用提供基本的实时时间的操作接口,这个文件也是我们的又一个功能模块了,我们的积累也越来越多了。
- 定义一个结构体类型 sTime 用来封装日期时间的各个元素,又用该结构体定义了一个时间缓冲区变量 bufTime 来暂存从 DS1302 读出的时间和设置时间时的设定值。需要注意的是在其它文件中要使用这个结构体变量时,必须首先再声明一次 sTime 类型;
- 定义一个变量 setIndex 来控制当前是否处于设置时间的状态,以及设置时间的哪一位,该值为 0 就表示正常运行,1~12 分别代表可以修改日期时间的 12 个位;
- 由于这节课的程序功能要进行时间调整,用到了 1602 液晶的光标功能,添加了设置光标的函数,我们要改变哪一位的数字,就在 1602 对应位置上进行光标闪烁,所以 Lcd1602.c在之前文件的基础上添加了两个控制光标的函数;
- 时间的显示、增减、设置移位等上层功能函数都放在 main.c 中来实现,当按键需要这些函数时则在按键文件中做外部声明,这样做是为了避免一组功能函数分散在不同的文件内而使程序显得凌乱。
- /***************************DS1302.c 文件程序源代码*****************************/
- #include <reg52.h>
- sbit DS1302_CE = P1^7;
- sbit DS1302_CK = P3^5;
- sbit DS1302_IO = P3^4;
- struct sTime { //日期时间结构体定义
- unsigned int year; //年
- unsigned char mon; //月
- unsigned char day; //日
- unsigned char hour; //时
- unsigned char min; //分
- unsigned char sec; //秒
- unsigned char week; //星期
- };
- /* 发送一个字节到 DS1302 通信总线上 */
- void DS1302ByteWrite(unsigned char dat){
- unsigned char mask;
- for (mask=0x01; mask!=0; mask<<=1){ //低位在前,逐位移出
- if ((mask&dat) != 0){ //首先输出该位数据
- DS1302_IO = 1;
- }else{
- DS1302_IO = 0;
- }
- DS1302_CK = 1; //然后拉高时钟
- DS1302_CK = 0; //再拉低时钟,完成一个位的操作
- }
- DS1302_IO = 1; //最后确保释放 IO 引脚
- }
- /* 由 DS1302 通信总线上读取一个字节 */
- unsigned char DS1302ByteRead(){
- unsigned char mask;
- unsigned char dat = 0;
- for (mask=0x01; mask!=0; mask<<=1){ //低位在前,逐位读取
- if (DS1302_IO != 0){ //首先读取此时的 IO 引脚,并设置 dat 中的对应位
- dat |= mask;
- }
- DS1302_CK = 1; //然后拉高时钟
- DS1302_CK = 0; //再拉低时钟,完成一个位的操作
- }
- return dat; //最后返回读到的字节数据
- }
- /* 用单次写操作向某一寄存器写入一个字节,reg-寄存器地址,dat-待写入字节 */
- void DS1302SingleWrite(unsigned char reg, unsigned char dat){
- DS1302_CE = 1; //使能片选信号
- DS1302ByteWrite((reg<<1)|0x80); //发送写寄存器指令
- DS1302ByteWrite(dat); //写入字节数据
- DS1302_CE = 0; //除能片选信号
- }
- /* 用单次读操作从某一寄存器读取一个字节,reg-寄存器地址,返回值-读到的字节 */
- unsigned char DS1302SingleRead(unsigned char reg){
- unsigned char dat;
- DS1302_CE = 1; //使能片选信号
- DS1302ByteWrite((reg<<1)|0x81); //发送读寄存器指令
- dat = DS1302ByteRead(); //读取字节数据
- DS1302_CE = 0; //除能片选信号
- return dat;
- }
- /* 用突发模式连续写入 8 个寄存器数据,dat-待写入数据指针 */
- void DS1302BurstWrite(unsigned char *dat){
- unsigned char i;
- DS1302_CE = 1;
- DS1302ByteWrite(0xBE); //发送突发写寄存器指令
- for (i=0; i<8; i++){ //连续写入 8 字节数据
- DS1302ByteWrite(dat[i]);
- }
- DS1302_CE = 0;
- }
- /* 用突发模式连续读取 8 个寄存器的数据,dat-读取数据的接收指针 */
- void DS1302BurstRead(unsigned char *dat){
- unsigned char i;
- DS1302_CE = 1;
- DS1302ByteWrite(0xBF); //发送突发读寄存器指令
- for (i=0; i<8; i++){ //连续读取 8 个字节
- dat[i] = DS1302ByteRead();
- }
- DS1302_CE = 0;
- }
- /* 获取实时时间,即读取 DS1302 当前时间并转换为时间结构体格式 */
- void GetRealTime(struct sTime *time){
- unsigned char buf[8];
- DS1302BurstRead(buf);
- time->year = buf[6] + 0x2000;
- time->mon = buf[4];
- time->day = buf[3];
- time->hour = buf[2];
- time->min = buf[1];
- time->sec = buf[0];
- time->week = buf[5];
- }
- /* 设定实时时间,时间结构体格式的设定时间转换为数组并写入 DS1302 */
- void SetRealTime(struct sTime *time){
- unsigned char buf[8];
- buf[7] = 0;
- buf[6] = time->year;
- buf[5] = time->week;
- buf[4] = time->mon;
- buf[3] = time->day;
- buf[2] = time->hour;
- buf[1] = time->min;
- buf[0] = time->sec;
- DS1302BurstWrite(buf);
- }
- /* DS1302 初始化,如发生掉电则重新设置初始时间 */
- void InitDS1302(){
- unsigned char dat;
- struct sTime code InitTime[] = { //2013 年 10 月 8 日 12:30:00 星期二
- 0x2013,0x10,0x08, 0x12,0x30,0x00, 0x02
- };
- DS1302_CE = 0; //初始化 DS1302 通信引脚
- DS1302_CK = 0;
- dat = DS1302SingleRead(0); //读取秒寄存器
- if ((dat & 0x80) != 0){ //由秒寄存器最高位 CH 的值判断 DS1302 是否已停止
- DS1302SingleWrite(7, 0x00); //撤销写保护以允许写入数据
- SetRealTime(&InitTime); //设置 DS1302 为默认的初始时间
- }
- }
- /***************************Lcd1602.c 文件程序源代码*****************************/
- #include <reg52.h>
- #define LCD1602_DB P0
- sbit LCD1602_RS = P1^0;
- sbit LCD1602_RW = P1^1;
- sbit LCD1602_E = P1^5;
- /* 等待液晶准备好 */
- void LcdWaitReady(){
- unsigned char sta;
- LCD1602_DB = 0xFF;
- LCD1602_RS = 0;
- LCD1602_RW = 1;
- do {
- LCD1602_E = 1;
- sta = LCD1602_DB; //读取状态字
- LCD1602_E = 0;
- } while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止
- }
- /* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */
- void LcdWriteCmd(unsigned char cmd){
- LcdWaitReady();
- LCD1602_RS = 0;
- LCD1602_RW = 0;
- LCD1602_DB = cmd;
- LCD1602_E = 1;
- LCD1602_E = 0;
- }
- /* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */
- void LcdWriteDat(unsigned char dat){
- LcdWaitReady();
- LCD1602_RS = 1;
- LCD1602_RW = 0;
- LCD1602_DB = dat;
- LCD1602_E = 1;
- LCD1602_E = 0;
- }
- /* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */
- void LcdSetCursor(unsigned char x, unsigned char y){
- unsigned char addr;
- if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址
- addr = 0x00 + x; //第一行字符地址从 0x00 起始
- }else{
- addr = 0x40 + x; //第二行字符地址从 0x40 起始
- }
- LcdWriteCmd(addr | 0x80); //设置 RAM 地址
- }
- /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */
- void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){
- LcdSetCursor(x, y); //设置起始地址
- while (*str != '\0'){ //连续写入字符串数据,直到检测到结束符
- LcdWriteDat(*str++);
- }
- }
- /* 打开光标的闪烁效果 */
- void LcdOpenCursor(){
- LcdWriteCmd(0x0F);
- }
- /* 关闭光标显示 */
- void LcdCloseCursor(){
- LcdWriteCmd(0x0C);
- }
- /* 初始化 1602 液晶 */
- void InitLcd1602(){
- LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口
- LcdWriteCmd(0x0C); //显示器开,光标关闭
- LcdWriteCmd(0x06); //文字不动,地址自动+1
- LcdWriteCmd(0x01); //清屏
- }
/***************************keyboard.c 文件程序源代码****************************/
(此处省略,可参考之前章节的代码)
- /*****************************main.c 文件程序源代码******************************/
- #include <reg52.h>
- struct sTime { //日期时间结构体定义
- unsigned int year;
- unsigned char mon;
- unsigned char day;
- unsigned char hour;
- unsigned char min;
- unsigned char sec;
- unsigned char week;
- };
- bit flag200ms = 1; //200ms 定时标志
- struct sTime bufTime; //日期时间缓冲区
- unsigned char setIndex = 0; //时间设置索引
- unsigned char T0RH = 0; //T0 重载值的高字节
- unsigned char T0RL = 0; //T0 重载值的低字节
- void ConfigTimer0(unsigned int ms);
- void RefreshTimeShow();
- extern void InitDS1302();
- extern void GetRealTime(struct sTime *time);
- extern void SetRealTime(struct sTime *time);
- extern void KeyScan();
- extern void KeyDriver();
- extern void InitLcd1602();
- extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);
- extern void LcdSetCursor(unsigned char x, unsigned char y);
- extern void LcdOpenCursor();
- extern void LcdCloseCursor();
- void main(){
- unsigned char psec=0xAA; //秒备份,初值 AA 确保首次读取时间后会刷新显示
- EA = 1; //开总中断
- ConfigTimer0(1); //T0 定时 1ms
- InitDS1302(); //初始化实时时钟
- InitLcd1602(); //初始化液晶
- //初始化屏幕上固定不变的内容
- LcdShowStr(3, 0, "20 - - ");
- LcdShowStr(4, 1, " : : ");
- while (1){
- KeyDriver(); //调用按键驱动
- if (flag200ms && (setIndex == 0)){ //每隔 200ms 且未处于设置状态时,
- flag200ms = 0;
- GetRealTime(&bufTime); //获取当前时间
- if (psec != bufTime.sec){ //检测到时间有变化时刷新显示
- RefreshTimeShow();
- psec = bufTime.sec; //用当前值更新上次秒数
- }
- }
- }
- }
- /* 将一个 BCD 码字节显示到屏幕上,(x,y)-屏幕起始坐标,bcd-待显示 BCD 码 */
- void ShowBcdByte(unsigned char x, unsigned char y, unsigned char bcd){
- unsigned char str[4];
- str[0] = (bcd >> 4) + '0';
- str[1] = (bcd&0x0F) + '0';
- str[2] = '\0';
- LcdShowStr(x, y, str);
- }
- /* 刷新日期时间的显示 */
- void RefreshTimeShow(){
- ShowBcdByte(5, 0, bufTime.year);
- ShowBcdByte(8, 0, bufTime.mon);
- ShowBcdByte(11, 0, bufTime.day);
- ShowBcdByte(4, 1, bufTime.hour);
- ShowBcdByte(7, 1, bufTime.min);
- ShowBcdByte(10, 1, bufTime.sec);
- }
- /* 刷新当前设置位的光标指示 */
- void RefreshSetShow(){
- switch (setIndex){
- case 1: LcdSetCursor(5, 0); break;
- case 2: LcdSetCursor(6, 0); break;
- case 3: LcdSetCursor(8, 0); break;
- case 4: LcdSetCursor(9, 0); break;
- case 5: LcdSetCursor(11, 0); break;
- case 6: LcdSetCursor(12, 0); break;
- case 7: LcdSetCursor(4, 1); break;
- case 8: LcdSetCursor(5, 1); break;
- case 9: LcdSetCursor(7, 1); break;
- case 10: LcdSetCursor(8, 1); break;
- case 11: LcdSetCursor(10, 1); break;
- case 12: LcdSetCursor(11, 1); break;
- default: break;
- }
- }
- /* 递增一个 BCD 码的高位 */
- unsigned char IncBcdHigh(unsigned char bcd){
- if ((bcd&0xF0) < 0x90){
- bcd += 0x10;
- }else{
- bcd &= 0x0F;
- }
- return bcd;
- }
- /* 递增一个 BCD 码的低位 */
- unsigned char IncBcdLow(unsigned char bcd){
- if ((bcd&0x0F) < 0x09){
- bcd += 0x01;
- }else{
- bcd &= 0xF0;
- }
- return bcd;
- }
- /* 递减一个 BCD 码的高位 */
- unsigned char DecBcdHigh(unsigned char bcd){
- if ((bcd&0xF0) > 0x00){
- bcd -= 0x10;
- }else{
- bcd |= 0x90;
- }
- return bcd;
- }
- /* 递减一个 BCD 码的低位 */
- unsigned char DecBcdLow(unsigned char bcd){
- if ((bcd&0x0F) > 0x00){
- bcd -= 0x01;
- }else{
- bcd |= 0x09;
- }
- return bcd;
- }
- /* 递增时间当前设置位的值 */
- void IncSetTime(){
- switch (setIndex){
- case 1: bufTime.year = IncBcdHigh(bufTime.year); break;
- case 2: bufTime.year = IncBcdLow(bufTime.year); break;
- case 3: bufTime.mon = IncBcdHigh(bufTime.mon); break;
- case 4: bufTime.mon = IncBcdLow(bufTime.mon); break;
- case 5: bufTime.day = IncBcdHigh(bufTime.day); break;
- case 6: bufTime.day = IncBcdLow(bufTime.day); break;
- case 7: bufTime.hour = IncBcdHigh(bufTime.hour); break;
- case 8: bufTime.hour = IncBcdLow(bufTime.hour); break;
- case 9: bufTime.min = IncBcdHigh(bufTime.min); break;
- case 10: bufTime.min = IncBcdLow(bufTime.min); break;
- case 11: bufTime.sec = IncBcdHigh(bufTime.sec); break;
- case 12: bufTime.sec = IncBcdLow(bufTime.sec); break;
- default: break;
- }
- RefreshTimeShow();
- RefreshSetShow();
- }
- /* 递减时间当前设置位的值 */
- void DecSetTime(){
- switch (setIndex){
- case 1: bufTime.year = DecBcdHigh(bufTime.year); break;
- case 2: bufTime.year = DecBcdLow(bufTime.year); break;
- case 3: bufTime.mon = DecBcdHigh(bufTime.mon); break;
- case 4: bufTime.mon = DecBcdLow(bufTime.mon); break;
- case 5: bufTime.day = DecBcdHigh(bufTime.day); break;
- case 6: bufTime.day = DecBcdLow(bufTime.day); break;
- case 7: bufTime.hour = DecBcdHigh(bufTime.hour); break;
- case 8: bufTime.hour = DecBcdLow(bufTime.hour); break;
- case 9: bufTime.min = DecBcdHigh(bufTime.min); break;
- case 10: bufTime.min = DecBcdLow(bufTime.min); break;
- case 11: bufTime.sec = DecBcdHigh(bufTime.sec); break;
- case 12: bufTime.sec = DecBcdLow(bufTime.sec);
- default: break;
- }
- RefreshTimeShow();
- RefreshSetShow();
- }
- /* 右移时间设置位 */
- void RightShiftTimeSet(){
- if (setIndex != 0){
- if (setIndex < 12){
- setIndex++;
- }else{
- setIndex = 1;
- }
- RefreshSetShow();
- }
- }
- /* 左移时间设置位 */
- void LeftShiftTimeSet(){
- if (setIndex != 0){
- if (setIndex > 1){
- setIndex--;
- }else{
- setIndex = 12;
- }
- RefreshSetShow();
- }
- }
- /* 进入时间设置状态 */
- void EnterTimeSet(){
- setIndex = 2; //把设置索引设置为 2,即可进入设置状态
- LeftShiftTimeSet(); //再利用现成的左移操作移到位置 1 并完成显示刷新
- LcdOpenCursor(); //打开光标闪烁效果
- }
- /* 退出时间设置状态,save-是否保存当前设置的时间值 */
- void ExitTimeSet(bit save){
- setIndex = 0; //把设置索引设置为 0,即可退出设置状态
- if (save){ //需保存时即把当前设置时间写入 DS1302
- SetRealTime(&bufTime);
- }
- LcdCloseCursor(); //关闭光标显示
- }
- /* 按键动作函数,根据键码执行相应的操作,keycode-按键键码 */
- void KeyAction(unsigned char keycode){
- if ((keycode>='0') && (keycode<='9')){ //本例中不响应字符键
- }else if (keycode == 0x26){ //向上键,递增当前设置位的值
- IncSetTime();
- }else if (keycode == 0x28){ //向下键,递减当前设置位的值
- DecSetTime();
- }else if (keycode == 0x25){ //向左键,向左切换设置位
- LeftShiftTimeSet();
- }else if (keycode == 0x27){ //向右键,向右切换设置位
- RightShiftTimeSet();
- }else if (keycode == 0x0D){ //回车键,进入设置模式/启用当前设置值
- if (setIndex == 0){ //不处于设置状态时,进入设置状态
- EnterTimeSet();
- }else{ //已处于设置状态时,保存时间并退出设置状态
- ExitTimeSet(1);
- }
- }else if (keycode == 0x1B){ //Esc 键,取消当前设置
- ExitTimeSet(0);
- }
- }
- /* 配置并启动 T0,ms-T0 定时时间 */
- void ConfigTimer0(unsigned int ms){
- unsigned long tmp; //临时变量
- tmp = 11059200 / 12; //定时器计数频率
- tmp = (tmp * ms) / 1000; //计算所需的计数值
- tmp = 65536 - tmp; //计算定时器重载值
- tmp = tmp + 28; //补偿中断响应延时造成的误差
- T0RH = (unsigned char)(tmp>>8); //定时器重载值拆分为高低字节
- T0RL = (unsigned char)tmp;
- TMOD &= 0xF0; //清零 T0 的控制位
- TMOD |= 0x01; //配置 T0 为模式 1
- TH0 = T0RH; //加载 T0 重载值
- TL0 = T0RL;
- ET0 = 1; //使能 T0 中断
- TR0 = 1; //启动 T0
- }
- /* T0 中断服务函数,执行按键扫描和 200ms 定时 */
- void InterruptTimer0() interrupt 1{
- static unsigned char tmr200ms = 0;
- TH0 = T0RH; //重新加载重载值
- TL0 = T0RL;
- KeyScan(); //按键扫描
- tmr200ms++;
- if (tmr200ms >= 200){ //定时 200ms
- tmr200ms = 0;
- flag200ms = 1;
- }
- }
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 解决js正则匹配换行问题实现代码
代码如下: <div id=”main”> <div id=”left”> </div> <div id=”right”> php </div> </div> 如果DIV内没有内容则不换行 把上面的改为: 复制代码 代码如下: <div id=”main”> <div id=”left”></div> …...
2024/4/17 0:31:13 - 基于步科(Kinco HMI 2.5)的组态软件使用
本篇介绍Kinco HMI 2.5的组态软件使用,图标如下目录一、新建工程并配置连接1.1 根据工程选择PLC与HMI型号1.2 配置PLC连接与选项二、组态画面编辑2.1 打开画面窗口2.2 编辑画面2.3 组态变量与PLC程序变量连接三、组态程序下载到HMI3.1 连接3.2 编译3.3 下载一、新建工程并配置…...
2024/4/17 0:31:07 - HTML5 Canvas 射击类小游戏 平滑的移动 思路
这篇博客主要讲了如何处理HTML5 Canvas 游戏中的角色移动问题。 笔者这几天做了一个 HTML5 Canvas 的射击类小游戏,嗯,名字叫做《DroppingBalls》,大概就是自己控制一个坦克在界面的最下面左右移动,然后上面会有怪向下移动,我们必须赶在怪完全掉下来之前将它击毙,否则我们…...
2024/4/17 0:30:43 - Android开发环境搭建(套装快速)
Android开发环境搭建目前有两种方式:一种是包括jdk安装、eclipse安装、Android SDK安装和ADT安装,第二种是jdk安装、SDK ADT Bundle安装(包含了带ADT的eclipse、Android SDK)。 第二种可快速搭建,默认使用官方提供的eclipse和SDK。第一种方式,可自己选择eclipse和SDK版本。…...
2024/3/31 22:03:32 - Win7 32位Android开发环境搭建
本文转自http://www.wuling365.com/Article/View.aspx?Id=28,如需转载请注明! 我们不但开发手机软件,我们还提供手机软件开发培训! 想学手机软件开发请与我们联系! 郴州Android开发QQ群:434284032 郴州Ios开发QQ群:450504788一、相关软件准备清单如下(如不知道下载,或…...
2024/5/4 0:50:39 - Nginx入门级配置与部署及“Hello World”
高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置、部署与“Hello World”Author: PoechantBlog: blog.CSDN.net/PoechantEmail: zhongchao.ustc#gmail.com (#->@)Date: August 29th, 2011Update: February 26th>, 2012Column: 《Nginx 高性能 Web 服务器》这一…...
2024/4/17 0:30:37 - 正则表达式匹配"非",以及"非"字符串的匹配
写法介绍首先,正则表达式的"非",代表不想匹配某个字符。比如字符串 helloword123,/[^0-9]+/g 可以匹配非数字,即匹配结果为 helloword;同样的,/[^he]+/g 可以匹配非h非e的字符,匹配结果为lloword123;那么 /[^hello]/g 呢?乍一看可能会以为能匹配word123,其…...
2024/4/17 0:30:00 - PIC单片机入门教程(二)—— 安装集成开发环境(MPLAB X IDE)
PIC单片机入门教程(二)—— 安装集成开发环境(MPLAB X IDE)教程中使用的电脑运行Windows 10 专业版 64位系统1、下载 MPLAB X IDE v4.05 历史版本:http://www.microchip.com/development-tools/pic-and-dspic-downloads-archive 注:截至2018-06-10,MPLAB X ID…...
2024/4/20 14:33:20 - 我的第一个简易小程序-万年历
这是我的第一个Java万年历小程序 #记录我的第一个java小程序 这是我作为一个java小白做的第一个小小程序,为了能更好的提升自己,所以将代码发到我的博客中,欢迎大神指教。 /** 示例:打印指定年月的天数。 分析: 31天:1、3、5、7、8、10、12 30天:4、6、9、11 28天:2-平…...
2024/4/19 21:47:40 - linux中find查找正则匹配目录下的文件
场景:要查找的目录结构相似,但是要从相似的目录中去查找指定的文件 命令解释:查找/var/muses下,以tm_打头的目录,中log目录中所有文件去匹配(-mtime后面的是,最近一天内,含有“log”的文件)find /var/muses/ -regex /var/muses/tm_.*/log/.* -mtime -1 -name "*?…...
2024/4/18 15:46:45 - 游戏1,猜拳
1.类和对象球队类:属性:国家,人数,球队名 方法:输出属性的值 class Person:def __init__(self,name=None,form=None,number=None):self.name=nameself.form=formself.number=numberdef aa(self):print(来自:{1},队名:{0},人数;{2}.format(self.form,self.name,self.n…...
2024/4/17 0:32:13 - Weka软件使用教程(入门级)
Weka软件使用教程(入门级)简 介PPT 简 介 最近在公司实习被要求做一个Weka的培训,所以就简单记录一下; 就当做是为以后方便复习了吧。。。 之前自学过一点,当时是看的优酷上的视频,是这个软件的开发者做的一个教学视频,讲的十分不错,感觉他们那边过的非常惬意,但十分…...
2024/4/17 0:33:13 - nginx入门---windows下安装配置nginx服务器
下载nginx for window 下载链接:点击下载nginx-windows然后一步步点击下一步然后完成就行,详细安装步骤也可以看安装图文相关操作1.打开cmd,进入nginx安装文件对应的目录下,这里我安装的路径是d:nginx/nginx-1.12.0,因此我输入命令"cd d://nginx/nginx-1.12.0"进…...
2024/4/17 6:48:12 - 求各位大神帮忙看一下我用51做的万年历程序有没有问题
求各位大神帮忙看一下我用51做的万年历程序有没有问题,液晶只有被光亮,不显示内容。 #include<reg52.h> #include<intrins.h>#define ds1302_sec_add 0x80 //设置秒的地址 #define ds1302_min_add 0x82 //设置分的地址 #define ds1302_hr_add …...
2024/4/17 0:32:07 - Android开发环境搭建的窍门以及难点解决
从去年开始,橄榄山研发Android手机软件,用于任何地点、任何时间读取或更新将基于云的BIM数据。特别是工程的施工现场,使用手机来查看工程图纸和工程数据,是非常方便的。这里说一下如何来配置Android开发环境,以及碰到哪些问题。一般的安装步骤请参看这篇文章博客,写的比较…...
2024/4/21 19:10:43 - Java万年历程序
【程序说明】该程序实现了输出任意一年的日历,并输出该年中任意一天是该年的第几周。【规定】①闰年366天,2月29天;平年365天,2月28天。②周日为某月的第一天,周六为该月的最后一天。③某年的1月1号为该年的第一天,属于该年的第一周。程序运行结果部分截图如下:【注意】…...
2024/4/17 0:32:01 - 正则表达式匹配任意字符串
(.*?) 匹配所有字符串<p class="num">9033</p>如使用<p class="(.*?)">9033</p>会得到num但是如果带换行符会失效,如果需要匹配包括换行符,则使用([\s\S]*) 再如果,在表达式中有括号或其他元字符,需要使用转义。在字符前加一…...
2024/4/19 23:40:07 - Python制作小软件——1. 安装并使用PyQt5进行界面设计
最近想学习利用Python进行GUI的设计,网上找了很多教程与方法,用的最多的是使用PyQt+Python就进行开发,同时利用PyQt做出来的界面也是相对而言较为方便且比较美观。所以自己在闲暇之余,也学习了使用PyQt5+Python进行图形界面的设计,并开发一款属于自己的小软件。第一篇博客…...
2024/4/17 0:30:49 - Nginx入门必备
1. 安装nginx安装nginx之前,linux系统需要先安装先决条件,可以参考以下文章:https://www.cnblogs.com/zrbfree/p/6419043.htmlnginx官方下载路径:http://nginx.org/download/选择合适的版本下载下来之后解压:[root@VM_92_224_centos nginx]# cd /usr/local/src [root@VM_9…...
2024/4/17 0:32:01 - reflector使用教程
一、断网二、打开软件、打开注册机三、四、五六七八九、点击file-open选择要反编译的DLL,打开后程序集的命名空间会出现在列表中; 十、点击树形列表中的类,右边就会出现相应的反编译代码。反编译后的代码和原代码基本没有什么区别;11 、如果想把反编译后的代码导入到文件中…...
2024/3/31 22:03:25
最新文章
- All In ai,Oracle 23C没了,等来了Oracle 23ai
今年一月份的Blog介绍Oracle命名规则的时候,说到Oracle的命名是紧紧跟随时代浪潮的前言科技的,在文章的最后还大胆预测也许Oracle的下一个版本就叫25A了,结果Oracle根本等不及,把原来已经海量宣传的Oracle 23C直接改名为23ai&…...
2024/5/4 8:06:35 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 09 spring-boot-acurator 定时检测 redis 集群导致 “IOException: Too many open files“
前言 问题的现象主要是如下 项目刚启动的时候 十分正常, 然后 随着时间的推移, 比如说 项目跑了 四五天之后 项目 突然出现问题, 一部分服务能够正常访问, 一部分服务抛出异常 异常信息 就是 too many files 这里的主要的问题是 在异常之前, redis 集群没有密码, 然后 …...
2024/4/30 8:18:44 - 第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 题解
VP比赛链接 : 数据加载中... - 蓝桥云课 1 . 九进制 转 十进制 直接模拟就好了 #include <iostream> using namespace std; int main() {// 请在此输入您的代码int x 22*92*81*9;cout << x << endl ;return 0; } 2 . 顺子日期 枚举出每个情况即可 : …...
2024/4/30 1:59:34 - 解决GNU Radio+USRP实现OFDM收发在接收端QPSK星座图映射无“抖动”问题
文章目录 前言一、遇到的问题二、解决方案三、重新编译安装四、验证五、资源自取 前言 本文记录在 GNU RadioUSRP 实现 OFDM 收发时,在接收端 QPSK 星座图映射无“抖动”问题的解决方法, 一、遇到的问题 我遇到的问题是,现在搭建的 OFDM 模…...
2024/5/3 13:25:32 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57