找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2475|回复: 5
打印 上一主题 下一主题
收起左侧

时钟,计算器与温度显示的综合实现

[复制链接]
跳转到指定楼层
楼主
这是学校的一次单片机实验要求,自己修改的程序,可以实现时钟,计算器与温度在1602显示,附件包含原始keil程序及proteus仿真。希望大家能够采纳。
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit DSPORT=P3^7;
  6. void Delay1ms(uint );
  7. uchar Ds18b20Init();
  8. void Ds18b20WriteByte(uchar com);
  9. uchar Ds18b20ReadByte();
  10. void  Ds18b20ChangTemp();
  11. void  Ds18b20ReadTempCom();
  12. int Ds18b20ReadTemp();
  13. #define LCD1602_DATAPINS P2
  14. sbit lcde=P1^4;
  15. sbit w=P1^5;
  16. sbit rs=P1^6;
  17. void Lcd1602_Delay1ms(uint c);   //误差 0us
  18. void LcdWriteCom(uchar com);         
  19. void LcdWriteData(uchar dat);
  20. void wendu();        
  21. void LcdInit();
  22. void LcdDisplay(int);
  23. void init_jsq();
  24. void init_sz();
  25. void write_data(uchar date);
  26. void delay(uint z);
  27. void write_com(uchar com);
  28. void write_sfm(uchar add,uchar date);


  29. sbit k1=P3^3;
  30. sbit k2=P3^4;
  31. sbit k3=P3^5;
  32. uchar num,count,k1num,miao1,miao2,ki;
  33. char miao,fen,shi;
  34. uchar code table2[]=" 2018-12-10 SAT" ;
  35. uchar code table21[]=" 00:00:00";


  36. char i,j,temp,num_1;
  37. long a,a1,a2,b,b1,b2,c,c1,c2;//a,第一个数 b第二个数  c第三个数
  38. uchar flag1,fuhao; //flag1表示是否有符号按下,fuhao表示按下哪个符号
  39. uchar code table[]={
  40.                                         1,2,3,0,
  41.                                         4,5,6,0,
  42.                                         7,8,9,0,
  43.                                         0,0,0,0,
  44.                                         };
  45. uchar code table1[]={
  46.                                          1,2,3,0x2f-0x30,
  47.                                          4,5,6,0x2a-0x30,
  48.                                          7,8,9,0x2d-0x30,
  49.                                          0x01-0x30,0,0x3d-0x30,0x2b-0x30,                                       
  50.                                         };
  51. void jisuanqi();
  52. void shizhong();
  53. sbit ky1=P3^2;
  54. sbit d1=P0^0;
  55. sbit d2=P0^1;
  56. sbit d3=P0^2;
  57. void main()
  58. {

  59.         
  60.                 i=50;
  61.                 ki=0;
  62.         while(1)
  63.         {
  64.                 if(ky1==0)
  65.                 {
  66.                         while(ky1==0);
  67.                         ki++;
  68.                 }
  69.                                 
  70.                 if(ki>5)
  71.                 {
  72.                         ki=0;
  73.                 }
  74.                
  75. ///////////温度//////////////////               
  76.                 if(ki==0)
  77.                 {
  78.                         LcdInit();
  79.                         LcdWriteCom(0x88);        //写地址 80表示初始地址
  80.                         LcdWriteData('C');
  81.                         if(ki==0)
  82.                         {
  83.                                 ki++;
  84.                         }
  85.                 }
  86.                
  87.                 if(ki==1)
  88.                         {
  89.                                 d1=0;
  90.                                 d2=1;
  91.                                 d3=1;
  92.                                 wendu();
  93.                         }
  94.                         
  95.                         
  96. ////////////计算器////////////////
  97.                 if(ki==2)
  98.                 {
  99.                         init_jsq();
  100.                         if(ki==2)
  101.                         {
  102.                                 ki++;
  103.                         }
  104.                 }        
  105.                         if(ki==3)
  106.                         {
  107.                                 d1=1;
  108.                                 d2=0;
  109.                                 d3=1;
  110.                                 jisuanqi();               
  111.                         }
  112.                         
  113. //////////时钟////////////////
  114.                 if(ki==4)
  115.                 {
  116.                         init_sz(); //初始化
  117.                         for(num=0;num<16;num++)
  118.                         {
  119.                                 write_data(table2[num]);
  120.                                 delay(5);
  121.                         }

  122.                         write_com(0x80+0x40); //开始时第二行显s
  123.                         for(num=0;num<10;num++)
  124.                         {
  125.                                 write_data(table21[num]);
  126.                                 delay(5);
  127.                         }
  128.                         if(ki==4)
  129.                         {
  130.                                 ki++;
  131.                         }
  132.                         
  133.                         write_sfm(2,shi);
  134.                         write_sfm(5,fen);
  135.                         write_sfm(8,miao);
  136.                 }
  137.                
  138.                         if(ki==5)
  139.                         {
  140.                                 d1=1;
  141.                                 d2=1;
  142.                                 d3=0;
  143.                                 shizhong();
  144.                         }

  145.         }
  146. }

  147. void wendu()
  148. {
  149.                 LcdDisplay(Ds18b20ReadTemp());
  150. }
  151. void LcdDisplay(int temp)          //lcd显示
  152. {
  153.    
  154.   unsigned char datas[] = {0, 0, 0, 0, 0}; //定义数组
  155.         float tp;  
  156.         if(temp< 0)                                //当温度值为负数
  157.           {
  158.                   LcdWriteCom(0x80);                //写地址 80表示初始地址
  159.             LcdWriteData('-');                  //显示负
  160.                 temp=temp-1;
  161.                 temp=~temp;
  162.                 tp=temp;
  163.                 temp=tp*0.0625*100+0.5;        
  164.           }
  165.          else
  166.           {                        
  167.                   LcdWriteCom(0x80);                //写地址 80表示初始地址
  168.             LcdWriteData('+');                 //显示正
  169.                 tp=temp;//因为数据处理有小数点所以将温度赋给一个浮点型变量
  170.                 temp=tp*0.0625*100+0.5;        
  171.         }
  172.         datas[0] = temp / 10000;
  173.         datas[1] = temp % 10000 / 1000;
  174.         datas[2] = temp % 1000 / 100;
  175.         datas[3] = temp % 100 / 10;
  176.         datas[4] = temp % 10;

  177.         LcdWriteCom(0x82);                  //写地址 80表示初始地址
  178.         LcdWriteData('0'+datas[0]); //百位
  179.         
  180.         LcdWriteCom(0x83);                 //写地址 80表示初始地址
  181.         LcdWriteData('0'+datas[1]); //十位

  182.         LcdWriteCom(0x84);                //写地址 80表示初始地址
  183.         LcdWriteData('0'+datas[2]); //个位

  184.         LcdWriteCom(0x85);                //写地址 80表示初始地址
  185.         LcdWriteData('.');                 //显示 ‘.’

  186.         LcdWriteCom(0x86);                 //写地址 80表示初始地址
  187.         LcdWriteData('0'+datas[3]); //显示小数点  

  188.         LcdWriteCom(0x87);                 //写地址 80表示初始地址
  189.         LcdWriteData('0'+datas[4]); //显示小数点  
  190. }
  191.         
  192. void Delay1ms(uint y)
  193. {
  194.         uint x;
  195.         for( ; y>0; y--)
  196.         {
  197.                 for(x=110; x>0; x--);
  198.         }
  199. }
  200. uchar Ds18b20Init()
复制代码

原理图: 无
仿真: 无
代码: 时钟·温度显示及计算器.7z (267.79 KB, 下载次数: 44)

IMG_20181228_125845.jpg (2.93 MB, 下载次数: 44)

IMG_20181228_125845.jpg

IMG_20181228_125803.jpg (2.5 MB, 下载次数: 33)

IMG_20181228_125803.jpg

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:375715 发表于 2019-4-28 11:55 来自手机 | 只看该作者
谢谢分享
回复

使用道具 举报

板凳
ID:663849 发表于 2019-12-20 16:48 | 只看该作者
Thanks♪(・ω・)ノ
回复

使用道具 举报

地板
ID:670923 发表于 2019-12-23 09:16 | 只看该作者
谢谢大佬
回复

使用道具 举报

5#
ID:752144 发表于 2020-6-26 16:06 | 只看该作者
非常好!很实用!
回复

使用道具 举报

6#
ID:787742 发表于 2020-6-27 11:44 | 只看该作者
感谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表