目录
(43条消息) 基于C51语音控制小车_菜鸟成长之路丶的博客-CSDN博客
uart.c文件
- #include "reg52.h"
- #include "motor.h"
- #include "string.h"
- sbit D5 = P3^7;
- #define SIZE 12
-
- sfr AUXR = 0x8E;
- char buffer[SIZE];
-
- void UartInit(void) //9600bps@11.0592MHz
- {
- AUXR = 0x01;
- SCON = 0x50; //配置串口工作方式1,REN使能接收
- TMOD &= 0x0F;
- TMOD |= 0x20;//定时器1工作方式位8位自动重装
-
- TH1 = 0xFD;
- TL1 = 0xFD;//9600波特率的初值
- TR1 = 1;//启动定时器
-
- EA = 1;//开启总中断
- ES = 1;//开启串口中断
- }
-
-
- void SendByte(char mydata)
- {
- SBUF = mydata;
- while(!TI);
- TI = 0;
- }
-
- void SendString(char *str)
- {
- while(*str != '\0'){
- SendByte(*str);
- str++;
- }
- }
-
-
- //M1qian M2 hou M3 zuo M4 you
- void Uart_Handler() interrupt 4
- {
- static int i = 0;//静态变量,被初始化一次
- char tmp;
-
- if(RI)//中断处理函数中,对于接收中断的响应
- {
- RI = 0;//清除接收中断标志位
- tmp = SBUF;
- if(tmp == 'M'){
- i = 0;
- }
- buffer[i++] = tmp;
-
- //灯控指令
- if(buffer[0] == 'M'){
- switch(buffer[1]){
- case '1':
- goForward();
- break;
- case '2':
- goBack();
- break;
- case '3':
- goLeft();
- break;
- case '4':
- goRight();
- break;
- default:
- stop();
- break;
- }
- }
-
- if(i == 12) {
- memset(buffer, '\0', SIZE);
- i = 0;
- }
- }
-
- }
uart.h文件
- void UartInit(void);
- void SendString(char *str);
- void SendByte(char mydata);
time.c文件
- #include "motor.h"
- #include "reg52.h"
-
- extern unsigned int speedCnt;
- unsigned int speed;
- char signal = 0;
- unsigned int cnt = 0;
-
- void Time0Init()
- {
- //1. 配置定时器0工作模式位16位计时
- TMOD = 0x01;
- //2. 给初值,定一个0.5出来
- TL0=0x33;
- TH0=0xFE;
- //3. 开始计时
- TR0 = 1;
- TF0 = 0;
- //4. 打开定时器0中断
- ET0 = 1;
- //5. 打开总中断EA
- EA = 1;
- }
-
- void Time0Handler() interrupt 1
- {
- cnt++; //统计爆表的次数. cnt=1的时候,报表了1
- //重新给初值
- TL0=0x33;
- TH0=0xFE;
-
- if(cnt == 2000){//爆表2000次,经过了1s
- signal = 1;
- cnt = 0; //当100次表示1s,重新让cnt从0开始,计算下一次的1s
- //计算小车的速度,也就是拿到speedCnt的值
- speed = speedCnt;
- speedCnt = 0;//1秒后拿到speedCnt个格子,就能算出这1s的速度,格子清零
- }
-
- }
time.h文件
void Time0Init();
motor.c文件
- #include "reg52.h"
-
- sbit RightCon1A = P3^7;
- sbit RightCon1B = P3^3;
-
- sbit LeftCon1A = P3^4;
- sbit LeftCon1B = P3^5;
-
- void goForward()
- {
- LeftCon1A = 0;
- LeftCon1B = 1;
-
- RightCon1A = 0;
- RightCon1B = 1;
- }
-
- void goRight()
- {
- LeftCon1A = 0;
- LeftCon1B = 1;
-
- RightCon1A = 0;
- RightCon1B = 0;
- }
-
-
- void goLeft()
- {
- LeftCon1A = 0;
- LeftCon1B = 0;
-
- RightCon1A = 0;
- RightCon1B = 1;
- }
-
- void goBack()
- {
- LeftCon1A = 1;
- LeftCon1B = 0;
-
- RightCon1A = 1;
- RightCon1B = 0;
- }
-
- void stop()
- {
- LeftCon1A = 0;
- LeftCon1B = 0;
-
- RightCon1A = 0;
- RightCon1B = 0;
- }
motor.h文件
- void goRight();
- void goLeft();
- void goForward();
- void goBack();
- void stop();
delay.c文件
- #include "intrins.h"
-
- void Delay1000ms() //@11.0592MHz
- {
- unsigned char i, j, k;
-
- _nop_();
- i = 8;
- j = 1;
- k = 243;
- do
- {
- do
- {
- while (--k);
- } while (--j);
- } while (--i);
- }
delay.h文件
void Delay1000ms();
main.c文件
- /**** Author: 上官可编程(抖音) ************
- **** 录播课堂代码,为小白学习功能实现 ****
- **** 代码合理性和效率不做评估 ************
- **** 2022/3/22 3:35 **********************
- ********************************************/
-
- #include "motor.h"
- #include "delay.h"
- #include "uart.h"
- #include "reg52.h"
- #include "time.h"
- #include "stdio.h"
-
- sbit speedIO = P3^2;//外部中断0
- unsigned int speedCnt = 0; //统计格子,脉冲次数
- extern unsigned int speed;//速度
- extern char signal; //主程序发速度数据的通知
- char speedMes[24]; //主程序发送速度数据的字符串缓冲区
-
- void Ex0Init()
- {
- EX0 = 1;//允许中断
- //EA = 1;在串口初始化函数中已经打开了总中断
- IT0 = 1;//外部中断的下降沿触发
- }
-
- void main()
- {
- Time0Init();//定时器0初始化
- UartInit();//串口相关初始化
- //外部中断初始化
- Ex0Init();
-
- while(1){
- if(signal){//定时器1s到点,把signal置一,主程序发送速度
- sprintf(speedMes,"speed:%d cm/s",speed);//串口数据的字符串拼装,speed是格子,每个格子1cm
- SendString(speedMes);//速度发出去
- signal = 0;//清0speed,下次由定时器1s后的中断处理中再置一
- }
- }
- }
-
- void speedHandler() interrupt 0 //外部中断处理函数
- {
- speedCnt++;//码盘转动了一个格子
- }
除了以下几个文件要改,其他不需要修改,沿用上面的
Oled.c文件
- #include "reg52.h"
- #include "intrins.h"
- #include "Oledfont.h"
-
-
- sbit scl = P1^2;
- sbit sda = P1^3;
-
- void IIC_Start()
- {
- scl = 0;
- sda = 1;
- scl = 1;
- _nop_();
- sda = 0;
- _nop_();
- }
-
- void IIC_Stop()
- {
- scl = 0;
- sda = 0;
- scl = 1;
- _nop_();
- sda = 1;
- _nop_();
- }
-
- char IIC_ACK()
- {
- char flag;
- sda = 1;//就在时钟脉冲9期间释放数据线
- _nop_();
- scl = 1;
- _nop_();
- flag = sda;
- _nop_();
- scl = 0;
- _nop_();
-
- return flag;
- }
-
- void IIC_Send_Byte(char dataSend)
- {
- int i;
-
- for(i = 0;i<8;i++){
- scl = 0;//scl拉低,让sda做好数据准备
- sda = dataSend & 0x80;//1000 0000获得dataSend的最高位,给sda
- _nop_();//发送数据建立时间
- scl = 1;//scl拉高开始发送
- _nop_();//数据发送时间
- scl = 0;//发送完毕拉低
- _nop_();//
- dataSend = dataSend << 1;
- }
- }
-
- void Oled_Write_Cmd(char dataCmd)
- {
- // 1. start()
- IIC_Start();
- //
- // 2. 写入从机地址 b0111 1000 0x78
- IIC_Send_Byte(0x78);
- // 3. ACK
- IIC_ACK();
- // 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
- IIC_Send_Byte(0x00);
- // 5. ACK
- IIC_ACK();
- //6. 写入指令/数据
- IIC_Send_Byte(dataCmd);
- //7. ACK
- IIC_ACK();
- //8. STOP
- IIC_Stop();
- }
-
- void Oled_Write_Data(char dataData)
- {
- // 1. start()
- IIC_Start();
- //
- // 2. 写入从机地址 b0111 1000 0x78
- IIC_Send_Byte(0x78);
- // 3. ACK
- IIC_ACK();
- // 4. cotrol byte: (0)(0)000000 写入命令 (0)(1)000000写入数据
- IIC_Send_Byte(0x40);
- // 5. ACK
- IIC_ACK();
- ///6. 写入指令/数据
- IIC_Send_Byte(dataData);
- //7. ACK
- IIC_ACK();
- //8. STOP
- IIC_Stop();
- }
-
-
- void Oled_Init(void){
- Oled_Write_Cmd(0xAE);//--display off
- Oled_Write_Cmd(0x00);//---set low column address
- Oled_Write_Cmd(0x10);//---set high column address
- Oled_Write_Cmd(0x40);//--set start line address
- Oled_Write_Cmd(0xB0);//--set page address
- Oled_Write_Cmd(0x81); // contract control
- Oled_Write_Cmd(0xFF);//--128
- Oled_Write_Cmd(0xA1);//set segment remap
- Oled_Write_Cmd(0xA6);//--normal / reverse
- Oled_Write_Cmd(0xA8);//--set multiplex ratio(1 to 64)
- Oled_Write_Cmd(0x3F);//--1/32 duty
- Oled_Write_Cmd(0xC8);//Com scan direction
- Oled_Write_Cmd(0xD3);//-set display offset
- Oled_Write_Cmd(0x00);//
-
- Oled_Write_Cmd(0xD5);//set osc division
- Oled_Write_Cmd(0x80);//
-
- Oled_Write_Cmd(0xD8);//set area color mode off
- Oled_Write_Cmd(0x05);//
-
- Oled_Write_Cmd(0xD9);//Set Pre-Charge Period
- Oled_Write_Cmd(0xF1);//
-
- Oled_Write_Cmd(0xDA);//set com pin configuartion
- Oled_Write_Cmd(0x12);//
-
- Oled_Write_Cmd(0xDB);//set Vcomh
- Oled_Write_Cmd(0x30);//
-
- Oled_Write_Cmd(0x8D);//set charge pump enable
- Oled_Write_Cmd(0x14);//
-
- Oled_Write_Cmd(0xAF);//--turn on oled panel
- }
-
- void Oled_Clear()
- {
- unsigned char i,j; //-128 --- 127
-
- for(i=0;i<8;i++){
- Oled_Write_Cmd(0xB0 + i);//page0--page7
- //每个page从0列
- Oled_Write_Cmd(0x00);
- Oled_Write_Cmd(0x10);
- //0到127列,依次写入0,每写入数据,列地址自动偏移
- for(j = 0;j<128;j++){
- Oled_Write_Data(0);
- }
- }
- }
-
- void Oled_Show_Char(char row,char col,char oledChar){ //row*2-2
- unsigned int i;
- Oled_Write_Cmd(0xb0+(row*2-2)); //page 0
- Oled_Write_Cmd(0x00+(col&0x0f)); //low
- Oled_Write_Cmd(0x10+(col>>4)); //high
- for(i=((oledChar-32)*16);i<((oledChar-32)*16+8);i++){
- Oled_Write_Data(F8X16[i]); //写数据oledTable1
- }
-
- Oled_Write_Cmd(0xb0+(row*2-1)); //page 1
- Oled_Write_Cmd(0x00+(col&0x0f)); //low
- Oled_Write_Cmd(0x10+(col>>4)); //high
- for(i=((oledChar-32)*16+8);i<((oledChar-32)*16+8+8);i++){
- Oled_Write_Data(F8X16[i]); //写数据oledTable1
- }
- }
-
-
- /******************************************************************************/
- // 函数名称:Oled_Show_Char
- // 输入参数:oledChar
- // 输出参数:无
- // 函数功能:OLED显示单个字符
- /******************************************************************************/
- void Oled_Show_Str(char row,char col,char *str){
- while(*str!=0){
- Oled_Show_Char(row,col,*str);
- str++;
- col += 8;
- }
- }
Oled.h文件
- void Oled_Write_Cmd(char dataCmd);
- void Oled_Write_Data(char dataData);
- void Oled_Init(void);
- void Oled_Clear();
- void Oled_Show_Str(char row,char col,char *str);
Oledfont.h
- const unsigned char code F8X16[]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
- 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
- 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
- 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
- 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
- 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
- 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
- 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
- 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
- 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
- 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
- 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
- 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
- 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
- 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
- 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
- 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
- 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
- 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
- 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
- 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
- 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
- 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
- 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
- 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
- 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
- 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
- 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
- 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
- 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
- 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
- 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
- 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
- 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
- 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
- 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
- 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
- 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
- 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
- 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
- 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
- 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
- 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
- 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
- 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
- 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
- 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
- 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
- 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
- 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
- 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
- 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
- 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
- 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
- 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
- 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
- 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
- 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
- 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
- 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
- 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
- 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
- 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
- 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
- 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
- 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
- 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
- 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
- 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
- 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
- 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
- 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
- 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
- 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
- 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
- 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
- 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
- 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
- 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
- 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
- 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
- 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
- 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
- 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
- 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
- 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
- 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
- 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
- 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
- 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
- };
main.c文件
- #include "motor.h"
- #include "delay.h"
- #include "uart.h"
- #include "reg52.h"
- #include "time.h"
- #include "stdio.h"
- #include "Oled.h"
-
- sbit speedIO = P3^2;//外部中断0
- unsigned int speedCnt = 0; //统计格子,脉冲次数
- extern unsigned int speed;//速度
- extern char signal; //主程序发速度数据的通知
- char speedMes[24]; //主程序发送速度数据的字符串缓冲区
-
- void Ex0Init()
- {
- EX0 = 1;//允许中断
- //EA = 1;在串口初始化函数中已经打开了总中断
- IT0 = 1;//外部中断的下降沿触发
- }
-
- void main()
- {
- Time0Init();//定时器0初始化
- UartInit();//串口相关初始化
- //外部中断初始化
- Ex0Init();
- Oled_Init();
- Oled_Clear();
- while(1){
- if(signal){//定时器1s到点,把signal置一,主程序发送速度
- sprintf(speedMes,"speed:%d cm/s",speed);//串口数据的字符串拼装,speed是格子,每个格子1cm
- SendString(speedMes);//速度发出去
-
- signal = 0;//清0speed,下次由定时器1s后的中断处理中再置一
- }
- Oled_Show_Str(2,2,speedMes);
- }
- }
-
- void speedHandler() interrupt 0 //外部中断处理函数
- {
- speedCnt++;//码盘转动了一个格子
- }
利用ESP8266模块来连接网络,模块可看(43条消息) C51之ESP-01s_菜鸟成长之路丶的博客-CSDN博客
除了以下要修改的代码,其余文件需补充第一个案例的完整代码才能运行
esp8266.c文件
- #include "uart.h"
-
- //1 工作在路由模式
- code char LYMO[] = "AT+CWMODE=2\r\n";
- //2 使能多链接
- code char DLJ[] = "AT+CIPMUX=1\r\n";
- //3 建立TCPServer
- code char JLFW[] = "AT+CIPSERVER=1\r\n"; // default port = 333
-
-
-
- char AT_OK_Flag = 0; //OK返回值的标志位
- char Client_Connect_Flag = 0;
-
- void initWifi_AP()
- {
- SendString(LYMO);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
- SendString(DLJ);
- while(!AT_OK_Flag);
- AT_OK_Flag = 0;
- }
-
- void waitConnect()
- {
- SendString(JLFW);
- while(!Client_Connect_Flag);
- AT_OK_Flag = 0;
- }
esp8266.h文件
- void initWifi_AP();
- void waitConnect();
main.c文件
-
- #include "motor.h"
- #include "delay.h"
- #include "uart.h"
- #include "reg52.h"
- #include "time.h"
- #include "stdio.h"
- #include "Oled.h"
- #include "esp8266.h"
-
- sbit speedIO = P3^2;//外部中断0
- unsigned int speedCnt = 0; //统计格子,脉冲次数
- extern unsigned int speed;//速度
- extern char signal; //主程序发速度数据的通知
- char speedMes[24]; //主程序发送速度数据的字符串缓冲区
- //发送数据
- char FSSJ[] = "AT+CIPSEND=0,5\r\n";
-
- void Ex0Init()
- {
- EX0 = 1;//允许中断
- //EA = 1;在串口初始化函数中已经打开了总中断
- IT0 = 1;//外部中断的下降沿触发
- }
-
- void main()
- {
- Time0Init();//定时器0初始化
- UartInit();//串口相关初始化
- Delay1000ms();//给espwifi模块上电时间
-
- initWifi_AP(); //初始化wifi工作在ap模式
- waitConnect(); //等待客户端的连接
-
- //外部中断初始化
- Ex0Init();
- Oled_Init();
- Oled_Clear();
- while(1){
- if(signal){//定时器1s到点,把signal置一,主程序发送速度
- SendString(FSSJ);
- Delay1000ms();
- sprintf(speedMes,"%dcms",speed);//串口数据的字符串拼装,speed是格子,每个格子1cm
- SendString(speedMes);//速度发出去
-
- signal = 0;//清0speed,下次由定时器1s后的中断处理中再置一
- }
- Oled_Show_Str(2,2,speedMes);
- }
- }
-
- void speedHandler() interrupt 0 //外部中断处理函数
- {
- speedCnt++;//码盘转动了一个格子
- }