⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 时钟_1602.lst

📁 基于51单片机的1602显示的时钟c语言程序及汇编程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 时钟_1602
OBJECT MODULE PLACED IN 时钟_1602.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE 时钟_1602.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h> 
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          
   5          uchar tmp[4]= {"28^C"};
   6          uchar num[12]={"0123456789 :"};//数字数数组
   7          uchar time[8]={0};
   8          uchar t1_set[4]={0};
   9          uchar adj[6]={"adjust"};
  10          uchar adj_0[6]={"  time"};
  11          uchar adj_1[6]={"  t1  "};
  12          
  13          
  14          uchar off[4]={"off "};
  15          uchar ON[4]= {"on  "};//ON[]两个字母均为大写,用小写时会出错,也不知为什么
  16          
  17          uchar hour0=12,hour1=12,minute0=0,minute1=0,second=0;//设置初始值,显示12。00
  18          uchar ten_hour,hour,ten_minute,minute;//
  19          uchar key=0,right=0,set=0;//
  20          
  21          bit key_flag=0;//
  22          bit s_flag=0;
  23          bit adj_flag=0;
  24          bit dp_flag=0;
  25          bit time_flag=0;
  26          bit out=1,out1;
  27          
  28          sbit set_key=P3^2;
  29          sbit up_key=P3^3;
  30          sbit right_key=P3^4;
  31          sbit on_off_key=P3^5;
  32          
  33          sbit p_out1=P1^0;
  34          
  35          void t0(void);//定时0中断函数声明
  36          void t1(void);//定时1中断函数声明
  37          void time_display(void);//走时显示子程序
  38          void t_adj(void);//走时调整子程序
  39          void t1_adj(void);//
  40          void t1_out(void);
  41          void key_scan(void);//键盘扫描子程序
  42          
  43          /******************************************************************
  44            1602程序部分
  45            数据总线接到p2口    用到1ms延时程序    <intrins.h>函数
  46          *******************************************************************/
  47          
  48          uchar  command[]={0x38,0x38,0x38,0x38,0x08,0x01,0x06,0x0c}; /* P2=0x01;//清屏并光标复位
  49                                                          P2=00111000;//显示模式设置,8位总线,2行,5*7
  50                                                          P2=0x0c;//开显示。光标和闪烁
  51                                                          P2=0x06;//文字不动,光标自动右移
  52                                                          P2=0x80;//写入的起始位置,第1行第1列*/
  53          
  54          sbit e=P3^7;
  55          sbit rw=P3^6;
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 2   

  56          sbit rs=P3^0;
  57          sbit busy=P2^7;
  58          
  59          
  60          //--------------------------延时程序-------------------------------
  61          void delay(uchar i)
  62          {  uchar a;
  63   1         while(i--)
  64   1            {for(a=0;a<=125;a++)
  65   2               {;}
  66   2             }
  67   1      }  
  68          //--------------------查LCD是否忙程序-----------------------
  69           void wait(void)
  70          {   do
  71   1          { P2=0xff;
  72   2            rs=0;//
  73   2                rw=1;//
  74   2                e=0;
  75   2                _nop_();
  76   2            e=1; }
  77   1          while(busy==1);
  78   1      }
  79          
  80          
  81          //-------------------数据写入函数-------------------------
  82          void dataw(uchar da)
  83          {  wait();
  84   1         rs=1;
  85   1         rw=0;
  86   1         e=1;
  87   1         P2=da;
  88   1         e=0;
  89   1      }
  90          
  91          
  92          //-------------------指令和显示地址写入子函数------------
  93          
  94          void comw(uchar da)
  95          {  wait();
  96   1         rs=0; 
  97   1         rw=0;
  98   1         e=1;
  99   1         P2=da;
 100   1         e=0;
 101   1      }
 102          
 103          
 104          //--------------------------初始化--------------------------------
 105          void init(void)
 106          {  uchar i; 
 107   1         delay(20);
 108   1          e=1; 
 109   1          for(i=0;i<8;i++)
 110   1           {comw(command[i]);
 111   2            delay(5);
 112   2           }
 113   1        
 114   1      }
 115          //--------------------------清屏-----------------------------------
 116          void clen(void)
 117          { uchar i;
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 3   

 118   1        comw(0x80);
 119   1        for(i=0;i<16;i++)
 120   1            dataw(0x02);
 121   1        comw(0xc0);
 122   1        for(i=0;i<16;i++)
 123   1            dataw(0x02);
 124   1      
 125   1      }
 126          /****************************************************************************
 127           主函数
 128          
 129          *****************************************************************************/
 130          main()
 131          { uchar i=0;
 132   1         
 133   1               TMOD=0x11; //设置工作方式,T0 50ms 中断计时,T1定时10ms中断,数码管和键盘扫描
 134   1      
 135   1           TH0=(65536-46080)/256;//     
 136   1           TL0=(65536-46080)%256;// 50ms定时
 137   1      
 138   1           TH1=(65536-10000)/256;
 139   1           TL1=(65536-10000)%256;//10ms定时
 140   1           TR1=1; //
 141   1           TR0=1; // 
 142   1           ET0=1; //
 143   1           ET1=1; //
 144   1           EA=1;  //
 145   1           init();//1602初始化
 146   1          while(1)
 147   1            {
 148   2                   if(key_flag) key_scan();//当确定有键按下了,就调用键盘扫描程序,判断那个键按下了
 149   2      
 150   2                          switch(set) //根据set的值判断该显示哪个
 151   2                        { case 0:{if(s_flag==1){s_flag=0;time_display();}} break;//走时显示
 152   3                          case 1:{if(adj_flag==1){adj_flag=0;t_adj();}}break;//走时调整显示
 153   3                                      case 2:{if(adj_flag==1){adj_flag=0;t1_adj();}}break;}//定时输出1调整显示
 154   2                                      //case 3:t2_adj();break;}//定时输出2调整显示
 155   2      
 156   2                              t1_out();//判断定时输出1时间到了没有
 157   2                              //      t2_out();//判断定时输出2时间到了没有
 158   2                              
 159   2                 }
 160   1       
 161   1       
 162   1       
 163   1         }
 164          
 165          
 166          
 167          /****************************************************************************************
 168           显示时间子程序
 169          
 170          *****************************************************************************************/
 171          
 172          void time_display(void)
 173          {  uchar i=0;
 174   1        
 175   1         time[0]=hour0/10;//
 176   1         time[1]=hour0%10;
 177   1         time[3]=minute0/10;
 178   1         time[4]=minute0%10;   
 179   1         time[6]=second/10;
C51 COMPILER V7.50   时钟_1602                                                             08/18/2007 17:24:18 PAGE 4   

 180   1         time[7]=second%10;//将时间拆分
 181   1         clen();
 182   1      ////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -