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

📄 dzb.lst

📁 这是我看了《十天学会单片机》(郭天祥的教程)第十课时写的
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.12  DZB                                                                    01/13/2009 19:14:52 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DZB
OBJECT MODULE PLACED IN .\dzb.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\dzb.c DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2          这是我看了《十天学会单片机》(郭天祥的教程)第十课时写的,综合了矩阵键盘,串口通信,数码管
   3          动态显示,定时器中断的简单时钟程序。用51电子网买的298元80C51单片机学习板
   4          (http://www.51dz.com/n.asp?id=12519&i=xie343706382)测试时请将p1口用排线连到CZ2上,控制8位
   5          数码管用。P0口用来检测矩阵键盘的,P3.0和P3.1是串口通信用,控制74H164N芯片段选8位数码管。
   6          数码管显示内容为时分秒个两位,按下K16为设置按钮,按一下调节秒数,再按一下调节分钟,再按一
   7          下调节小时。再按下退出,走时。调节时按K1至K10分别代表0到9。
   8          我的QQ343706382,希望有喜欢单片机的朋友。和我联系。
   9          
  10          
  11          */
  12          
  13          #include <reg51.h>
  14          #include <intrins.h>
  15          #define uchar unsigned char//宏定义字符型
  16          #define uint unsigned int//宏定义长整型
  17          uchar temp,num,keyzhi;//定义两个变量
  18          							//keyzhi,是键盘返回值用来判断按下什么键子了temp和num也是键盘扫描用的临时变量
  19          uchar code table[]={//定义字串数组数码管显示用分别是 0123456789.和全灭,这个数码管是共阳极的
  20          0x12,0xfa,0x1c,0x98,
  21          0xf0,0x91,0x11,0xda,
  22          0x10,0x90,0xef,0xff};
  23          
  24          uchar code table2[]={//字串数组 数码管段位用,通74HC164N芯片控制8个数码管,的段显示
  25          0x80,0x40,0x20,0x10,
  26          0x08,0x04,0x02,0x01};
  27          
  28          
  29          uint count,gnj,wz;//count,用来计算时间,count++18次是一秒。
  30          							 //gnj,功能键值gnj值为1,设置秒数,为2,设置分钟,为3设置小时。
  31          						
  32          char miao,shi,fen;//分别代表秒,时,分。
  33          							
  34          						//变量定义结束
  35          
  36          
  37          void delay()//延时函数,很短的延时
  38          { ;; }
  39          
  40          void delay1(uint x)//延时函数
  41          {
  42   1      	uint a,b;
  43   1      	for(a=x;a>0;a--)for(b=110;b>0;b--);
  44   1      }
  45          
  46          void xianshi(uchar s,uchar f,uchar m)//显示函数,显示格式为,小时,分钟,秒
  47          {
  48   1      	uint ssw,sgw,fsw,fgw,msw,mgw;//分别代表小时,分钟,秒钟的十位和个位
  49   1      	if(m>59)//如果秒数大于59,就显示光标 点闪烁
  50   1      	{
  51   2      		if(wz==1)
  52   2      		{
  53   3            	msw=10;
  54   3       	   	mgw=miao%10;
  55   3      		}
C51 COMPILER V6.12  DZB                                                                    01/13/2009 19:14:52 PAGE 2   

  56   2      		else
  57   2      		{
  58   3      		 	msw=miao/10;
  59   3      		 	mgw=10;
  60   3            } 
  61   2      	}
  62   1      	else
  63   1      	{
  64   2      		msw=m/10;
  65   2      		mgw=m%10;
  66   2      	}
  67   1      	
  68   1      	if(f>59)
  69   1      	{
  70   2      		if(wz==1)
  71   2      		{
  72   3            	fsw=10;
  73   3       	   	fgw=fen%10;
  74   3      		}
  75   2      		else
  76   2      		{
  77   3      		 	fsw=fen/10;
  78   3      		 	fgw=10;
  79   3      		}
  80   2      	}
  81   1      	else
  82   1      	{
  83   2      		fsw=f/10;
  84   2      		fgw=f%10;
  85   2      	}
  86   1      	
  87   1      	if(s>24)
  88   1      	{
  89   2      		if(wz==1)
  90   2      		{
  91   3            	ssw=10;
  92   3       	   	sgw=shi%10;
  93   3      		}
  94   2      		else
  95   2      		{
  96   3      		 	ssw=shi/10;
  97   3      		 	sgw=10;
  98   3      		}
  99   2      	}
 100   1      	else
 101   1      	{
 102   2      		ssw=s/10;
 103   2      		sgw=s%10;
 104   2      	}
 105   1      	REN=1;//打开74H164N芯片写入口
 106   1      	SBUF=table2[0];//发送数据,数码管第一位亮
 107   1      	delay();
 108   1      	P1=table[ssw];//显示小时的十位
 109   1      	delay1(3);
 110   1      	P1=0xff;      //消除数码管光影。
 111   1      	SBUF=table2[1];
 112   1      	delay();
 113   1      	P1=table[sgw];//小时的个位
 114   1      	delay1(3);
 115   1      	P1=0xff;
 116   1      	
 117   1      	SBUF=table2[2];
C51 COMPILER V6.12  DZB                                                                    01/13/2009 19:14:52 PAGE 3   

 118   1      	delay();
 119   1      	P1=table[fsw];
 120   1      	delay1(3);
 121   1      	P1=0xff;
 122   1      	SBUF=table2[3];
 123   1      	delay();
 124   1      	P1=table[fgw];
 125   1      	delay1(3);
 126   1      	P1=0xff;
 127   1      	
 128   1      	SBUF=table2[4];
 129   1      	delay();
 130   1      	P1=table[msw];
 131   1      	delay1(3);
 132   1      	P1=0xff;
 133   1      	SBUF=table2[5];
 134   1      	delay();
 135   1      	P1=table[mgw];
 136   1      	delay1(3);
 137   1      	P1=0xff;
 138   1      	
 139   1      /*	SBUF=table2[6];//调试时用的,
 140   1      	delay();
 141   1      	P1=table[gnj];//显示功能键的值
 142   1      	delay1(3);
 143   1      	P1=0xff;
 144   1      	SBUF=table2[7];
 145   1      	delay();
 146   1      	P1=table[keyzhi];//显示按键的值
 147   1      	delay1(3);
 148   1      	P1=0xff;
 149   1      */	
 150   1      	REN=0;
 151   1      }
 152          
 153          
 154          
 155          
 156          
 157          
 158          uchar keyscan() //键盘扫描程序 利用P0口的4×4的矩阵键盘。
 159          {
 160   1      	P0=0xfe;
 161   1      	temp=P0;
 162   1      	num=0;
 163   1      	if (temp!=0xfe)
 164   1      	{
 165   2      		delay1(5);
 166   2      		temp=P0;
 167   2      		if (temp!=0xfe)
 168   2      		{
 169   3      		     switch(temp)
 170   3      						{
 171   4      							case 0xee:num=16;
 172   4      								break;
 173   4      							case 0xde:num=12;
 174   4      								break;
 175   4      							case 0xbe:num=8;
 176   4      								break;
 177   4      							case 0x7e:num=4;
 178   4      								break;
 179   4      						}
C51 COMPILER V6.12  DZB                                                                    01/13/2009 19:14:52 PAGE 4   

 180   3      
 181   3      						
 182   3      		}
 183   2      		while(temp!=0xfe){temp=P0;}
 184   2      
 185   2      	}
 186   1      
 187   1      	if (num==16)//判断是否要调整时间
 188   1      	{
 189   2      		gnj++;
 190   2      		if(gnj==4)gnj=0;
 191   2      		num=0;
 192   2      		TR0=0;//关定时器
 193   2      	}
 194   1      	P0=0xfd;
 195   1      	temp=P0;
 196   1      	if (temp!=0xfd)
 197   1      	{
 198   2      		delay1(5);
 199   2      		temp=P0;
 200   2      		if (temp!=0xfd)
 201   2      		{
 202   3      		     switch(temp)
 203   3      						{
 204   4      							case 0xed:num=15;
 205   4      								break;
 206   4      							case 0xdd:num=11;
 207   4      								break;
 208   4      							case 0xbd:num=7;
 209   4      								break;
 210   4      							case 0x7d:num=3;
 211   4      								break;
 212   4      						}
 213   3      		}
 214   2      		while(temp!=0xfd){temp=P0;}
 215   2      
 216   2      	}	
 217   1      
 218   1      	P0=0xfb;
 219   1      	temp=P0;
 220   1      	if (temp!=0xfb)
 221   1      	{
 222   2      		delay1(5);
 223   2      		temp=P0;
 224   2      		if (temp!=0xfb)
 225   2      		{
 226   3      		     switch(temp)
 227   3      						{
 228   4      							case 0xeb:num=14;
 229   4      								break;
 230   4      							case 0xdb:num=10;
 231   4      								break;
 232   4      							case 0xbb:num=6;
 233   4      								break;
 234   4      							case 0x7b:num=2;
 235   4      								break;
 236   4      						}
 237   3      		}

⌨️ 快捷键说明

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