📝 跨设备剪贴板

返回主页

📋 全部记录

2026-10-22 08:46:43
sk-ws-H.PXXMDIL.oDJW.MEUCIBmSlPxQmZKaaE_IaC2yf44rk0aO-BEAJIsAr4WA1VWWAiEAsLEP_A4z2RLGHi8H1IFh5T87EZgDMgbOFilEXWmg5JA
2026-10-12 22:07:38
31213132
2026-10-12 22:06:07
31213132
2026-10-12 22:04:19
31213132
2026-10-12 22:00:59
#include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; // 1602引脚定义 sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; #define LCD_DATA P0 // 按键与电机 sbit K1 = P3^0; sbit MOTOR = P1^0; uchar duty = 0; uint show_rpm = 0; uint pwm_cnt = 0; /**************** LCD1602底层驱动 ****************/ void DelayMs(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void LcdWriteCmd(uchar cmd) { RS = 0; RW = 0; LCD_DATA = cmd; E = 1; DelayMs(1); E = 0; } void LcdWriteDat(uchar dat) { RS = 1; RW = 0; LCD_DATA = dat; E = 1; DelayMs(1); E = 0; } void LcdInit(void) { LcdWriteCmd(0x38); //16*2,8bit LcdWriteCmd(0x0C); //开显示,无光标 LcdWriteCmd(0x06); //写入后地址自动+1 LcdWriteCmd(0x01); //清屏 DelayMs(2); } // 在指定位置显示字符串 void LcdShowStr(uchar pos, uchar *str) { LcdWriteCmd(0x80 + pos); while(*str) { LcdWriteDat(*str++); } } // 在第二行指定位置显示数字(0~999) void LcdShowNum(uchar pos, uint num) { uchar buf[4]; buf[0] = num/100 + '0'; buf[1] = (num%100)/10 + '0'; buf[2] = num%10 + '0'; buf[3] = '\0'; LcdWriteCmd(0x80 + 0x40 + pos); //0x40=第二行起始地址 LcdShowStr(0,buf); } /**************** 定时器0 PWM电机调速 ****************/ void Timer0_Init(void) { TMOD |= 0x01; TH0 = 0xF5; TL0 = 0xF5; ET0 = 1; TR0 = 1; EA = 1; } void Timer0_ISR() interrupt 1 { TH0 = 0xF5; TL0 = 0xF5; pwm_cnt++; if(pwm_cnt >= 100) pwm_cnt = 0; if(pwm_cnt < duty * 20) MOTOR = 0; else MOTOR = 1; } /**************** 按键扫描 ****************/ void KeyScan(void) { uint i; if(K1 == 0) { DelayMs(10); //消抖 if(K1 == 0) { duty++; if(duty >= 5) duty = 0; switch(duty) { case 0: show_rpm = 0; MOTOR = 1; break; case 1: show_rpm = 200; break; case 2: show_rpm = 400; break; case 3: show_rpm = 600; break; case 4: show_rpm = 800; break; } while(K1 == 0); //等待松开 } } } void main(void) { Timer0_Init(); LcdInit(); LcdShowStr(0,"Motor Speed:"); //第一行 while(1) { KeyScan(); LcdShowNum(0, show_rpm); //第二行刷新转速 DelayMs(100); } }
2026-10-12 21:58:23
#include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; // 1602引脚定义 sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; #define LCD_DATA P0 // 按键与电机 sbit K1 = P3^0; sbit MOTOR = P1^0; uchar duty = 0; uint show_rpm = 0; uint pwm_cnt = 0; /**************** LCD1602底层驱动 ****************/ void DelayMs(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void LcdWriteCmd(uchar cmd) { RS = 0; RW = 0; LCD_DATA = cmd; E = 1; DelayMs(1); E = 0; } void LcdWriteDat(uchar dat) { RS = 1; RW = 0; LCD_DATA = dat; E = 1; DelayMs(1); E = 0; } void LcdInit(void) { LcdWriteCmd(0x38); //16*2,8bit LcdWriteCmd(0x0C); //开显示,无光标 LcdWriteCmd(0x06); //写入后地址自动+1 LcdWriteCmd(0x01); //清屏 DelayMs(2); } // 在指定位置显示字符串 void LcdShowStr(uchar pos, uchar *str) { LcdWriteCmd(0x80 + pos); while(*str) { LcdWriteDat(*str++); } } // 在第二行指定位置显示数字(0~999) void LcdShowNum(uchar pos, uint num) { uchar buf[4]; buf[0] = num/100 + '0'; buf[1] = (num%100)/10 + '0'; buf[2] = num%10 + '0'; buf[3] = '\0'; LcdWriteCmd(0x80 + 0x40 + pos); //0x40=第二行起始地址 LcdShowStr(0,buf); } /**************** 定时器0 PWM电机调速 ****************/ void Timer0_Init(void) { TMOD |= 0x01; TH0 = 0xF5; TL0 = 0xF5; ET0 = 1; TR0 = 1; EA = 1; } void Timer0_ISR() interrupt 1 { TH0 = 0xF5; TL0 = 0xF5; pwm_cnt++; if(pwm_cnt >= 100) pwm_cnt = 0; if(pwm_cnt < duty * 20) MOTOR = 0; else MOTOR = 1; } /**************** 按键扫描 ****************/ void KeyScan(void) { uint i; if(K1 == 0) { DelayMs(10); //消抖 if(K1 == 0) { duty++; if(duty >= 5) duty = 0; switch(duty) { case 0: show_rpm = 0; MOTOR = 1; break; case 1: show_rpm = 200; break; case 2: show_rpm = 400; break; case 3: show_rpm = 600; break; case 4: show_rpm = 800; break; } while(K1 == 0); //等待松开 } } } void main(void) { Timer0_Init(); LcdInit(); LcdShowStr(0,"Motor Speed:"); //第一行 while(1) { KeyScan(); LcdShowNum(0, show_rpm); //第二行刷新转速 DelayMs(100); } }
2026-10-12 21:55:01
#include <reg52.h> typedef unsigned char uchar; typedef unsigned int uint; // 1602引脚定义 sbit RS = P2^0; sbit RW = P2^1; sbit E = P2^2; #define LCD_DATA P0 // 按键与电机 sbit K1 = P3^0; sbit MOTOR = P1^0; uchar duty = 0; uint show_rpm = 0; uint pwm_cnt = 0; /**************** LCD1602底层驱动 ****************/ void DelayMs(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } void LcdWriteCmd(uchar cmd) { RS = 0; RW = 0; LCD_DATA = cmd; E = 1; DelayMs(1); E = 0; } void LcdWriteDat(uchar dat) { RS = 1; RW = 0; LCD_DATA = dat; E = 1; DelayMs(1); E = 0; } void LcdInit(void) { LcdWriteCmd(0x38); //16*2,8bit LcdWriteCmd(0x0C); //开显示,无光标 LcdWriteCmd(0x06); //写入后地址自动+1 LcdWriteCmd(0x01); //清屏 DelayMs(2); } // 在指定位置显示字符串 void LcdShowStr(uchar pos, uchar *str) { LcdWriteCmd(0x80 + pos); while(*str) { LcdWriteDat(*str++); } } // 在第二行指定位置显示数字(0~999) void LcdShowNum(uchar pos, uint num) { uchar buf[4]; buf[0] = num/100 + '0'; buf[1] = (num%100)/10 + '0'; buf[2] = num%10 + '0'; buf[3] = '\0'; LcdWriteCmd(0x80 + 0x40 + pos); //0x40=第二行起始地址 LcdShowStr(0,buf); } /**************** 定时器0 PWM电机调速 ****************/ void Timer0_Init(void) { TMOD |= 0x01; TH0 = 0xF5; TL0 = 0xF5; ET0 = 1; TR0 = 1; EA = 1; } void Timer0_ISR() interrupt 1 { TH0 = 0xF5; TL0 = 0xF5; pwm_cnt++; if(pwm_cnt >= 100) pwm_cnt = 0; if(pwm_cnt < duty * 20) MOTOR = 0; else MOTOR = 1; } /**************** 按键扫描 ****************/ void KeyScan(void) { uint i; if(K1 == 0) { DelayMs(10); //消抖 if(K1 == 0) { duty++; if(duty >= 5) duty = 0; switch(duty) { case 0: show_rpm = 0; MOTOR = 1; break; case 1: show_rpm = 200; break; case 2: show_rpm = 400; break; case 3: show_rpm = 600; break; case 4: show_rpm = 800; break; } while(K1 == 0); //等待松开 } } } void main(void) { Timer0_Init(); LcdInit(); LcdShowStr(0,"Motor Speed:"); //第一行 while(1) { KeyScan(); LcdShowNum(0, show_rpm); //第二行刷新转速 DelayMs(100); } }
2026-10-12 21:48:52
123
2026-10-12 10:22:46
#include <REGX52.H> sbit BEEP = P2^5; void Delay_us(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=11;j>0;j--); } void main(void) { while(1) { BEEP = 0; Delay_us(227); //2200Hz方波 BEEP = 1; Delay_us(227); } }
2026-10-12 10:21:08
#include <REGX52.H> sbit BEEP = P2^5; void Delay(unsigned int ms) { unsigned int i,j; for(i=ms;i>0;i--) for(j=120;j>0;j--); } void main(void) { BEEP = 0; //ULN导通,有源蜂鸣器长鸣 while(1) { } }
2026-10-12 10:20:10
#include <REGX52.H> sbit BEEP = P2^5; void Delay_us(unsigned int t) { unsigned int i,j; for(i=t;i>0;i--) for(j=11;j>0;j--); } void main(void) { while(1) { BEEP = 0; //ULN导通 Delay_us(500); BEEP = 1; //ULN关断 Delay_us(500); } }