#include <REG51.h>#define uchar unsigned char#define uint unsigned intsbit RS=P2^0;sbit RW=P2^1;sbit EN=P2^2;sbit DQ=P3^4;uchar code table1[]="Temperature is:";uint table2[6]temperaturetemperatureflag;uint wei_baiwei_shiwei_gexiaoshufuhaowendu;void delay(int a){ int ij; for(i=a;i>0;i--) for(j=0;j<110;j++);}void delayus(int a){ while(a--);}void write_com(uchar com){ P0=com; RS=0;RW=0;EN=1; delay(10); EN=0;}void write_dat(uchar dat){ P0=dat; RS=1;RW=0;EN=1; delay(10); EN=0;}void init_LM1602(){ write_com(0x01); write_com(0x38); write_com(0x0c); write_com(0x06);}uchar read_onebyte(){ uchar itemp=0; for(i=0;i<8;i++) { DQ=0; temp>>=1; DQ=1; if(DQ) temp|=0x80; delayus(4); } return temp;}void write_onebyte(uchar dat){ uchar i; for(i=0;i<8;i++) { DQ=0; DQ=dat&0x01; delayus(10); DQ=1; dat>>=1; }}void init_DS18B20(){ uchar x=0; DQ=1; delayus(8); DQ=0; delayus(80); DQ=1; delay(4); x=DQ; delayus(20);}uchar read_Temparature(){ uchar tempL=0tempH=0; init_DS18B20(); write_onebyte(0xcc); write_onebyte(0x44); delayus(100); init_DS18B20(); write_onebyte(0xcc); write_onebyte(0xbe); tempL=read_onebyte(); tempH=read_onebyte();/@@* if(tempH&0xF0) //显示负数 { tempL=~tempL; tempH=~tempH; temperature=(tempH*256+tempL)/16*(-1)-1; temperatureflag=1; } else //显示正数 { temperature=(tempH*256+tempL)*0.0625; temperatureflag=0; }*/ temperature=tempH; temperature=temperature<<8; temperature=temperature|tempL; if(temperature>0x0fff) { temperature=~temperature+2; temperatureflag=1; } else temperatureflag=0; temperature=temperature*0.0625*10; return temperature;}void display(){ wendu=read_Temparature(); if(temperatureflag==1) fuhao=0x2d; else fuhao=0x2b; wei_bai=wendu/1000+0x30; wei_shi=wendu%1000/100+0x30; wei_ge=wendu%100/10+0x30; xiaoshu=wendu%10+0x30; write_com(0xc3); write_dat(fuhao); write_dat(wei_bai); write_dat(wei_shi); write_dat(wei_ge); write_dat(0x2e); write_dat(xiaoshu); write_dat(0xdf); write_dat(0x43);}void main(){ uchar i; init_LM1602(); while(1) { write_com(0x80); for(i=0;i<15;i++) { write_dat(table1[i]); delay(5); } display(); }}复制代码
STC单片机内置ISP可以使用串口下载程序,N76E003好像出厂不内置ISP程序,我该如何使用串口下载程序呢?
求各位大神帮忙提示一下,怎么在12864上显示出一个圆形的表盘,可以有具体的步骤,多谢
TAG调试电缆制作完成,实验板正确,并口发生错误,实验板接上后发生短路,是什么原因?
如题,理论上T1作为波特率发生器的定时器不需要中断服务函数。 但是如果加了允许进入中断(ET1=1;),又写了中断服务函数内容的话,会造成串口发送乱码吗? 或者允许了中断,但是不写中断服务函数,会造成51单片机跑飞程序吗? void SendByte(unsigned char c) { SBUF = c; while(TI==0); TI = 0; } void main(void) { TMOD = 0x21; // 波特率2400 SCON = 0x50; TH1 = 0xF3; TL1 = TH1; TR1 = 1; EA = 1; ET1 = 1; //就是加了这句!!!!允许T1中断 while(1) { SendByte('A'); } } void Timer1Isr(void) interrupt 3 //T1的中断服务函数,随便瞎写的内容,只是表示一下。 { unsigned char i = 0; i++; } 其实也就是 定时器T1的中断服务函数会不会影响串口产生的波特率或者SBUF的发送???
关于KEIL无法增加STC 系列的头文件刚开始是提示没有INI文件,是路径错了,后面直接就无法加载。大神们支招
希望通过esp8266令APP显示数据,现在的情况是WIFI能与APP建立连接,通过电脑也能收到串口的数据,但是无法将数据通过wifi发送到手机上,请问如何解决呢? (电脑的传输线和esp8266使用的是一个串口)相关程序如下:单片机主函数:#include<reg52.h>#include"dht11.h"#include "string.h"#define uchar unsigned char #define uint unsigned intunsigned char idata Rxbuff[50]Rxnum;extern unsigned char F16TF16RH; //温湿度数据sbit LED1=P2^2;sbit LED2=P2^4;unsigned char getflag;//获取标志void InitUART(void);void delayms(unsigned int x);void UART_send_byte(char dat);void ESP8266_SERVER(void);void Send_Str(unsigned char *buf);void main(){ unsigned char Tx_Buf[10]; delayms(500); delayms(1000); //延时一段时间,让WIFI模块稳定 InitUART(); //初始化串口 ESP8266_SERVER(); //初始化ESP8266 LED1=0; while(1) { getDHT11(); //获取温湿度值 Tx_Buf[0]=F16T/10%10+0x30; //帧头 Tx_Buf[1]=F16T%10+0x30; //将温湿度数据送往发送数组送给模块让手机APP显示 Tx_Buf[2]= ';'; Tx_Buf[3]=F16RH/10%10+0x30; Tx_Buf[4]=F16RH%10+0x30; Send_Str("AT+CIPSEND=05\r\n"); delayms(300); Send_Str(Tx_Buf);//发送数据 LED2=0; }}void InitUART(void) //这是串口的基本配置,配置他的波特率是9600.这些参数都是标准的。{ TMOD = 0x20; SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; ES = 1; TR1 = 1;}void delayms(unsigned int x){ unsigned int i; while(x--) for(i=125;i>0;i--);}//UART 发送一字节void UART_send_byte(char dat){ SBUF = dat; //发送 while (TI == 0); //等待发送完毕 TI = 0; //清发送完毕中断请求标志位 }//UART 发送字符串void Send_Str(unsigned char *buf){ while (*buf != '\0') { UART_send_byte(*buf++); }}void ESP8266_SERVER(void)//建立服务器{ ES = 0; TI = 1; Send_Str("AT\r\n"); delayms(500); Send_Str("AT\r\n"); delayms(500); Send_Str("AT+CWMODE=2\r\n"); //服务器搭建在WIFI模块上 delayms(500); Send_Str("AT+CWSAP=\"WiFi_mushu\"\"12345678\"53\r\n"); //设置显示名称:wifi密码:12345678 delayms(500); Send_Str("AT+CIPMUX=1\r\n");//启动多连接,建立服务器都需要配置 delayms(500); Send_Str("AT+CIPSERVER=15000\r\n");//建立服务器 delayms(500); Send_Str("AT+CIPSTO=0\r\n"); TI = 0; ES = 1; } APP相关程序package com.example.wifi_mushu;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;public class MainActivity extends AppCompatActivity { //定义控件 EditText edGateIp edGateSn; Button btnSearch btnLogin; //消息机制 private Handler messageHandler; //开辟一个socket Socket socket = null; OutputStream OutputStream = null;//定义数据输出流,用于发送数据 BufferedReader bufferedReader;//声明输入流对象 InputStream InputStream = null;//定义数据输入流,用于接收数据 //定义逻辑变量,用于判断服务器连接状态 boolean isConnected = false; //用于控制读数据线程是否执行 boolean RD = false; //测试区域 Button fs; EditText sjfs sjjs; @SuppressLint("HandlerLeak") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //控件绑定 edGateIp = findViewById(R.id.edGateIP); edGateSn = findViewById(R.id.edGateSn); btnSearch = findViewById(R.id.btnSearch); btnLogin = findViewById(R.id.btnLogin); //