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

📄 finalclock.lst

📁 多功能时钟
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  FINALCLOCK                                                             08/29/2010 19:31:23 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE FINALCLOCK
OBJECT MODULE PLACED IN .\finalclock.OBJ
COMPILER INVOKED BY: D:\KEIL V6.12\C51\BIN\C51.EXE .\finalclock.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /***********************************************************************************
   2          学校:东北石油大学
   3          院系:电子科学学院
   4          专业:电子科学与技术
   5          班级:电子07-2班
   6          学号:070901240227
   7          姓名:杨涛
   8          *************************************************************************************/
   9          #include <reg52.h>                         //52 单品机头文件
  10          #include <intrins.h>
  11          #define uchar unsigned char                 //宏定义
  12          #define uint unsigned int
  13          void delay(uint z);
  14          sbit key1=P3^4;                             //设置按键
  15          sbit key2=P3^5;
  16          sbit key3=P3^0;
  17          sbit key4=P3^1;
  18          sbit key5=P3^2;
  19          sbit key6=P3^3;
  20          sbit BEEP=P2^1;
  21          sbit led=P2^7;
  22          sbit DQ = P2^0;				
  23          void beepopen(uchar times);                     //声明函数
  24          void onit();
  25          void clockset();
  26          void display(h,m,s);
  27          void alarmset();
  28          void distribute();
  29          void zd_clock();
  30          void clock();
  31          void delay1(unsigned char t);
  32          void song();
  33          void alarmbeep();
  34          unsigned char Init_DS18B20(void);
  35          unsigned int ReadTemperature(void);
  36          uchar code disp_code[] =
  37          {
  38            0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90,
  39            // 0-9      0 1 2 3 4 5 6 7 8 9
  40            0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e, 
  41            // 10-15    a b c d e f
  42            0x7F, 0xBF, 0x9C, 0xFF
  43            // 16-19    . - 。null
  44          };    //数码管显示值列表
  45          uchar code disp_code1[]=
  46          {
  47          	0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10  //带点的0-9
  48          };
  49          uint num,temp,alarm,l,j,temp1,ttemp;
  50          uchar ch,cm,cs,xs,h1,h2,m1,m2,s1,s2,tf,hh,mm,ss,h,m,s,ah,am,as,timer0h, timer0l,k,time,shift,flag,temp0,z;
  51          void proc_18b20(uint t)
  52          {
  53   1          uint t_temp1, t_temp2,t_temp3,t_temp4;
  54   1      	t_temp1 = (int)(t / 100);
  55   1          t_temp2 = (int)(t % 100);
C51 COMPILER V6.12  FINALCLOCK                                                             08/29/2010 19:31:23 PAGE 2   

  56   1      	t_temp3=(int)(t_temp2%10);
  57   1      	t_temp4=(int)(t_temp2/10);
  58   1      	P1=0xfe;
  59   1      	P0=0xf6;
  60   1      	delay(2);
  61   1      	P1=0xfd;
  62   1      	P0=disp_code[12];
  63   1      	delay(2);
  64   1      	P1=0xfb;
  65   1      	P0=disp_code[18];
  66   1      	delay(2);
  67   1      	P1=0xf7;
  68   1      	P0=disp_code[0];
  69   1      	delay(2);
  70   1      	P1=0xef;
  71   1      	P0=disp_code[t_temp3];
  72   1      	delay(2);
  73   1      	P1=0xdf;
  74   1      	P0=disp_code1[t_temp4];
  75   1      	delay(2);
  76   1      	P1=0xbf;
  77   1      	P0=disp_code[t_temp1];
  78   1      	delay(2);
  79   1      	P1=0x7f;
  80   1      	P0=0xf6;
  81   1      	delay(2);
  82   1      }
  83          void main()
  84          {
  85   1      	onit(); 
  86   1      	while(1)
  87   1      	{
  88   2      		zd_clock();
  89   2      		if(key5==0&&key6!=0&&key1!=0&&key2!=0)
  90   2      		{
  91   3      		    	Init_DS18B20();
  92   3      				ttemp = ReadTemperature();
  93   3      				if(ttemp>30)
  94   3      				beepopen(1);
  95   3      				ttemp = (unsigned int)(ttemp * 10 + 0.5); //放大10倍输出并四舍五入
  96   3      				proc_18b20(ttemp);
  97   3      		}
  98   2      			else
  99   2      			{
 100   3      			if(key6==0)               //当k2按下时  设置闹钟时间
 101   3      			alarmset();
 102   3      			else
 103   3      			{
 104   4      				if(key1==0||key2==0)          //当k4或k3按下时 进行时钟设置
 105   4      				clockset();             //调用时钟设置程序
 106   4      				else
 107   4      				{
 108   5      					clock();             //调用时钟程序
 109   5      						if(ah==h&&am==m&&as==s)
 110   5      						{		
 111   6      						 		ET1= 1;            //打开定时器1中断
 112   6      								alarmbeep();
 113   6      						}
 114   5      				}
 115   4      			}
 116   3      		
 117   3      		}	
C51 COMPILER V6.12  FINALCLOCK                                                             08/29/2010 19:31:23 PAGE 3   

 118   2      	}
 119   1      }
 120          void timer0() interrupt 1        //定时器0的中断处理程序
 121          {
 122   1      	TH0=(65536-9216)/256;    // 每10ms产生一次中断   因为晶振频率为11.0592MHz,所以定时器装入初值应为,65536-
             -10000/12*11.0592
 123   1      	TL0=(65536-9216)%256;
 124   1      	num++;                     //定时器0每产生一次中断 num++
 125   1      }
 126          
 127          
 128          void delay(uint z)       //延时子函数
 129          {
 130   1      	uint x,y;
 131   1      	for(x=z;x>0;x--)
 132   1      		for(y=110;y>0;y--);
 133   1      }
 134          
 135          void beepopen(uchar times)               //整点报时的驱动蜂鸣器的程序
 136          {
 137   1          uint   m = 0;
 138   1          uchar  n = 0;
 139   1          while(times--)
 140   1          {
 141   2              
 142   2              for(m=0; m<5000; m++)       
 143   2              {
 144   3                  for(n=0; n<50; n++);      
 145   3                  BEEP = ~BEEP;
 146   3              }
 147   2          BEEP = 1;
 148   2      	delay(200);
 149   2      	}
 150   1      }
 151          void onit()
 152          {
 153   1      	num=0;
 154   1      	TMOD=0x01;
 155   1      	TH0=(65536-9216)/256;         //赋初值给定时器0,表明每9126个机器周期发生一次定时器中断
 156   1      	TL0=(65536-9216)%256;
 157   1      	EA=1;
 158   1      	ET0=1;
 159   1      	TR0=1;
 160   1      	ah=5;                        //闹钟的初值为06:00:00
 161   1      	am=30;
 162   1      	as=0;
 163   1      	h=5;
 164   1      	m=01;
 165   1      	s=0;
 166   1      }
 167          void clockset()					//时钟设置程序
 168          {
 169   1      	TR0=0;
 170   1      	ch=h;
 171   1      	cm=m;
 172   1      	if(key1==0)
 173   1      	{	
 174   2      		P3=0xbf;
 175   2      		if(key3==0)
 176   2      		{
 177   3      			while(!key3);
 178   3      			cs++;
C51 COMPILER V6.12  FINALCLOCK                                                             08/29/2010 19:31:23 PAGE 4   

 179   3      			if(cs==60)
 180   3      			cs=0;
 181   3      			num=cs*100;
 182   3      		}
 183   2      		if(key4==0)
 184   2      		{
 185   3      			while(!key4);
 186   3      			cm++;
 187   3      			if(cm==60)
 188   3      			cm=0;
 189   3      		}
 190   2      		if(key5==0)
 191   2      		{
 192   3      			while(!key5);
 193   3      			ch++;
 194   3      			if(h==24)
 195   3      			ch=0;
 196   3      		}
 197   2      	}
 198   1      	if(key2==0)
 199   1      	{
 200   2      		P3=0x7f;
 201   2      		if(key3==0)
 202   2      		{
 203   3      			while(!key3);
 204   3      			cs--;
 205   3      			if(cs==-1)
 206   3      			cs=59;
 207   3      			num=cs*100;
 208   3      		}
 209   2      		if(key4==0)
 210   2      		{
 211   3      			while(!key4);
 212   3      			cm--;
 213   3      			if(cm==-1)
 214   3      			cm=59;
 215   3      		}
 216   2      		if(key5==0)
 217   2      		{
 218   3      			while(!key5);
 219   3      			ch--;
 220   3      			if(ch==-1)
 221   3      			ch=23;
 222   3      		}
 223   2      	}
 224   1      	display(ch,cm,cs);
 225   1      	h=ch;
 226   1      	m=cm;
 227   1      }
 228          void display(h,m,s)                 //显示程序
 229          {	
 230   1      	h1=h%10;
 231   1      	h2=h/10;
 232   1      	m1=m%10;
 233   1      	m2=m/10;
 234   1      	s1=s%10;
 235   1      	s2=s/10;
 236   1      	P1=0xfe;
 237   1      	P0=disp_code[s1];
 238   1      	delay(2);
 239   1      	P1=0xfd;
 240   1      	P0=disp_code[s2];
C51 COMPILER V6.12  FINALCLOCK                                                             08/29/2010 19:31:23 PAGE 5   

 241   1      	delay(2);
 242   1      	P1=0xfb;
 243   1      	P0=disp_code[17];
 244   1      	delay(2);
 245   1      	P1=0xf7;
 246   1      	P0=disp_code[m1];
 247   1      	delay(2);
 248   1      	P1=0xef;
 249   1      	P0=disp_code[m2];
 250   1      	delay(2);
 251   1      	P1=0xdf;
 252   1      	P0=disp_code[17];
 253   1      	delay(2);
 254   1      	P1=0xbf;
 255   1      	P0=disp_code[h1];

⌨️ 快捷键说明

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