今日热门

3

回答

​​​最近在学习制作电动撑衣杆这个项目,作为单片机新手,找不到关于伸缩杆的硬件与资料,师兄给的意见是类似于消防车云梯那种伸缩结构。​

5f9f7434f8dfd31c 2020-07-28 阅读:563

9

回答

stc单片机有内置can总线的型号吗

f76df50c385ab871 2020-07-28 阅读:1556

8

回答

51的INT0口可以作为普通IO口吗?我想把这个IO口作为按键来使用。INT0口不是外部中断吗?(全局中断已经打开)会不会按键按下给他一个低电平,然后就进入中断了还有,程序中有关于T0计时器的程序,那么T0这个IO口还可以做普通IO口吗?还有51单片机的其他端口是不是都可以当作普通IO口来使用?关于这一块很迷茫。

f86e1ee16c524657 2020-07-27 阅读:1449

1

回答

用什么芯片放大电流信号的,如果用运放那么没有负电源信号就无法到达0电压,是不是要用专用芯片的

yhj416606438 2020-07-27 阅读:500

2

回答

目的是想通过串口触摸屏控制单片机,实现输出PWM的脉宽和频率的单独调制。。。。stc89c52单片机一共两个定时器,因为脉宽和频率的单独调制功能就占用了T0和T1了,现在可以通过独立按键实现脉宽和频率的单独加减,但是如何通过串口来实现呢?打开串口就和前面的程序冲突了。或者说可以通过一个定时器实现PWM的脉宽和频率的单独调制吗?

676d355b4883e879 2020-07-24 阅读:692

4

回答

遇到一个问题,就是要求3.3V电压供给单片机,那我可以选择STC89LE52RC单片机吗?但是这个单片机跟STC89C52RC单片机的原理图有什么不同吗?我和队友所有的仿真之类的都是基于STC89C52RC的,网上好少关于LE52这个单片机的资料。

d139e686d19489c0 2020-07-23 阅读:832

4

回答

各位大佬,画的HT1621B驱动板驱动液晶,烧录程序后液晶不显示程序如下。#include <reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned char#define uint32 unsigned long int#define CKSEL (*(uchar volatile xdata *)0xfe00)#define CLKDIV (*(uchar volatile xdata *)0xfe01)#define IRC24MCR (*(uchar volatile xdata *)0xfe02)sfr P1M0=0x92;sfr P1M1=0x91;sfr P_SW2 = 0xba;sbit _DAT=P1^6; //HT1621数据引脚sbit _CS=P1^0; //HT1621使能引脚sbit _WR=P1^1; //HT1621时钟引脚sbit _Vlcd=P1^7;//液晶/背光电源控制引脚,低电平有效void delay_ms(uint z)                //主时钟频率24MHz{        uchar i=11 j=190;        _nop_();        _nop_();        _nop_();        while(z--)        {                do                {                        while (--j);                } while (--i);        }}void WriteBitR(uchar datuchar m){         uchar i;         for (i=0;i<m;i++)         {               _WR=0;               _nop_();               _DAT=dat&0x80;               _nop_();               _WR=1;               _nop_();               dat<<=1;          } }void Write_cmd(uchar Cmd){         _CS=0;         _nop_();         WriteBitR(0x804); //写入命令标志100         WriteBitR(Cmd8); //写入命令数据         _CS=1;         _nop_();}void WriteOneData(uchar Addruchar Data){         _CS=0;         WriteBitR(0xa03); //写入数据标志101         WriteBitR(Addr<<26); //写入地址数据         WriteBitR(Data8); //写入数据         _CS=1;         _nop_();}void LCD_Init(void){         _CS=1;         _WR=1;         _DAT=1;         Write_cmd(0x52);        //0b1000 0101 0010 1/3duty 4com         Write_cmd(0X30); //0b1000 0011 0000 内部时钟         Write_cmd(0x00); //0b1000 0000 0000 关振系统荡器和LCD偏压发生器         Write_cmd(0X0A);        //0b1000 0000 1010 禁止看门狗         Write_cmd(0X02); //0b1000 0000 0010 打开系统振荡器         Write_cmd(0X06); //0b1000 0000 0110 打开LCD偏压}void display1(){                uchar m1;        for(m1=0;m1<30;m1=m1+2)                        WriteOneData(m10xff);}void Init(){        P_SW2=0x80;        CKSEL=0x00;        P_SW2=0x00;        P1M0=0x00;        P1M1=0x00;        _Vlcd=0;        LCD_Init();}void main(){        Init();        while(1)        {                display1();                delay_ms(1);        }}

01eff7be008bf10e 2020-07-21 阅读:425

11

回答

51单片机中的看门狗是干嘛的?

e0c1be12476cbf7d 2020-07-19 阅读:957

5

回答

