C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 1 C51 COMPILER V6.12, COMPILATION OF MODULE 4_3 OBJECT MODULE PLACED IN .\4_3.obj COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\lesson4\4_3.c DEBUG OBJECTEXTEND PRINT(.\4_3.lst) OBJECT(.\4_3.obj) stmt level source 1 /*******************************************************************/ 2 /* TX-1C单片机实验板实验例程 */ 3 /* 2007年8月第二期培训班课后习题详解 */ 4 /* 作者:郭天祥 */ 5 /* 邮箱:txmcu@163.com */ 6 /* 网站:www.txmcu.com(天祥电子) */ 7 /*【版权】Copyright(C)天祥电子 www.txmcu.com All Rights Reserved */ 8 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */ 9 /* */ 10 /*******************************************************************/ 11 /* 12 利用动态扫描和定时器1在数码管上显示 13 出从765432开始以1/10秒的速度往下递减 14 直至765398并保持显示此数,与此同时利 15 用定时器0以500MS速度进行流水灯从上至 16 下移动,当数码管上数减到停止时,实验 17 板上流水灯也停止然后全部开始闪烁,3秒 18 后(用T0定时)流水灯全部关闭、数码管上 19 显示出"HELLO"。到此保持住。 20 设晶振频率为12MHz。 21 */ 22 /*********************************************************/ 23 #include //52单片机头文件 24 #include //包含有左右循环移位子函数的库 25 #define uint unsigned int //宏定义 26 #define uchar unsigned char //宏定义 27 sbit dula=P2^6; 28 sbit wela=P2^7; 29 uchar code table[]={ //显示数据编码 30 0x3f,0x06,0x5b,0x4f, 31 0x66,0x6d,0x7d,0x07, 32 0x7f,0x6f,0x77,0x7c, 33 0x39,0x5e,0x79,0x71, 34 0x76,0x79,0x38,0x3f,0}; 35 uchar temp,t0,t1,bai,shi,ge,flag,flag1; 36 uint shu; 37 void init(); //函数声明 38 void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge); 39 void delay(uint z) //延时子函数 40 { 41 1 uint x,y; 42 1 for(x=z;x>0;x--) 43 1 for(y=110;y>0;y--); 44 1 } 45 void main() //主函数 46 { 47 1 init(); 48 1 while(1) 49 1 { 50 2 if(flag1!=1) //如果flagi不再等于1则显示数据 51 2 display(7,6,5,bai,shi,ge); 52 2 else 53 2 display(16,17,18,18,19,20); //否则显示hello 54 2 } 55 1 } C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 2 56 57 void init() //初始化函数 58 { 59 1 shu=432; 60 1 temp=0xfe; 61 1 P1=temp; 62 1 TMOD=0x11; 63 1 TH0=(65536-50000)/256; //定时器初始化 64 1 TL0=(65536-50000)%256; 65 1 TH1=(65536-50000)/256; 66 1 TL1=(65536-50000)%256; 67 1 EA=1; 68 1 ET0=1; 69 1 ET1=1; 70 1 TR0=1; 71 1 TR1=1; 72 1 } 73 74 void timer0() interrupt 1 //定时器0中断 75 { 76 1 TH0=(65536-50000)/256; 77 1 TL0=(65536-50000)%256; 78 1 t0++; 79 1 if(flag!=1) //flag不等于1时进行流水灯 80 1 { 81 2 if(t0==10) 82 2 { 83 3 t0=1; 84 3 temp=_crol_(temp,1); 85 3 P1=temp; 86 3 } 87 2 } 88 1 else //否则进行灯闪烁 89 1 { 90 2 if(t0%4==0) //小灯每200毫秒变化一次 91 2 P1=~P1; 92 2 if(t0==60) 93 2 { 94 3 TR0=0; //3秒后关闭定时器0,关闭灯,并置flag=1 95 3 P1=0xff; 96 3 flag1=1; 97 3 } 98 2 } 99 1 } 100 101 void timer1() interrupt 3 //定时器1中断函数 102 { 103 1 TH1=(65536-50000)/256; 104 1 TL1=(65536-50000)%256; 105 1 t1++; 106 1 if(t1==2) 107 1 { 108 2 t1=0; 109 2 shu--; 110 2 bai=shu/100; 111 2 shi=shu%100/10; 112 2 ge=shu%10; 113 2 if(shu==398) //当到398时把原来T0中的数清除,重新加裁初值让小灯闪烁 114 2 { 115 3 TR0=0; 116 3 TH0=(65536-50000)/256; 117 3 TL0=(65536-50000)%256; C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 3 118 3 TR0=1; 119 3 flag=1; 120 3 t0=0; 121 3 P1=0xff; 122 3 TR1=0; 123 3 } 124 2 } 125 1 } 126 127 void display(uchar aa,uchar bb,uchar cc,uchar bai,uchar shi,uchar ge) //显示子函数 128 { 129 1 dula=1; 130 1 P0=table[aa]; 131 1 dula=0; 132 1 P0=0xff; 133 1 wela=1; 134 1 P0=0xfe; 135 1 wela=0; 136 1 delay(1); 137 1 138 1 dula=1; 139 1 P0=table[bb]; 140 1 dula=0; 141 1 P0=0xff; 142 1 wela=1; 143 1 P0=0xfd; 144 1 wela=0; 145 1 delay(1); 146 1 147 1 dula=1; 148 1 P0=table[cc]; 149 1 dula=0; 150 1 P0=0xff; 151 1 wela=1; 152 1 P0=0xfb; 153 1 wela=0; 154 1 delay(1); 155 1 dula=1; 156 1 P0=table[bai]; 157 1 dula=0; 158 1 P0=0xff; 159 1 wela=1; 160 1 P0=0xf7; 161 1 wela=0; 162 1 delay(1); 163 1 164 1 dula=1; 165 1 P0=table[shi]; 166 1 dula=0; 167 1 P0=0xff; 168 1 wela=1; 169 1 P0=0xef; 170 1 wela=0; 171 1 delay(1); 172 1 173 1 dula=1; 174 1 P0=table[ge]; 175 1 dula=0; 176 1 P0=0xff; 177 1 wela=1; 178 1 P0=0xdf; 179 1 wela=0; C51 COMPILER V6.12 4_3 10/03/2007 18:18:05 PAGE 4 180 1 delay(1); 181 1 } MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 470 ---- CONSTANT SIZE = 21 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = 10 6 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)