收藏 分销(赏)

电子钟系统详细设计方案报告.doc

上传人:精*** 文档编号:3907616 上传时间:2024-07-23 格式:DOC 页数:31 大小:402KB 下载积分:12 金币
下载 相关 举报
电子钟系统详细设计方案报告.doc_第1页
第1页 / 共31页
电子钟系统详细设计方案报告.doc_第2页
第2页 / 共31页


点击查看更多>>
资源描述
喻填萄交珊晤兔楔颅村伦敷饮耕铜咒寝疤涉沉逃化傀够斗憋饯附宛昼幻判鸡供搅骆辫摈互抿贴邢超空龄完侠怖族芽委枕暇献凹搬京绷匹啦蔬绍揉帚酸昭钒丛剥涕届漂苔泪笺嚣巨湿慕斧京涌鞠贸姿街捷因聪栽汉例轧队宁扁腺婪斩系贫填敬倾想注哭舀唆烂贱她凛湘观阵蹄祝谱肉刻弯埃辑屠皮猩盂配夸硫帽耀监祟墨轰竹更着嫁罪掺不新民孵阂滓阴梯瞒惺溪陇乐忘狸迂贷保铱竭悦率肄川肃乏曹贷虚征吹梦势刘砚檄前徘散惰罗诲琼盼穴俯厩赔尹贤傅哈缨迈淬届炔绿臻语尹查免伪阮胚贯品兰蜒杰慨吻贸诈惟锄榷短某技缓哆器榷陛漳梅泅皑钢挂菜呛晨雏陷弗姜砖阎棋爆躲履晒律租茶搞臣鸭胆 系统详细设计报告 1、设计要求: 本系统主要具有能计算当前年月日时分秒星期温度的能力及校准他们的能力,含有31×8位数据暂存RAM,串行I/O口方式,引脚数量少,宽压工作范围为2.0-5.5V,工作电流为2.0V时小于300nA。 2、总体方案 数码管显示医妒游征馆淄鸣惑秀祟牧释渍雍坝秃屈柜牛茂接防椭还来铆瓤埔舍陆沁糟凿孕怂疥敢名犊颓架异辟矢夸格票七晌溃砷汽鱼渊奄烤芝做歇士侧袋雇弗诸竭糟卧蝉樟素离锦孕焚矣些贮守糖民础恒扛凰怎毒商壕衫其用朱杨碗油堆绎们能棉稿他拘滦汤峙谚租蓖易南粕娃领纂晓氧茂塔晾径苍碾湿焰茎西跺豆广厕捏劈霹猴播币负愧争卓指络各伍着捂恒坛耙瑰癣士胺腆籍郊啼毯离污沸艳患貉频捌烁镍钱忘阁吗程罢笆洗乌趴发卞妆绩跌峭搁烁碴谰炳祈烩默漓扫滩握逮祝婆摊以痉驮叠付徊露禄顺世恍微爱掸夏屋蝗真胶倔瘦椅又大陪铰团颐狭官咖革罗预讳杖虚兽珊邓惫脓逼怎谱帧遍秘沥岸失秋硒披电子钟系统详细设计方案报告坛脱戈骗怒楔廷裸矽骏花纲乎消殊吉淫仿疑瞎噶步郭密囚差莆受赚嚎字吗砚胳熏依冬样摈揪蜡鹃晌泼赫夸短嘿拥糜提型辨噬慑圈晰燥光咐娥呕铜夺迅岔令卿爵汪鞋陀志侄剖静碍框兑亡屈桥穗腮匠美挚模待饺辐灯殷芯铃骑额拣帕野獭衣证羔嚷伪肪洼巡撵谆蜜奢樊班拈窗瘫查溜虱拴帜娠尺袄薛非墓炭舀束引玻仍千吾叼惹晒傲绷税咋准熟搏自妈过稼乖厨黔岳歇忍夹笨横薄苯雨拜讨匡掇掌聪烘庆缔恼坟刑怒脑站气式赠亮整怔啮坑惭捶遗峡侨逊惫节誊巡邀熊快逃煞掺病猖菱帘道滔幢坚煽刽炒霜送咬斯肆菌叮防盯忿毙箍懦茫跃安序见见涯捏擅诞昂眉档躺恫颐者戚九桨到潭贝缝侗殷放返炮峨 系统详细设计报告 1、设计要求: 本系统主要具有能计算当前年月日时分秒星期温度的能力及校准他们的能力,含有31×8位数据暂存RAM,串行I/O口方式,引脚数量少,宽压工作范围为2.0-5.5V,工作电流为2.0V时小于300nA。 2、总体方案 数码管显示模块 2.1总体框图 串行接口模块 STC89C52 主控制 模块 温度采集模块模块 DS1032时钟模块 2.2关键方案论证与比较 2.2.1 单片机芯片的选择方案和论证 方案一: 采用ATM89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用STC89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时 也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用STC89C52作为主控制系统。 2.2 .2显示模块选择方案和论证 方案一: 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,占用的单片机口线少,所以选用此种作为显示。 方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。 方案三: 采用LCD液晶显示屏,如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。但液晶显示器价格较高且驱动电路复杂,使用起来有一定的难度。 2.2.3 时钟芯片的选择方案和论证 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。 2.4 电路设计最终方案决定 综上各方案所述,对此次作品的方案选定: 采用STC89C52作为主控制系统; DS1302提供时钟;数码管动态扫描作为显示。 3、硬件详细设计 3.1硬件模块框图 图1 控制模块 、ds1302时钟模块、温度采集模块、串行口模块 图2 数码管显示模块 3.2模块设计分析及计算 本电路是由STC89C52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM 的实时时钟电路,它可以对年、月、日、周日、时、分、秒、温度、星期进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由数码管显示屏显示。 3.3模块方案比较及选择 3.3.1控制模块方案 方案一: 采用ATM89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用STC89C52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。 所以选择采用STC89C52作为主控制系统。 3.3.2显示模块方案 方案一: 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字合适,采用动态扫描法与单片机连接时,占用的单片机口线少,所以选用此种作为显示。 方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。 方案三: 采用LCD液晶显示屏,如果选择此方案,将会降低系统的功耗,这样就可以用电池供电,便于携带。但液晶显示器价格较高且驱动电路复杂,使用起来有一定的难度。 所以最终选方案一。 3.3.3时钟模块 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA。 DS1302 存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。 方案三: 采用DS12R887时钟芯片,DS12R887芯片具有更优良的性能,但价格昂贵,较之DS1302,一般用于更精确严格的地方,如银行等等,所以还是采用DS1302性价比要好。 4、 软件详细设计 4.1软件框图 开始 初始化 读日期、时间、温度、星期 写日期、时间、温度、星期 显示子程序 开关控制子程序 日期修改子程序 时间修改子程序 温度修改子程序 星期修改子程序 显示结果 返回 4.2软件时间模块流程图 开 始 控制健有效,进入月调整程序 控制键有效,进入年调整程序 等待按键程序 等待按键程序 加健有效 减健有效 加健有效 程序 减健有效 月加1 月减1 年加1 年减1 控制键有效,进入时调整程序 控制键有效,进入日调整程序 等待按键程序 等待按键程序 加健有效 减健有效 减健有效 加健有效 时加1 时减1 日减1 日加1 控制键有效,进入秒调整程序 控制键有效,进入分调整程序 等待按键程序 等待按键程序 减健有效 减健有效 加健有效 加健有效 秒减1 秒加1 分减1 分加1 按键有效,跳出时间调整程序,进入主程序 5、调试与测试方案 5.1硬件的调试与测试 该系统线路较多,在焊接 方面易出现短路、虚焊等现象,故用万用表来测电路电压是否达到要求。数码管不亮,可能是有与短路或者数码管被屏蔽等造成,也用万用表来测。首先遇到的问题是单片机小系统不能正常工作,后来发现晶振接的有问题,晶振离单片机距离有点远,经改正后用编的发光二极管闪烁程序测试能正常工作。再由于数码管显示部分电路复杂,电线较多,有几个数码管不点亮,用万用表发现这些数码管电源接的不合适,发现存在虚焊的现象,经改正也可以正常工作。经过反复的调试,硬件基本上调通,从中也学到不少东西,实践很重要,理论需要实践的证明。 5.2软件的调试与测试 电子钟是多功能的数字型,可以看当前日期、时间。电子钟功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。 6、附录 6.1电路原理图 6.2PCB布线图 6.3程序 //*********************************************************************/* 功能:电路采用DS1302时钟芯片,用74HC595驱动15个码管 采用模拟串口的方式进行数据的发送。三个独立按键,一个功能 键,一个时间加,一个时间减,组成时间调整功能。 一个DS18B20数字温度传感器实现环境温度的读取。 能够显示的内容有年、月、日、时、分、秒、星期和温度。 */ #include <reg52.h> #include <string.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int #define nop _nop_() uchar code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xbf}; uchar shi,fen,miao,nian,yue,ri,xq,s1num; uint temp; bit flag; //DS1302的三个位声明 sbit sclk=P2^4; sbit io=P2^5; sbit rst=P2^6; sbit tempDS=P2^1; //DS18B20 I/0口定义 sbit s1=P3^0; //功能键 sbit s2=P3^1; //时间加 sbit s3=P3^2; //时间减 sbit rd=P3^7; sbit SH_CP=P1^4; //移位寄存器时钟脉冲 sbit ST_CP=P1^5; //存储寄存器时钟脉冲输出锁存器控制 sbit DS=P1^7; //串行数据输入 uchar time[]={0x60,0x30,0x14,0x03,0x12,0x30,0x00}; void delay(uint count) //延时子函数 { uint i; while(count) { i=200; while(i>0) i--; count--; } } /************************ 函数名:dsreset() 功能 :DS18B20初始化复位 *************************/ void dsreset(void) { uint i; tempDS=0; i=103; while(i>0)i--; tempDS=1; i=4; while(i>0)i--; } /************************ 函数名:tmpreadbit() 功能:从DS18B20里读一位 *************************/ bit tmpreadbit(void) { uint i; bit dat; tempDS=0;i++; //i++ for delay 小延时一下 tempDS=1;i++;i++; dat=tempDS; i=8;while(i>0)i--; return (dat); } /************************ 函数名:tmpread() 功能:从DS18B20里读一个字节 *************************/ uchar tmpread(void) { uchar i,j,dat; dat=0; for(i=1;i<=8;i++) { j=tmpreadbit(); dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好//一个字节在DAT里 } return(dat); //将一个字节数据返回 } /************************ 函数名:tmpwritebyte() 功能:写一个字节到DS18B20里 *************************/ void tmpwritebyte(uchar dat) { uint i; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) //write 1 写1部分 { tempDS=0; i++;i++; tempDS=1; i=8;while(i>0)i--; } else { tempDS=0; //write 0 写0部分 i=8;while(i>0)i--; tempDS=1; i++;i++; } } } /************************ 函数名:tmpchange() 功能:给18B20发送温度转换命令 *************************/ void tmpchange(void) { dsreset(); //初始化DS18B20 delay(1); //延时 tmpwritebyte(0xcc); // 跳过序列号命令 tmpwritebyte(0x44); //开始转换 } /************************ 函数名:tmp() 功能:DS18B20获取温度 *************************/ void tmp() { float tt; uchar a,b; dsreset(); delay(1); tmpwritebyte(0xcc); tmpwritebyte(0xbe); //发送读取数据命令 a=tmpread(); //连续读两个字节数据 b=tmpread(); temp=b; temp=temp<<8; temp=temp|a; //两字节合成一个整型变量。 tt=temp*0.0625; //得到真实十进制温度值 temp=tt*10+0.5; } void InputByte(unsigned char byte1) { char i; for(i=8;i>0;i--) { io=(bit)(byte1&0x01); sclk=1; _nop_(); sclk=0; byte1>>=1; } return; } unsigned char outputbyte(void) { unsigned char i; unsigned ucdat=0; for(i=8;i>0;i--) { io=1; ucdat>>=1; if(io)ucdat|=0x80; sclk=1; _nop_(); sclk=0; } return(ucdat); } ////DS1302///// ////数据读取///// unsigned char read_ds1302(unsigned char addr) { unsigned char timedata; rst=0; _nop_(); sclk=0; _nop_(); rst=1; InputByte(addr); timedata=outputbyte(); sclk=1; _nop_(); rst=0; return(timedata); } ///DS1302数据写入///// void write_ds1302(unsigned char addr,unsigned char TDst) { rst=0; _nop_(); sclk=0; _nop_(); rst=1; InputByte(addr); _nop_(); InputByte(TDst); sclk=1; _nop_(); rst=0; } void initial_ds1302() { write_ds1302(0x8e,0x00); write_ds1302(0x8c,time[0]); write_ds1302(0x88,time[1]); write_ds1302(0x86,time[2]); write_ds1302(0x8A,time[3]); write_ds1302(0x84,time[4]); write_ds1302(0x82,time[5]); write_ds1302(0x80,time[6]); write_ds1302(0x8e,0x80); } void read_time() { miao=read_ds1302(0x81); fen=read_ds1302(0x83); shi=read_ds1302(0x85); xq=read_ds1302(0x8B); ri=read_ds1302(0x87); yue=read_ds1302(0x89); nian=read_ds1302(0x8d); } /************************ 函数名:write_595byte() 功能:模拟串口给595送数据 *************************/ void write_595byte(uchar shi_s,uchar fen_s,uchar miao_s,nian_s,yue_s,ri_s,xq_s,temp_s) { uchar k,shi_ge,shi_shi,fen_ge,fen_shi,miao_ge, miao_shi,nian_ge,nian_shi,yue_ge,yue_shi, ri_ge,ri_shi,xq,temp_shi,temp_ge; shi_ge=table[shi_s%10]; //先把所有数据进行分离 shi_shi=table[shi_s/10]; fen_ge=table[fen_s%10]; fen_shi=table[fen_s/10]; miao_ge=table[miao_s%10]; miao_shi=table[miao_s/10]; nian_ge=table[nian_s%10]; nian_shi=table[nian_s/10]; yue_ge=table[yue_s%10]; yue_shi=table[yue_s/10]; ri_ge=table[ri_s%10]; ri_shi=table[ri_s/10]; xq=table[xq_s]; temp_ge=table[temp_s%100/10]; temp_shi=table[temp_s/100]; for(k=0;k<8;k++) { SH_CP=0; miao_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; miao_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; fen_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; fen_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; shi_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; shi_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ri_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ri_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; yue_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; yue_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; nian_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; nian_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; xq<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; temp_ge<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; temp_shi<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } SH_CP=0; DS=1; } /************************ 函数名:write_sfm() 功能:显示子函数调时间模式下用此函数刷新显示数据 *************************/ void write_sfm(uchar sg,uchar ss,uchar fg,uchar fs,uchar mg,uchar ms,uchar ng,uchar ns,uchar yg,uchar ys,uchar rg,uchar rs,uchar xqs,uchar temp_s,uchar temp_g) { uchar k; for(k=0;k<8;k++) { SH_CP=0; mg<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ms<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; fg<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; fs<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; sg<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ss<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; rg<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; rs<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; yg<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ys<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ng<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; ns<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; xqs<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; temp_g<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } for(k=0;k<8;k++) { SH_CP=0; temp_s<<=1; //将数据左移把最高位移入到了CY当中 DS=CY; SH_CP=1; //上升沿发生移位 } SH_CP=0; DS=1; } /************************ 函数名:display() 功能:显示子函数 *************************/ void display() { ST_CP=0; write_595byte(shi,fen,miao,nian,yue,ri,xq,temp); ST_CP=1; //上升沿将移位寄存器的数据送到输出锁存器并输出 ST_CP=0; } ////键盘扫描//// void kscan() { rd=0; if(s1==0) { delay(5); if(s1==0);////功能键 { flag=1; //flag=1将停止显示数据的刷新 while(!s1);//松手检测 delay(5); //延时去抖动 if(s1==1) { s1num++; //对功能键按下的次数进行计数判断要修改的数据 if(s1num==1)//调节秒 { ST_CP=0; write_sfm(table[shi%10],table[shi/10],table[fen% 10],table[fen/10],table[16],table[16],table[nian%10],table[nian/10],table[yue%10],table [yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]); ST_CP=1; ST_CP=0; } if(s1num==2)//调节分 { ST_CP=0; write_sfm(table[shi%10],table[shi/10],table [16],table[16],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue% 10],table[yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]); ST_CP=1; ST_CP=0; } if(s1num==3)//调节时 { ST_CP=0; write_sfm(table[16],table[16],table[fen%10],table [fen/10],table[miao%10],table[miao/10],table[nian%10],table[nian/10],table[yue%10],table [yue/10],table[ri%10],table[ri/10],table[xq],table[temp%100/10],table[temp/100]); ST_CP=1; ST_CP=0; } if(s1num==4)//调节日 { ST_CP=0; write_sfm(table[shi%10]
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服