参加蓝桥杯的小伙伴可以学习一下。
全部资料51hei下载地址:
课后练习及课上例程.rar
(282.49 KB, 下载次数: 10)
单片机源程序如下:
- /*
- 例程:数码管课后习题例程
- 作者:电子设计工坊
- */
- #include "reg51.h"
- #include "intrins.h"
- typedef unsigned char BYTE;
- typedef unsigned int WORD;
- unsigned char distance_table[3];
- //-----------------------------------------------
- /* define constants */
- #define FOSC 11059200L
- #define T1MS (65536-FOSC/12/1000) //1ms timer calculation method in 12T mode
- /* define SFR */
- sbit TEST_LED = P1^0; //work LED, flash once per second
- /* define variables */
- WORD count; //1000 times counter
- WORD sonic_count;
- bit sonic_flag;
- //-----------------------------------------------
- unsigned char code T_display[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
- unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- /* Timer0 interrupt routine */
- void tm0_isr() interrupt 1 using 1
- {
- static char i;
- TL0 = T1MS; //reload timer0 low byte
- TH0 = T1MS >> 8; //reload timer0 high byte
- if (sonic_count-- ==0)
- {
- sonic_count=200;
- sonic_flag=1;
- }
- if (count-- == 0) //1ms * 1000 -> 1s
- {
- count = 1; //reset counter
- P2=0xe0;P0=~distance_table[i];P2=0;
- P2=0xc0;P0=T_COM[i];P2=0;
- i++;
- if(i==3) i=0;
- }
- }
- //-----------------------------------------------
- sbit TX = P1^0;
- sbit RX = P1^1;
- #define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();}
- void send_wave(void)
- {
- unsigned char i = 8; //??8???
-
- do
- {
- TX = 1;
- somenop;somenop;somenop;somenop;somenop;
- TX = 0;
- somenop;somenop;somenop;somenop;somenop;
- }
- while(i--);
- }
- void Delay2ms() //@11.0592MHz
- {
- unsigned char i, j;
- _nop_();
- i = 4;
- j = 146;
- do
- {
- while (--j);
- } while (--i);
- }
- /* main program */
- void main()
- {
- unsigned int t,distance;
-
- TMOD = 0x01; //set timer0 as mode1 (16-bit)
- TL0 = T1MS; //initial timer0 low byte
- TH0 = T1MS >> 8; //initial timer0 high byte
- TR0 = 1; //timer0 start running
- ET0 = 1; //enable timer0 interrupt
- EA = 1; //open global interrupt switch
- count = 0; //initial counter
- while(1)
- {
- if(sonic_flag)
- {
- sonic_flag=0;
- send_wave();
- TR1 = 1;
- while((RX == 1) && (TF1 == 0));
- TR1 = 0;
- if(TF1 == 1)
- {
- TF1 = 0;
- distance = 999;
- }
- else
- {
- t = TH1;
- t <<= 8;
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
|