2.png (322 KB, 下載次數: 0)
下載附件
2025-4-15 21:21 上傳
用的是STC89C52RC,功能都沒有反應
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #include <intrins.h>
- #include "eeprom52.h"
- uchar code smg_du[]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,0x20,0xa0,0x64,0x38,0xfd,
- 0x60,0x25,0x39,0x26,0x31,0x71,0xff};
- uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
- sbit smg_we1 = P3^4;
- sbit smg_we2 = P3^5;
- sbit smg_we3 = P3^6;
- sbit smg_we4 = P3^7;
- sbit c_send = P3^2;
- sbit c_recive = P3^3;
- sbit beep = P2^3;
- uchar smg_i = 3;
- bit flag_300ms;
- long distance;
- uint set_upper = 400;
- uint set_lower = 1;
- uchar flag_csb_juli;
- uint flag_time0;
- uchar menu_1;
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<120;j++);
- }
- void smg_display() {
- if(menu_1 == 0) {
- dis_smg[0] = smg_du[distance % 10];
- dis_smg[1] = smg_du[distance / 10 % 10];
- dis_smg[2] = smg_du[distance / 100 % 10] & 0xdf;
- }
- else if(menu_1 == 1) {
- dis_smg[0] = smg_du[set_upper % 10];
- dis_smg[1] = smg_du[set_upper / 10 % 10];
- dis_smg[2] = smg_du[set_upper / 100 % 10] & 0xdf;
- dis_smg[3] = smg_du[10];
- }
- else if(menu_1 == 2) {
- dis_smg[0] = smg_du[set_lower % 10];
- dis_smg[1] = smg_du[set_lower / 10 % 10];
- dis_smg[2] = smg_du[set_lower / 100 % 10] & 0xdf;
- dis_smg[3] = smg_du[11];
- }
- }
- void write_eeprom() {
- SectorErase(0x2000);
- byte_write(0x2000, set_upper % 256);
- byte_write(0x2001, set_upper / 256);
- byte_write(0x2002, set_lower % 256);
- byte_write(0x2003, set_lower / 256);
- byte_write(0x2058, a_a);
- }
- void read_eeprom() {
- set_upper = byte_read(0x2001);
- set_upper <<= 8;
- set_upper |= byte_read(0x2000);
- set_lower = byte_read(0x2003);
- set_lower <<= 8;
- set_lower |= byte_read(0x2002);
- a_a = byte_read(0x2058);
- }
- void init_eeprom() {
- read_eeprom();
- if(a_a != 1) { //首次初始化
- set_upper = 300;
- set_lower = 30;
- a_a = 1;
- write_eeprom();
- }
- }
- sbit KEY_SET = P2^0;
- sbit KEY_ADD = P2^1;
- sbit KEY_SUB = P2^2;
- void key() {
- static uchar key_new;
- key_can = 20;
- if(KEY_SET == 0 || KEY_ADD == 0 || KEY_SUB == 0) {
- delay_1ms(1);
- if((KEY_SET == 0 || KEY_ADD == 0 || KEY_SUB == 0) && (key_new == 1)) {
- key_new = 0;
- if(KEY_SET == 0) key_can = 1;
- else if(KEY_ADD == 0) key_can = 2;
- else if(KEY_SUB == 0) key_can = 3;
- }
- } else {
- key_new = 1;
- }
- }
- void key_with() {
- if(key_can == 1) {
- menu_1++;
- if(menu_1 > 2) {
- menu_1 = 0;
- smg_i = 3;
- } else if(menu_1 == 1) {
- smg_i = 4;
- } else if(menu_1 == 2) {
- smg_i = 4;
- }
- }
- if(menu_1 == 1) {
- if(key_can == 2) {
- set_upper = (set_upper >= 400) ? 400 : set_upper + 1;
- } else if(key_can == 3) {
- set_upper = (set_upper <= 1) ? 1 : set_upper - 1;
- }
- write_eeprom();
- } else if(menu_1 == 2) {
- if(key_can == 2) {
- set_lower = (set_lower >= 400) ? 400 : set_lower + 1;
- } else if(key_can == 3) {
- set_lower = (set_lower <= 1) ? 1 : set_lower - 1;
- }
- dis_smg[0] = smg_du[set_d % 10];
- dis_smg[1] = smg_du[set_d / 10 % 10] ;
- dis_smg[2] = smg_du[set_d / 100 % 10] & 0xdf ;
- dis_smg[3] = 0x60; //a
- write_eeprom();
- }
- }
- void clock_h_l() {
- static uchar value;
- if(distance >= set_upper || distance <= set_lower) {
- value++;
- if(value >= 2) {
- beep = ~beep;
- }
- } else {
- value = 0;
- beep = 1;
- }
- }
- void smg_we_switch(uchar i)
- {
- switch(i)
- {
- case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
- case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
- case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
- case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
- }
- }
- void display()
- {
- static uchar i;
- i++;
- if(i >= smg_i)
- i = 0;
- smg_we_switch(i);
- P1 = dis_smg[i];
- }
- void delay()
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- void send_wave()
- {
- c_send = 1;
- delay();
- c_send = 0;
- TH0 = 0;
- TL0 = 0;
- TR0 = 0;
- while(!c_recive);
- TR0=1;
- while(c_recive)
- {
- flag_time0 = TH0 * 256 + TL0;
- if((flag_time0 > 40000))
- {
- TR0 = 0;
- flag_csb_juli = 2;
- distance = 888;
- break ;
- }
- else
- {
- flag_csb_juli = 1;
- }
- }
- if(flag_csb_juli == 1)
- {
- TR0=0;
- distance =flag_time0;
- distance *= 0.017;
- if((distance > 500))
- {
- distance = 888;
- }
- }
- }
- void time_init()
- {
- EA = 1;
- TMOD = 0X11;
- ET0 = 0;
- TR0 = 1;
- ET1 = 1;
- TR1 = 1;
- }
- void main() {
- beep = 0;
- delay_1ms(150);
- P0 = P1 = P2 = P3 = 0xff;
- time_init();
- init_eeprom();
- while(1) {
- if(flag_300ms) {
- flag_300ms = 0;
- clock_h_l();
- if(beep == 1) send_wave();
- if(menu_1 == 0) smg_display();
- }
- key();
- if(key_can < 10) key_with();
- }
- }
- void time1_int() interrupt 3
- {
- static uchar value;
- TH1 = 0xf8;
- TL1 = 0x30;
- display();
- value++;
- if(value >= 150)
- {
- value = 0;
- flag_300ms = 1;
- }
- }
復制代碼
|