#include <REGX51.H>#include"LCD1602.h"void Delay1ms(unsigned int xms)                //@12.000MHz{        while(xms)        {                unsigned char i j;                  //定义毫秒的延时                        i = 2;                j = 239;                do                {                        while (--j);                } while (--i);                xms--;        }}void dierduan (){                int years  = 2020;                        //万年历   //定义初始值                int months = 7;                int date  = 15;                  int hour = 0;                                //从零开始                int minute = 0;                int second = 0;                                                                   LCD_Init();                        LCD_ShowString(11"Date");                         //LCD显示                        LCD_ShowNum(16 years4);                        LCD_ShowNum(111 months2);                        LCD_ShowNum(114date2);                        LCD_ShowString(21"Time");                        LCD_ShowNum(26 hour2);                        LCD_ShowNum(29 minute2);                        LCD_ShowNum(212 second2);                        LCD_ShowString(215"WE");                        while(1)                        {                                if (second<60)                                                  //秒数增加                                 {                                        second++;                                        Delay1ms(1000);                                        LCD_ShowNum(212 second2);                                 }                                if(second==60)                                                   //分钟增加                                 {                                         second = 0;                                        minute++;                                        LCD_ShowNum(29 minute2);                                 }                                if(minute==60)                                           //小时增加                                 {                                  minute = 0;                                  hour++;                                  LCD_ShowNum(29 minute2);                              LCD_ShowNum(26 hour2);                                 }                                 if(hour==24)                                                   //天数增加                                 {                                         hour=0;                                        date++;                                        LCD_ShowNum(26 hour2);                                        LCD_ShowNum(114date2);                                        LCD_ShowString(215"WE");                                                                                                 }                                 if(date==30)                                                   //月份增加                                 {                                         date=0;                                        months++;                                        LCD_ShowNum(111 months2);                                LCD_ShowNum(114date2);                                 }                                 if(months==12)                                                          //年份增加                                 {                                         months=0;                                        years++;                                        LCD_ShowString(11"Date");                                 LCD_ShowNum(16 years4);                                 LCD_ShowNum(111 months2);                                 }                                                                                            if(P3_0==0)                                                          //长按键增加秒数                                  {                                          Delay1ms(10);                                        while(P3_0);                                        Delay1ms(10);                                        ++second;                                        LCD_ShowNum(212 second2);                                  }                                  else if(P3_1==0)                                                          //长按键减少秒数                                  {                                          Delay1ms(10);                                        while(P3_1);                                        Delay1ms(10);                                        --second;                                        LCD_ShowNum(212 second2);                                  }                                        else if(P3_2==0)                                  {                                                                                        //长按键增加天数                                          Delay1ms(10);                                        while(P3_2);                                        Delay1ms(10);                                        ++date;                                        LCD_ShowNum(114date2);                                                                  }                                  else if(P3_3==0)                                                           //长按键减少天数                                  {                                          Delay1ms(10);                                        while(P3_3);                                        Delay1ms(10);                                        date--;                                        LCD_ShowNum(114date2);                                  }                                                           }}main (){                   LCD_Init();     LCD_ShowString(11"Hello!");                                           //LCD显示Hello         Delay1ms(10000);                                                                   //延迟显示10秒         LCD_Init();         LCD_ShowString(11"WL1908104020");                           // LCD显示         Delay1ms(6000);                                                                   // 延迟6秒         LCD_Init();         LCD_ShowString(11"DUANZUNCHENG");                          //  LCD显示         Delay1ms(9000);                                                                  //  延迟9秒         dierduan () ;                                  while (1)          {          }                 }

f31e612039b4260b 2020-07-18 阅读:460

6

回答

华为手机没我耳机孔,只能用typec,那么接口里面是直接接到耳机,还是说有转换芯片的,可以同时充电和使用耳机吗

yhj416606438 2020-07-18 阅读:5015

1

回答

#include <reg52.h>unsigned char timer1;sbit DIR = P1^2;//位定义DIR为P1.0口,控制步进电机转向sbit ENA=P1^1; //位定义ENA为P1.1,控制步进电机的使能sbit PWM=P1^0;//控制输出脉冲void Delay(unsigned int t);void system_Ini()   //调用子函数初始化定时器T1{   TMOD &= 0xF0;  //设置定时器模式   TMOD |= 0x01; //设置定时器模式   TL0 = 0x33;  //设置定时初值   TH0 = 0xFE; //设置定时初值   TF0 = 0;   //清除TF0标志   TR0 = 1;  //定时器0开始计时}void UsartInit(){SCON=0X50;      //设置为工作方式1TMOD &= 0x0F;  //设置定时器模式TMOD|=0X20;   //设置计数器工作方式2PCON=0X80;   //波特率加倍TH1=0XF3;   //计数器初始值设置,注意波特率是4800的TL1=0XF3;    ES=1;     //打开接收中断EA=1;    //打开总中断TR1=1;  //打开计数器}bit receiveFlag = 0;main()                                                  {int count = 0;system_Ini();  //调用子函数初始化定时器 T1UsartInit();IE = 0X92;//开T0串口中断,开总中断10010010while(1){    if(receiveFlag)  {    count = 0;    receiveFlag = 0;    while(count < 205)    {        if (timer1>10)         //决定这一个脉冲的周期时间,此处为0.5ms*10=5ms            {                 timer1=0;                 count ++;            }         if (timer1<3)            {                 PWM=0;            }        else            {                 PWM = 1;            }     }    }    } }void T1zd(void) interrupt 1 //开定时器0中断     T0中断   {TH0 = 0xfe;TL0 = 0x33;timer1++;//计数+1}void Usart() interrupt 4   //串口相应中断{  RI = 0;//清除接收中断标志位    receiveFlag = 1;}void Delay(unsigned int t)//延时{                                   while(t--)        {                 ;        }} 

