參加藍橋杯的小伙伴可以學習一下。
0.png (45.72 KB, 下載次數(shù): 50)
下載附件
2018-4-6 21:48 上傳
全部資料51hei下載地址:
課后練習及課上例程.rar
(282.49 KB, 下載次數(shù): 10)
2018-4-6 21:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
- /*
- 例程:數(shù)碼管課后習題例程
- 作者:電子設計工坊
- */
- #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提供下載:
|