找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1339|回复: 0
收起左侧

单片机可调时钟代码 新人创作

[复制链接]
ID:608729 发表于 2022-12-30 14:24 | 显示全部楼层 |阅读模式
  1. #include <reg52.h>

  2. typedef unsigned int u16;          //对数据类型进行声明定义
  3. typedef unsigned char u8;
  4. u8 shi=12,feng=00,miao=10;
  5. u8 shi1=00,feng1=00,miao1=00;
  6. u8 a,b;
  7. u16 yangshi=8000;
  8. u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  9. u16 cnt=0,cntt=0;
  10. sbit LSA=P2^2;
  11. sbit LSB=P2^3;
  12. sbit LSC=P2^4;
  13. sbit keymode=P3^1;//调时时间
  14. sbit keyclock=P3^0;//调闹钟
  15. sbit keyup=P3^2;//时间加
  16. sbit keydown=P3^3;//时间减

  17. void delay(u16 i)
  18. {
  19.         while(i--);       
  20. }

  21. void Timer0Init()                //100微秒@11.0592MHz
  22. {
  23.        
  24.         TMOD &= 0xF0;                //设置定时器模式
  25.         TMOD |= 0x02;                //设置定时器模式
  26.         TL0 = 0xA4;                //设置定时初始值
  27.         TH0 = 0xA4;                //设置定时重载值
  28.         TF0 = 0;                //清除TF0标志
  29.         TR0 = 1;                //定时器0开始计时
  30.         EA=1;
  31.         ET0=1;
  32. }

  33. void Timer0 () interrupt 1
  34. {

  35.         TL0 = 0xA4;                //设置定时初始值
  36.         TH0 = 0xA4;                //设置定时重载值
  37.   cnt++;
  38.         if(cnt==100)
  39.         {
  40.          cnt=0;
  41.         cntt++;
  42.         }
  43.         if(cntt==100)
  44.         {
  45.            cntt=0;
  46.                  miao++;
  47.         }
  48.         if(miao==60)
  49.         {
  50.           miao=0;
  51.                 feng++;
  52.         }
  53.         if(feng==60)
  54.         {
  55.           feng=0;
  56.                 shi++;
  57.         }
  58.         if(shi==24)
  59.         {
  60.            shi=0;
  61.        
  62.         }
  63. }

  64. void display0()
  65. {
  66.          LSA=1;LSB=1;LSC=1;P0=smgduan[shi/10];delay(100);P0=0x00;
  67.          LSA=0;LSB=1;LSC=1;P0=smgduan[shi%10];delay(100);P0=0x00;
  68.    LSA=0;LSB=1;LSC=0;P0=0x40;delay(100);P0=0x00;
  69.          LSA=0;LSB=0;LSC=1;P0=smgduan[feng/10];delay(100);P0=0x00;
  70.    LSA=1;LSB=1;LSC=0;P0=smgduan[feng%10];delay(100);P0=0x00;
  71.    LSA=1;LSB=0;LSC=1;P0=0x40;delay(100);P0=0x00;
  72.          LSA=1;LSB=0;LSC=0;P0=smgduan[miao/10];delay(100);P0=0x00;
  73.          LSA=0;LSB=0;LSC=0;P0=smgduan[miao%10];delay(100);P0=0x00;
  74.          
  75.    
  76.        
  77. }
  78. void displaykeyclock()
  79. {

  80.          
  81.         if(b==1)
  82.         {
  83.          LSA=1;LSB=1;LSC=1;P0=smgduan[shi1/10];delay(100);P0=0x00;
  84.          LSA=0;LSB=1;LSC=1;P0=smgduan[shi1%10];delay(100);P0=0x00;
  85.         }
  86.        
  87.          LSA=1;LSB=0;LSC=1;P0=0x40;delay(100);P0=0x00;
  88.         if(b==2)
  89.         {
  90.    LSA=0;LSB=0;LSC=1;P0=smgduan[feng1/10];delay(100);P0=0x00;
  91.    LSA=1;LSB=1;LSC=0;P0=smgduan[feng1%10];delay(100);P0=0x00;
  92.         }
  93.         LSA=0;LSB=1;LSC=0;P0=0x40;delay(100);P0=0x00;
  94. if(b==3)
  95.         {
  96.          LSA=1;LSB=0;LSC=0;P0=smgduan[miao1/10];delay(100);P0=0x00;
  97.          LSA=0;LSB=0;LSC=0;P0=smgduan[miao1%10];delay(100);P0=0x00;
  98.         }
  99.        
  100.        
  101.         else if((a==0)&&(b==0))
  102.         {
  103.         display0();
  104.        
  105.         }
  106. }
  107. void displaykeymode()
  108. {
  109.                 if(a==1)
  110.         {
  111.          LSA=1;LSB=1;LSC=1;P0=smgduan[shi/10];delay(100);P0=0x00;
  112.          LSA=0;LSB=1;LSC=1;P0=smgduan[shi%10];delay(100);P0=0x00;
  113.         }
  114.           LSA=1;LSB=0;LSC=1;P0=0x40;delay(100);P0=0x00;
  115.                 if(a==2)
  116.         {
  117.    LSA=0;LSB=0;LSC=1;P0=smgduan[feng/10];delay(100);P0=0x00;
  118.    LSA=1;LSB=1;LSC=0;P0=smgduan[feng%10];delay(100);P0=0x00;
  119.         }
  120.         LSA=0;LSB=1;LSC=0;P0=0x40;delay(100);P0=0x00;
  121.         if(a==3)
  122.         {       
  123.          LSA=1;LSB=0;LSC=0;P0=smgduan[miao/10];delay(100);P0=0x00;
  124.          LSA=0;LSB=0;LSC=0;P0=smgduan[miao%10];delay(100);P0=0x00;
  125.         }
  126.          
  127.         else if((a==0)&&(b==0))
  128.         {
  129.         display0();
  130.        
  131.         }
  132. }

  133. void key_mode()
  134.         {
  135.     if(!keymode)
  136.                 {
  137.                    delay(1000);
  138.                    if(!keymode)
  139.                          {  b=0;
  140.                            a++;
  141.                                  if(a>3)
  142.                                  {
  143.                                  a=0;
  144.                                  }
  145.                          
  146.                          }
  147.                 while(!keymode);
  148.                  }

  149.         }
  150.        
  151.        
  152.        
  153. void key_clock()
  154. {
  155. if(!keyclock)
  156. {
  157.   delay(1000);
  158. if(!keyclock)
  159. {  a=0;
  160.           b++;
  161.          if(b>3)
  162.          {
  163.          
  164.          b=0;
  165.          }
  166. }
  167. while(!keyclock);
  168. }

  169. }

  170. void keymodeset()
  171. {
  172. if(!keyup)
  173. {
  174.          delay(1000);
  175. if(!keyup)
  176. {

  177.         if(a == 1) {shi++;} if(shi>23){shi=0;}
  178.          else if(a == 2) {feng++;} if(feng>59){feng=0;}
  179.          else if(a == 3) {miao++;} if(miao>59){miao=0;}
  180.     }
  181. while(!keyup);
  182.     }

  183. if(!keydown)
  184. {
  185. delay(1000);
  186. if(!keydown)
  187. {
  188.                  if(a == 1) {if(shi != 0) shi--; else shi = 23;}
  189.                         else if(a == 2) {if(feng != 0) feng--; else feng = 59;}
  190.                         else if(a == 3) {if(miao != 0) miao--; else miao = 59;}       
  191. }
  192.      while(!keydown);
  193. }
  194. }

  195. void keyclockset()
  196. {
  197. if(!keyup)
  198. {
  199.          delay(1000);
  200. if(!keyup)
  201. {

  202.         if(b==1) {shi1++;} if(shi1>23){shi1=0;}
  203.          else if(b==2) {feng1++;} if(feng1>59){feng1=0;}
  204.          else if(b==3) {miao1++;} if(miao1>59){miao1=0;}
  205.     }
  206. while(!keyup);
  207.     }

  208. if(!keydown)
  209. {
  210. delay(1000);
  211. if(!keydown)
  212. {
  213.                  if(b == 1) {if(shi1 != 0) shi1--; else shi1 = 23;}
  214.                         else if(b == 2) {if(feng1 != 0) feng1--; else feng1 = 59;}
  215.                         else if(b == 3) {if(miao1 != 0) miao1--; else miao1 = 59;}       
  216. }
  217.      while(!keydown);
  218. }
  219. }
  220. void keyclockscan()
  221. {
  222.         key_clock();
  223.         if(b==1)
  224.         {   
  225.          
  226.                 displaykeyclock();
  227.                 keyclockset();
  228.         }
  229.   else
  230.         if(b==2)
  231. {   
  232.          
  233.                 displaykeyclock();
  234.                 keyclockset();
  235.         }
  236. else
  237.         if(b==3)
  238. {   
  239.          
  240.                 displaykeyclock();
  241.                 keyclockset();
  242.         }



  243. }


  244. void keymodescan()
  245. {
  246.         key_mode();
  247.         if(a==1)
  248.         {   
  249.          
  250.                 displaykeymode();
  251.                 keymodeset();
  252.         }
  253.   else
  254.         if(a==2)
  255. {   
  256.          
  257.                 displaykeymode();
  258.                 keymodeset();
  259.         }
  260. else
  261.         if(a==3)
  262. {   
  263.          
  264.        
  265.          displaykeymode();
  266.                 keymodeset();
  267.                
  268.         }



  269. }
  270. void main()
  271. {

  272.   Timer0Init();
  273.   while(1)
  274.         {
  275.                
  276.                 displaykeyclock();
  277.                
  278.                 keyclockscan();
  279.                
  280.                 displaykeymode();
  281.                 keymodescan();
  282.                
  283.        

  284.         }
  285. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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