822e5d1f5aabbd6b 2020-07-17 阅读:587

5

回答

我想问一下,我要在proteus中使用语音播放,但是没有语音芯片,就很苦恼,而我只能做仿真。我的实验内容是LCD显示的内容要通过语音播放出来,但是不知道怎么办?

d95d32d0ee0adf17 2020-07-17 阅读:6834

10

回答

考虑成本,AT89C2051单片机能否驱动WS2812 RGB LED,全静态工作频率:0Hz-24MHz,不知能否满足驱动要求。。

夕阳接你 2020-07-17 阅读:3152

3

回答

打印机usb接在开发板上,开发板网线接路由器,局域网其他电脑怎么能够打印

yhj416606438 2020-07-14 阅读:701

3

回答

我是根据师傅的51单片机编程自学的 ,上电后lcd1602第一排显示方块,初始化后方块消失,接着写数据,没有反应。

2ae554887cc03ba4 2020-07-10 阅读:325

3

回答

萌新请教,51单片机开发板标配能做多少实验

58ff3a320605620e 2020-07-09 阅读:428

1

回答

自己写了个函数,参数为指向数组的指针,及计数变量,函数实现:void Uart2Send(unsigned char *punsigned char i)   {unsigned char utemp;        p[i]=0x00;        #if 0               for(utemp=0;utemp<=i;utemp++)                {                        //S2BUF=p[utemp];                        S2BUF=utemp;                        while((S2CON & 0x02)==0);                        S2CON &= ~0x02;                }                #endif                do                {                        S2BUF=utemp;                        while((S2CON & 0x02)==0);                        S2CON &= ~0x02;                        utemp++;                }                while(utemp<=i);}函数调用:Uart2Send(&Re_R_buffer[0x00]10);Uart2Send(&Re_R_buffer[0x00]16);调试问题:1.//S2BUF=p[utemp];放开----非S2BUF=utemp;状态下,数组发送了两遍。                2.怀疑是循环的问题,改成先执行后判断的dowhie循环。实验结果:0,0 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF。没有在utemp>16时结束循环

0de0afb2cda703c1 2020-07-08 阅读:846

1

回答

#include <reg52.h>#define uchar unsigned char#define uint unsigned intvoid delay_ms (uint x){   uchar t;   while(x--)   for(t=0; t<120; t++);   }   void main()   {   uchar  i;   unsigned char table[]=(0xc0 0xf9 0xa4 0xb0 0x99 0x92 0x82 0xf8 0x80 0x90);   SCON=0x00;   while(i<10)   {   SBUF=table [i];   while(!TI);   TI=0;   i=(i+1)%10;   delay_ms(1000);   }}

51874d4339592cdb 2020-07-08 阅读:264

5

回答

51单片机做了一个指纹+rfid门禁识别系统rfid是p21-25口模拟的spi,刚开始波特率2400指纹是p30.31口uart,波特率9600刚开始两个合并起来不能用,我就把rfid的波特率也改到9600,就可以用了连接两个设备一定要同一波特率吗?

009544c36528c94b 2020-07-07 阅读:566

3

回答

各位大佬好,我是新人最近学51单片机有一个问题一直困惑着我,就是关于串口中断函数何时进入的问题,如下面代码void Usart() interrupt 4{        u8 receiveData;        receiveData=SBUF;        RI = 0;        SBUF=receiveData;        while(!TI);         TI=0; }复制代码上面的串口中断函数应该是在RI或TI置一的时候进入,上面的中断函数初次进入是RI=1,但是运行到SBUF=receiveData的时候,此时TI应该置0,等待TI置1,那假如在这个程序中,TI在中断程序中变成1,那中断程序是直接运行到末尾还是重新从头运行,毕竟TI=1触发了中断,应该重头再次运行。

1209a6b76f22a509 2020-07-07 阅读:1733
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

问题达人换一批

本月问答

排名
用户名
问答积分
< >