找回密码
 立即注册

QQ登录

只需一步,快速开始

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

开关123控制数码管计时且1602显示开停清零 单片机程序

[复制链接]
跳转到指定楼层
楼主
ID:616860 发表于 2019-9-26 19:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include<stdio.h>                 //sb1:run sb2:stop  sb3:clear
  2. #include<stc15f2k60s2.h>
  3. #include<intrins.h>

  4. #define LEDshu P0
  5. #define LCD_1602 P2

  6. #define  uchar unsigned char
  7. sbit cs1=P1^0;
  8. sbit cs2=P1^1;
  9. sbit wr=P1^2;

  10. sbit RS=P1^3;
  11. sbit RW=P1^4;
  12. sbit E=P1^5;
  13. sbit BF=P2^7;

  14. sbit row0=P3^0; sbit row1=P3^1; sbit row2=P3^2; sbit row3=P3^3;
  15. sbit col0=P3^4; sbit col1=P3^5; sbit col2=P3^6; sbit col3=P3^7;

  16. unsigned char k=10;
  17. unsigned char v;
  18. int q;
  19. void Delay1us();
  20. void Delay1000ms();

  21. void Write_Data(uchar dat);
  22. void Write_Command(uchar com);
  23. void Init1602();
  24. void String1602(uchar *str);
  25. void Adderss1602(uchar addr);

  26. unsigned char keyscan();

  27. unsigned char shu2();
  28. /////////////////数码管///////////////////////
  29. unsigned char shu1();
  30. unsigned char L1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  31. unsigned char L2[12]={0,1,2,3,4,5,6,7,8,9,10,11};
  32. unsigned char a;//1110 1111  0xef
  33. unsigned char b;//1111 0111  0xf7
  34.                 //1111 1011  0xfb
  35. unsigned char c;//1111 1101  0xfd
  36. unsigned char d;//1111 1110  0xfe

  37. ////////////////////////////////////////


  38. unsigned char keyscan()
  39. {

  40. col0=col1=col2=col3=row0=row2=row3=1;

  41. row0=0;
  42. if(col0==0)k=0;
  43. else if(col1==0)k=1;
  44. else if(col2==0)k=2;
  45. row0=1;

  46. return k;        
  47. }


  48. bit busy1602()
  49. {
  50. bit busy;
  51. LCD_1602=0xff;
  52. RS=0;
  53. RW=1;
  54. Delay1us();
  55. E=1;
  56. busy=BF;
  57. E=0;
  58. Delay1us();

  59. return busy;

  60. }

  61. main()
  62. {
  63. P0M0=0xff;
  64. P0M1=0X00;
  65. TL0=(65536-50000)%0x100;
  66. TH0=(65536-50000)/0x100;
  67. TMOD=0x01;     //T0方式1即16位定时
  68. EA=1;          //开总中断   
  69. ET0=1;         //开T0中断

  70. Init1602();
  71. while(1)
  72. {
  73.   RS=RW=E=1;
  74.   keyscan();
  75.    if(k==0){v=0;shu2();TR0=1;shu1();}
  76.    if(k==1){v=1;shu2();TR0=0;shu1();}
  77.    if(k==2){v=2;shu2();a=b=c=d=0;shu1();}


  78.   }

  79. }

  80. unsigned char shu2()
  81. {
  82. if(v==0){Adderss1602(0x00);String1602("------run------");}
  83. if(v==1){ Adderss1602(0x00);String1602("------stop-----");}
  84. if(v==2){ Adderss1602(0x00);String1602("-----clear-----");}

  85. }
  86. unsigned char shu1()
  87. {
  88.             cs1=0;cs2=1;
  89.       LEDshu=L1[L2[a]];
  90.       wr=1;
  91.       wr=0;

  92.       cs1=1;
  93.       cs2=0;
  94.       LEDshu=0xef;
  95.       wr=1;
  96.       wr=0;
  97.       Delay1us();

  98.       cs1=cs2=0;
  99.       LEDshu=0xff;
  100.       wr=1;
  101.       wr=0;
  102.         ///////////////////////////////////
  103.           cs1=0;cs2=1;
  104.       LEDshu=L1[L2[b]];
  105.       wr=1;
  106.       wr=0;

  107.       cs1=1;
  108.       cs2=0;
  109.       LEDshu=0xf7;
  110.       wr=1;
  111.       wr=0;
  112.       Delay1us();

  113.       cs1=cs2=0;
  114.       LEDshu=0xff;
  115.       wr=1;
  116.       wr=0;


  117.         //////////////////////////////////////////
  118.           cs1=0;cs2=1;
  119.       LEDshu=L1[L2[11]];
  120.       wr=1;
  121.       wr=0;

  122.       cs1=1;
  123.       cs2=0;
  124.       LEDshu=0xfb;
  125.       wr=1;
  126.       wr=0;
  127.       Delay1us();

  128.       cs1=cs2=0;
  129.       LEDshu=0xff;
  130.       wr=1;
  131.       wr=0;
  132.          
  133.     ///////////////////////////////////////////////
  134.           cs1=0;cs2=1;
  135.       LEDshu=L1[L2[c]];
  136.       wr=1;
  137.       wr=0;

  138.       cs1=1;
  139.       cs2=0;
  140.       LEDshu=0xfd;
  141.       wr=1;
  142.       wr=0;
  143.       Delay1us();

  144.       cs1=cs2=0;
  145.       LEDshu=0xff;
  146.       wr=1;
  147.       wr=0;
  148.                  
  149.            //////////////////////////////////////////
  150.           cs1=0;cs2=1;
  151.       LEDshu=L1[L2[d]];
  152.       wr=1;
  153.       wr=0;

  154.       cs1=1;
  155.       cs2=0;
  156.       LEDshu=0xfe;
  157.       wr=1;
  158.       wr=0;
  159.       Delay1us();

  160.       cs1=cs2=0;
  161.       LEDshu=0xff;
  162.       wr=1;
  163.       wr=0;
  164.                   
  165.            }

  166. //////////////////////////////////
  167. void Write_Data(uchar dat)
  168. {
  169. while(busy1602()==1);
  170. RS=1;RW=0;
  171. Delay1us();
  172. E=1;
  173. LCD_1602=dat;
  174. Delay1us();
  175. E=0;

  176. }


  177. void Write_Command(uchar com)
  178. {
  179. while(busy1602()==1);
  180. RS=0;RW=0;
  181. Delay1us();
  182. E=1;
  183. LCD_1602=com;
  184. Delay1us();
  185. E=0;
  186. }
  187. void Init1602()
  188. {

  189. Write_Command(0x38);
  190. Write_Command(0x0f);
  191. Write_Command(0x06);
  192. Write_Command(0x01);

  193. }

  194. void String1602(uchar *str)
  195. {

  196. while(*str != '\0')
  197. {
  198.   Write_Data(*str++);
  199. }
  200. }

  201. void Adderss1602(uchar addr)
  202. {

  203. Write_Command(addr | 0x80);

  204. }

  205. /////////////////////////////////////////
  206. void Delay1us()                //@11.0592MHz
  207. {
  208.         _nop_();
  209.         _nop_();
  210.         _nop_();
  211. }

  212. void Delay1000ms()                //@11.0592MHz
  213. {
  214.         unsigned char i, j, h;

  215.         _nop_();
  216.         _nop_();
  217.         i = 43;
  218.         j = 6;
  219.         h = 203;
  220.         do
  221.         {
  222.                 do
  223.                 {
  224.                         while (--h);
  225.                 } while (--j);
  226.         } while (--i);
  227. }

  228. time0() interrupt 1
  229. {
  230. {
  231. TL0=(65536-50000)%0x100;
  232. TH0=(65536-50000)/0x100;//50ms
  233. q++;
  234. if(q>=20)
  235. {
  236.   q=0;//1s
  237.   ////////////////////////////////

  238.             if(d<10)
  239.     {
  240.      d++;

  241.      if(d>=10&&c<6)
  242.       {
  243.        d=0;c++;
  244.            if(c>=6&&b<10)
  245.            {
  246.                 c=0;b++;
  247.                 if(b>=10&&a<6)
  248.                 {
  249.                   b=0;a++;
  250.                   if(a>=6)
  251.                   {
  252.                    a=0;
  253.                   }
  254.                    }
  255.            }
  256.           }
  257.    }

  258. ///////////////////////////////////////
  259. }

  260. }

  261. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2019-9-27 01:05 | 只看该作者
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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