信息与通信]基于单片机的数字时钟日历设计内容摘要:
/次 unsigned char i。 while( a != 0){ for(i = 0。 i 125。 i++)。 //一个。 表示空语句 ,CPU 空转。 } //i 从 0 加到 125, CPU 大概就耗时 1 毫秒 } /*void DelayF(unsigned char b){ unsigned int j,k。 for(j=b。 j=0。 j){ for(k=3000。 k=0。 k)。 } } */ /****************************************************************************/ /*****************************************************************************/ //LCD 驱动( DY12864CBL 液晶显示屏并口驱动程序) /*****************************************************************************/ void chk_busy(){//检查忙位(底层) RS=0。 RW=1。 E=1。 Lcd_Bus=0xff。 while((Lcd_Busamp。 0x80)==0x80)。 E=0。 } /*****************************************************************************/ void write_(unsigned char cmdcode){//写命令到 LCD(底层) chk_busy()。 RS=0。 13 RW=0。 E=1。 Lcd_Bus=cmdcode。 E=0。 } /*****************************************************************************/ void write_data(unsigned char Dispdata){ //写数据到 LCD(底层) chk_busy()。 RS=1。 RW=0。 E=1。 Lcd_Bus=Dispdata。 E=0。 } /*****************************************************************************/ void lcm_init(){//初始化 LCD 屏(被调用层) // wela=0。 // dula=0。 write_(0x30)。 //选择 8bit 数据流 write_(0x0c)。 //开显示 (无游标、不反白 ) write_(0x01)。 //清除显示,并且设定地址指针为 00H } /*****************************************************************************/ void lcm_w_word(unsigned char *s){//向 LCM 发送 一个字符串 ,长度 64 字符(一行)之内。 while(*s0){ write_data(*s)。 s++。 } } /*****************************************************************************/ void lcm_w_test(bit i,unsigned char word){//写指令或数据 if(i == 0){ write_(word)。 //写指令或数据( 0,指令) }else{ write_data(word)。 //写指令或数据( 1,数据) } } /*****************************************************************************/ void lcm_clr(void){//清屏函数 lcm_w_test(0,0x01)。 } /*****************************************************************************/ void lcm_clr2(void){//清屏上面 3 行(用空格填满要清显示的地方,因为液晶屏是静态显示的,所以这办法常用) 14 lcm_w_test(0,0x80)。 //第一行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) lcm_w_test(0,0x90)。 //第二行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) lcm_w_test(0,0x88)。 //第一行 lcm_w_word( )。 //标尺 (1234567812345678应该能够显示满一行 ) } /*****************************************************************************/ //DS18B20 温度传感器驱动(显示 0 至 60 度,小数点后显示一位) /*****************************************************************************/ void Delay(int num){//延时函数 while(num)。 } /*****************************************************************************/ void Init_DS18B20(void){//初始化 ds1820 unsigned char x=0。 DQ = 1。 //DQ 复位 Delay(8)。 //稍做延时 DQ = 0。 //单片机将 DQ 拉低 Delay(80)。 //精确延时 大于 480us DQ = 1。 //拉高总线 Delay(14)。 x=DQ。 //稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 Delay(20)。 } /*****************************************************************************/ unsigned char ReadOneChar(void){//读一个字节 unsigned char i=0。 unsigned char dat = 0。 for (i=8。 i0。 i){ DQ = 0。 // 给脉冲信号 dat=1。 DQ = 1。 // 给脉冲信号 if(DQ) dat|=0x80。 Delay(4)。 } return(dat)。 } /*****************************************************************************/ 15 void WriteOneChar(unsigned char dat){//写一个字节 unsigned char i=0。 for (i=8。 i0。 i){ DQ = 0。 DQ = datamp。 0x01。 Delay(5)。 DQ = 1。 dat=1。 } } /*****************************************************************************/ unsigned int ReadTemperature(void){//读取温度,温度值返回到此函数中,供调用 unsigned char a=0。 unsigned char b=0。 unsigned int t=0。 float tt=0。 Init_DS18B20()。 WriteOneChar(0xCC)。 // 跳过读序号列号的操作 WriteOneChar(0x44)。 // 启动温度转换 Init_DS18B20()。 WriteOneChar(0xCC)。 //跳过读序号列号的操作 WriteOneChar(0xBE)。 //读取温度寄存器 a=ReadOneChar()。 //读低 8 位 b=ReadOneChar()。 //读高 8 位 t=b。 t=8。 t=t|a。 tt=t*。 t= tt*10+。 //放大 10 倍输出并四舍五入 return(t)。 //t 内的温度值,返回到子函数中,要将温度传输到 temp 变量,应用 temp=ReabTemperature() } /*****************************************************************************/ //后面会出现的函数声明(当各函数的排列适当时可不用声明,加入函数声明就不用管各个子函数出现的位置先后了。 ) void lcm_w_ss(void)。 //向液晶 LCM 中写秒数据 void lcm_w_mm(void)。 //向液晶 LCM 中写分数据 void lcm_w_hh(void)。 //向液晶 LCM 中写小时数据 void lcm_w_dd(void)。 //写日数据 void lcm_w_mo(void)。 //写月数据 void lcm_w_yy(void)。 //写年数据 void lcm_w_xq(void)。 //星期处理并送入 LCM 的指定区域 unsigned char clock_in(void)。 //DS1302 逐位写入字节(底层协议) void clock_out(unsigned char dd)。 //1302 驱动程序逐位读出字节(底层协议 ? void Init_1302(void)。 //设置 1302 的初始时间( 2020 年 1 月 1 日 00 时 00 分 00 秒星期一) 16 unsigned char read_clock(unsigned char ord)。 //DS1302 读数据(底 层协议) void read_clockS(void)。 void Set_time(unsigned char sel)。 //根据选择调整的相应项目 sel 加 1 并写入 DS1302 void write_clock(unsigned char ord, unsigned char dd)。 //DS1302 写数据(底层协议) void updata (void)。 void lcm_w_nl(void)。 //显示农历子函数 void Conversion(bit c,unsigned char year,unsigned char month,unsigned char day)。 //农历年月日计算子函数 void Conver_week(bit c,unsigned char year,unsigned char month,unsigned char day)。 //星期计算子函数 void ds_w(void)。 void alam_w1(void)。 //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 void alam_w2(void)。 void lcm_w_ns2()。 void lcm_w_nf2()。 void naozhong()。 void lcm_w_naozhong()。 // void DelayF ()。 /*****************************************************************************/ //设置 1302 的初始时间(自动初始化) void Init_1302(void){//设置 1302。信息与通信]基于单片机的数字时钟日历设计
相关推荐
1、最新农副产品和食品加工技术水产品加工新技术介绍(一)一、微波 微波是一种电磁波,其工业加热频率有 915 兆赫和 2450 兆赫两种。 原理:在外界高频交变场中,水等极性分子不断扭转、摩擦产生热。 其特点为速度快、加热均匀、节能高效、清洁卫生、加热选择性强,用途主要有调温解冻、加热烹制、杀菌消毒。 二、臭氧 臭氧是氧的同素异形体,常温下是一种淡紫色气体,有轻微臭味,故称臭氧。 原理
最新农副产品和食品加工技术水产品加工新技术介绍(二)六、挤压 物料经预处理和机械作用后强使通过一模具口,形成一呈形状和组织状态的产品。 原理:挤压加热过程中物料发生化学变化,重新组织化,在出口处水分子瞬时汽化,从而膨化。 特点:工艺简单,生产连续,粗粮细作,口味好,不易回生,易于保藏。 设备:单双螺杆挤压机(大连水院 948)。 用途:低值鱼的加工,组织化。 七、膜分离技术 超滤:利用压力(1
限制。 第 8 页 共 65 页 光纤测试 根据我们检测工作的实际需要,我们主要从传输模式上来进行测试。 根据我们验收所用的测试设备,我司采用 FLUKE 测试仪与光纤模块进行测试,分析测试数据,了解光纤的状态。 在现场进行的光纤链路测试 ,我们 使用 “衰减值 ”或者 “损耗 ”来判断被测链路的 光纤 质量,多数情况下这是非常有效的方法。 在 ISO 1180 TIA 568B 和 GB
( 1) 客观原则 :我们应该把历史事件放在特定的历史环境中评价; ( 2) 全面的原则 :应该从正反两方面分析历史事件,但要把握主次; ( 3) 史论结合的原则 :评价时要有史有论,史实要有典型,有说服力,结论要客观、准确。 积极意义 : 局限性: 性质 : 对美国 : 对世界 : 试一下吧 未真正解决人权问题
下特点: ( 1) 输出电流可达 150mA。 ( 2) 输出电压。 ( 3) 输出精度可达 177。 4%。 ( 4) 简单的外围电路。 ( 5) 静电防护 ESD可达 图 25 78l05 封装图 图 26 78L05引脚图 TCRT5000 简介 光电传感器 TCRT5000, 是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器是一个高灵敏度,硅平面光电三极管。