ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:17.85KB ,
资源ID:25330391      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/25330391.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(初学单片机万能模板51单片机C语言程序.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

初学单片机万能模板51单片机C语言程序.docx

1、初学单片机万能模板51单片机C语言程序#include #include#define uint unsigned int#define uchar unsigned charsbit DQ = P1A7;sbit EN = P2A7;sbit RS = P2A5;sbit RW = P2A6;sbit key1 = P1A0;sbit key2 = P1A1;sbit key3 = P1A2;sbit key4 = P1A3;sbit SDA = P2A4;sbit SCLK = P2A3;sbit CE = P2A2;sbit buzzer = P2A1;uchar code a=MON

2、TUE WED THU FRI SAT SUN;char nian=13,yue=3,ri=20,shi=20,fen,miao,t1,num2,num3,date=3,A1;bit flag;int temp;float f_temp;void week(date);void Write_1302(uchar address,uchar dat) ;bit RST_DS18B20();void WBIT_DS18B20(bit data_bit);bit RBIT_DS18B20(void);voidWBYTE_DS18B20(uchar data_byte);uchar RBYTE_DS1

3、8B20(void);void START_DS18B20(void);uint READ_TEM(void);void Delay_15us(uint temp)/ 延时函数。公式:( 15*temp+15 ) usfor(temp;temp0;temp-)_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();void delay(uchar x)uchar y,z;for (y=x;y0;y-) for(z=110;z0;z-);void write_com(uchar com) /1602 写指令RS=0;RW=0; delay(1);P3=co

4、m;EN=0;delay(1);EN=1;void write_date(uchar date) /1602 写数据 RS=1;RW=0;delay(1);P3=date;EN=0; delay(1);EN=1;void init()write_com(0x38);位数据接口delay(5); write_com(0x38);delay(5);write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);write_com(0x80); delay(5);/ 初始化/ 显示模式设置 16*2 显示, 5*7 点阵, 8/ 显示开

5、显示 .显示光标,不闪烁 00001110/ 写一个字符后地址指针 +1/ 清零miao=miao/10*16+miao%10;fen=fen/10*16+fen%10; shi=shi/10*16+shi%10; ri=ri/10*16+ri%10;yue=yue/10*16+yue%10;nian=nian/10*16+nian%10;void write_sfm(uchar add,char date)/时分秒显示char shi,ge; shi=date/16; ge=date%16; write_com(0xc0+add); write_date(0x30+shi); write_d

6、ate(0x30+ge);void write_nyr(uchar add,char date) / 年月日显示char shi,ge;shi=date/16;ge=date%16;write_com(0x80+add);write_date(0x30+shi);write_date(0x30+ge);void Write_1302(uchar address,uchar dat) /1302 写数据uchar i;CE=0;SCLK=0;CE=1;for (i=0;i8;i+) / 循环 8 次 写入地址数据SCLK=0;_nop_();SDA=address&0x01; / 每次传输低字节

7、/ 每次传输低字节/ 右移一位 DSCLK=1/1302 读数据_nop_();for (i=0;i=1;SCLK=1;_nop_();CE=0;_nop_();uchar Read_1302(uchar address)uchar i,temp=0x00;CE=0;SDA=1;SCLK=0;CE=1;for (i=0;i=1;for (i=0;i=1;/ 每次传输低字节/循环 8 次 读取数据/ 每次传输低字节/ 右移一位SCLK=1;CE=0;SDA=0;return temp;void DS1302_initW()Write_1302(0x8e,0x00);Write_1302(0x80

8、,miao);Write_1302(0x82,fen);Write_1302(0x84,shi);/ 返回/ 初始化时间设置(写)/ 写保护关/秒/ 分/时Write_1302(0x88,yue);Write_1302(0x8a,date);Write_1302(0x8c,nian);Write_1302(0x8e,0x80);void DS1302_initR()miao=Read_1302(0x81);fen=Read_1302(0x83);shi=Read_1302(0x85);date=Read_1302(0x8b);ri=Read_1302(0x87);yue=Read_1302(0

9、x89);nian=Read_1302(0x8d);void display()write_com(0x80+0x07);write_date(-);write_com(0x80+0x04);write_date(-);write_com(0xc0+0x02);write_date(:);write_com(0xc0+0x05);write_date(:);/月/周/年/ 写保护开/ 初始化时间设置(读)/ 读秒数据/ 读分钟数据/ 读小时数据/ 读星期数据/ 读日数据/ 读月数据/ 读年数据/ 显示函数write_com(0x80+0x00);write_date(0x30+2);write

10、_date(0x30);DS1302_initR();write_nyr(2,nian); / 送液晶显示write_nyr(5,yue);write_nyr(8,ri);write_sfm(0,shi);write_sfm(3,fen);write_sfm(6,miao);week(date);/ 星期函数void week(date)write_com(0x80+12);if(date=1)for(num3=0;num33;num3+)write_date(anum3);delay(2);if(date=2)for(num3=4;num37;num3+)write_date(anum3);

11、delay(2);if(date=3)for(num3=8;num311;num3+)write_date(anum3); delay(2);if(date=4)for(num3=12;num315;num3+)write_date(anum3); delay(2);if(date=5)for(num3=16;num319;num3+)write_date(anum3); delay(2);if(date=6)for(num3=20;num323;num3+)write_date(anum3);复位/ 写位delay(2);if(date=7)for(num3=24;num327;num3+)

12、write_date(anum3);delay(2);bit RST_DS18B20() /DS18B20bit ret=1;DQ=0;Delay_15us(39);DQ=1;Delay_15us(4);ret=DQ;Delay_15us(27);DQ=1;return(ret);void WBIT_DS18B20(bit data_bit)DQ=0;Delay_15us(0);DQ=data_bit;/ 读位/ 写字节Delay_15us(2);DQ=1;bit RBIT_DS18B20(void)bit data_bit;DQ=0;_nop_();_nop_();_nop_();DQ=1;

13、_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();data_bit=DQ;Delay_15us(3);DQ=1;return(data_bit);void WBYTE_DS18B20(uchar data_byte)uchar i;for(i=0;i=1;uchar RBYTE_DS18B20(void) / 读字节uchar data_byte=0;uchar i,j;for(i=0;i8;i+)j=RBIT_DS18B20();j=ji;data_byte=data_byte|j;return data_byte

14、;void START_DS18B20(void)DQ=1;_nop_();_nop_();RST_DS18B20();WBYTE_DS18B20(0xcc);WBYTE_DS18B20(0x44);uint READ_TEM(void)uchar a,b,c,d;_nop_();_nop_();TR0=0;RST_DS18B20();WBYTE_DS18B20(0xcc);WBYTE_DS18B20(0xbe);temp=RBYTE_DS18B20();temp=(RBYTE_DS18B20()=2048)的检测temp=temp+1;f_temp=temp*0.0625;temp=f_te

15、mp*10+0.5; a=temp/100;b=temp%100/10; c=temp%10; write_com(0xc0+13); write_date(.);write_com(0xc0+11);write_date(0x30+a);write_com(0xc0+12);write_date(0x30+b);write_com(0xc0+14);write_date(0x30+c);write_com(0xc0+10); write_date(-);/ 温度的小数点/ 温度负值时的显示函数/ 温度的负值else正数时f_temp=temp*0.0625;temp=f_temp*10+0.

16、5; a=temp/1000; b=temp%1000/100; c=temp%100/10;d=temp%10;write_com(0xc0+13);write_date(.);write_com(0xc0+10);write_date(0x30+a);write_com(0xc0+11);write_date(0x30+b);write_com(0xc0+12);write_date(0x30+c);write_com(0xc0+14); write_date(0x30+d);return temp;void key()/ 温度的小数点/ 温度正值时的显示函数/ 键盘uchar fen1,

17、fen2,shi1,shi2,ri1,ri2,yue1,yue2,nian1,nian2,miao1,miao2;if(!key1) / 暂停选位/if(!key1) while(!key1);num2+;switch(num2)case 1: flag=flag;Write_1302(0x8e,0x00);write_com(0xc7);write_com(0x0f);break;case 2:write_com(0xc4)break;case 3:write_com(0xc1)break;case 4:write_com(0x80+0x09);break;case 5:write_com(

18、0x80+0x0c);break;case 6:write_com(0x80+0x06);break;case 7:write_com(0x80+0x03);break;write_com(0x0c);num2=0;flag=flag;write_nyr(2,nian);write_nyr(5,yue);write_nyr(8,ri);write_sfm(0,shi);write_sfm(3,fen);write_sfm(6,miao);week(date);DS1302_initW();/将设置的时间日期等写入 DS1302 中Write_1302(0x8e,0x80); /写保护开brea

19、k;if(flag=1)if(!key2) / 数字加减delay(10);if(!key2)while(!key2);switch(num2)case 1: DS1302_initW();miao1=miao/16;miao2=miao%16;miao2+;if(miao2=10)miao2=0;miao1+;if(miao1=6)miao1=0;miao2=0;miao=miao1*16+miao2;write_sfm(6,miao);write_com(0xc7);break;case 2: fen1=fen/16;fen2=fen%16;fen2+;if(fen2=10)fen2=0;

20、fen1+;if(fen1=6)fen1=0;fen2=0;write_sfm(3,fen);write_com(0xc4);break;case 3: shi1=shi/16;shi2=shi%16;shi2+;if(shi2=10)shi2=0;shi1+;if(shi1=2)&(shi2=4)shi1=0;shi2=0;shi=shi1*16+shi2;write_sfm(0,shi);write_com(0xc1)break;case 4: ri1=ri/16;ri2=ri%16;ri2+;if(ri2=10)ri2=0;ri1+;ri1=0;ri2=1;ri=ri1*16+ri2;w

21、rite_nyr(8,ri);write_com(0x80+0x09);break;case 5: date+;if(date=8)date=1;week(date);write_com(0x80+0x0c);break;case 6: yue1=yue/16;yue2=yue%16;yue2+;if(yue2=10)yue2=0;yue1+;if(yue1=1)&(yue2=3)yue1=0;yue2=1; yue=yue1*16+yue2;write_nyr(5,yue); write_com(0x80+0x06);break;case 7: nian1=nian/16; nian2=ni

22、an%16;nian2+; if(nian2=10)nian2=0;nian1+;if(nian1=8)&(nian2=0)nian1=0;nian2=0; nian=nian1*16+nian2; write_nyr(2,nian); write_com(0x80+0x03);break;case 8:Write_1302(0x8e,0x80);/ 写保护开break;if(!key3)delay(10);if(!key3)switch(num2) case 1: miao1=miao/16;miao2=miao%16;miao2-;if(miao2=-1)miao2=9;miao1-;if

23、(miao1=-1)miao1=5;miao=miao1*16+miao2;write_sfm(6,miao);write_com(0xc7) break;case 2: fen1=fen/16;fen2=fen%16;fen2-;if(fen2=-1)fen2=9;fen1-;if(fen1=-1)fen1=5;fen=fen1*16+fen2;write_sfm(3,fen);write_com(0xc4)break;case 3: shi1=shi/16;shi2=shi%16;shi2-;if(shi2=-1)shi2=9; shi1-; if(shi1=-1)shi1=2;shi2=

24、3;shi=shi1*16+shi2;write_sfm(0,shi);write_com(0xc1) break;case 4: ri1=ri/16;ri2=ri%16;ri2-;if(ri2=-1)ri2=9; ri1-;if(ri1=-1)ri1=3;ri=ri1*16+ri2;write_nyr(8,ri);write_com(0x80+0x09);break;case 5: date-;if(date=-1|date=0)date=7;week(date);write_com(0x80+0x0c);break;case 6: yue1=yue/16;yue2=yue%16;yue2-

25、;if(yue2=-1)yue2=9;yue1-;if(yue1=-1)yue1=1;yue2=2;yue=yue1*16+yue2;write_nyr(5,yue);write_com(0x80+0x06);break;case 7: nian1=nian/16;nian2=nian%16; nian2-;if(nian2=-1)nian2=9;nian1-;if(nian1=-1)nian1=7;nian2=9;nian=nian1*16+nian2; write_nyr(2,nian);write_com(0x80+0x03); break;/ 写保护开case 8: Write_1302(0x8e,0x80);break;void main()uint temp=0;init();DS1302_initW();/ 初始化时间日期DS1302_initR();while(1)display();key();START_DS18B20(); temp=READ_TEM(); delay(5);while(flag=1) key();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1