2

回答
AVR下载烧录。在线等 单片机综合应用

大佬们,Atxmega64A3U我用的片子,最近刚准备学AVR,xmega除了可以用PDI,还可以用别的方式吗,请教下大佬,帮忙普及解释下我目前不理解的几个问题:1,AVR有常见的两种烧录方式,ISP和PDI,这两种有什么区别呢,为啥还分了两种呢,度娘说法太绕了,简单直白说明一下就好2,Atxmega64A3U这个片子可以用ISP下载吗3,xmega度娘上很多说可以用串口烧录,有会的大佬说明一下吗?另外建议这样操作吗?4,目前手头有个ISP的AVR下载器,不知能否改成带PDI下载的,网上看到有人改成功过,​在线等!在线等!在线等!​​​

a2605 2020-06-27 阅读:90

1

回答
步进电机低速运转抖动厉害 单片机综合应用

在低速转动是抖动比高速抖动厉害,怎么让低速不抖动

yhj416606438 2020-06-21 阅读:181

5

回答
RT1064支持DDR吗 单片机综合应用

RT1064支持DDR吗?

牛妞小小 2020-06-20 阅读:212

6

回答

单片机发送大量数据如果使用串口太慢,可不可以改成spi数据传输给esp32

yhj416606438 2020-06-18 阅读:265

5

回答

RT1052做产品有性价比么,感觉性能就是单片机价格非常高?

潜移默化 2020-06-16 阅读:226

9

回答
8位单片机都是51的么 单片机综合应用

8位单片机都是51的么

522e61e3121c5064 2020-06-13 阅读:262

35

回答

【点击文末链接,回复电子竞技赛事新闻,立得50IC币,每日一次机会!】终于熬过了一片阴霾的2020年初,进入了又一个热血活力的夏天。在这个夏天,电子芯吧客为大家带来了新的赛事频道,新的内容。覆盖大疆RoboMaster机甲大师赛、NXP恩智浦智能车比赛,以及大家熟悉的TI杯全国大学生电子设计竞赛。内容涵盖了赛事直播、赛程报道、官方通知、技术资料、相关视频,希望让大家有更好的渠道了解、感受、参与优秀的电子技术相关竞赛!赛事专区也会陆续上线各种赛事相关,有爱有奖的活动,欢迎大家多多关注!赛事首发活动6/12日至7/12日点击赛事频道链接:https://www.icxbk.com/game回复任意帖子,必得50IC币!每日一次机会!7/12日将进行统计,统一发放IC币可在礼品中心兑换各种优质礼品!

电子芯吧客 2020-06-12 阅读:4416

10

回答

两轮平衡小车是用51单片机好,还是stm32好?

9a85b0f275cb15cd 2020-06-11 阅读:176

4

回答
关于C语言属于运算的问题 单片机综合应用

写了一个51单片机的程序,但是运行不正常,使用网络在线编译的工具验证了一下,发现不对,程序如下截图:程序中x的值我设置为0xa5,然后听过一个按位或运算,根据x的值,经过一个8次循环后,dat的值应该和x的值一样才对,但是实际运行结果打印出来不对,不知道问题出在哪里。我已经把每此经过移位后的数据打印出来了,提供给你们分析。

我是假管贴心小助手 2020-06-10 阅读:180

3

回答

*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL    SYMBOL:  _SENDCHAR    MODULE:  main1051.obj (MAIN1051)*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL    SYMBOL:  INIT    MODULE:  main1051.obj (MAIN1051)*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL    SYMBOL:  COMBUF    MODULE:  main1051.obj (MAIN1051)*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  INIT    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0801H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0806H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 080DH*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMBUF    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 081AH*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMBUF    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0821H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0823H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0830H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMBUF    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0834H*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  _SENDCHAR    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 083BH*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL    SYMBOL:  COMPOINTER    MODULE:  main1051.obj (MAIN1051)    ADDRESS: 0843H

fe2c9019d1dc3749 2020-06-09 阅读:202

6

回答

if(succeed_flag==1)             {                            distance_data=outcomeH;                //测量结果的高8位           distance_data<<=8;                   //放入16位的高8位                     distance_data=distance_data|outcomeL;//与低8位合并成为16位结果数据            distance_data*=12;                  //因为定时器默认为12分频           distance_data/=58;                   //微秒的单位除以58等于厘米         }                                      //为什么除以58等于厘米,  Y米=(X秒*344)/2                                                       // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58 为什么 distance_data要乘以12,这跟定时器默认为12分频有什么关系吗?

edc0300acea9bd69 2020-06-09 阅读:135

8

回答

想学好单片机程序算法,需要看些什么书呢?

ca3274eca0301078 2020-06-09 阅读:147

11

回答

.hex文件怎么用keil打开,显示代码

bf33712d43eacede 2020-06-09 阅读:211

3

回答

我想请问一下,为什么ADC0804为什么不能直接对电池电压采样呢 

4c4b0225487366e1 2020-06-08 阅读:162

2

回答
keil工程报错如何解决? 单片机综合应用

在使用STM32L4xx系列的单片机时都遇到了打开keil工程报“Loading PDSC Debug Description Failed for STMicroelectronics STM32Lxxxxxxx”错误,这是怎么回事?

清清河边草 2020-06-07 阅读:153

1

回答

51单片机调试好的计算器在12单片机上1602就无法正常显示,求大佬解答程序直接用普中的#include<reg52.h>                        typedef unsigned char uint8;typedef unsigned int uint16;sbit rw=P1^1;sbit rs=P1^2;sbit e=P1^0;sbit led=P3^7;sbit beep=P2^0;uint8 keynum;uint8 fuhao;//定义具体的那个符号,是加减还是乘除。uint8 flag;        //定义有没有按下符号键,这个是统称long abcd;        //定义运算数据的第一个和第二个及等于的数变量uint8 k; //定义小数点后面显示的位数uint8 biao;uint8 dat1[]={1230x2b-0x30 4560x2d-0x30 7890x2a-0x30 00x01-0x300x3d-0x300x2b-0x30 };//保存显示的数据void delay(uint16 i){//        uint8 a;//        for(a=0;a<12;a++)        while(i--);}void lcdwrc(uint8 c){        delay(1000);        rs=0;        rw=0;        e=0;        P0=c;        e=1;        delay(1000);        e=0;}void lcdwrd(uint8 dat){        delay(1000);        rs=1;        rw=0;        e=0;        P0=dat;        e=1;        delay(1000);        e=0;        rs=0;}void lcdinit(){        delay(1500);        lcdwrc(0x38);        delay(500);        lcdwrc(0x38);        delay(500);        lcdwrc(0x38);        delay(500);        lcdwrc(0x38);        lcdwrc(0x08);        lcdwrc(0x01);        lcdwrc(0x06);        lcdwrc(0x0c);        key=0;        num=0;        flag=0;        fuhao=0;        a=0;        b=0;        c=0;        d=0;        biao=0;        led=0;}void keyscan(){        P1=0xfe;   //令第一行为0,然后判断是哪一列按下        if(P1!=0xfe)        {                delay(1000);                if(P1!=0xfe)                {                        key=P1&0xf0;                        switch(key)                        {                                case 0xe0: num=0;break;          //1                                case 0xd0: num=1;break;          //2                                case 0xb0: num=2;break;          //3                                case 0x70: num=3;break;          //加                        }                }                while(P1!=0xfe);                if(num==0||num==1||num==2)         //确认第一行的数123                {                        if(flag==0)         //没有按下符号键                        {                                //led=1;                                a=a*10+dat1[num];                                }                        else                        {                                //led=1;                                b=b*10+dat1[num];                        }                                }                if(num==3)                {                        //led=0;                        flag=1;                        fuhao=1;//加号+                        }                lcdwrd(0x30+dat1[num]);        }        P1=0xfd;                                //令第二行为0,判断是哪一列按下        if(P1!=0xfd)        {                delay(1000);                if(P1!=0xfd)                {                        key=P1&0xf0;                        switch(key)                        {                                case 0xe0: num=4;break;          //4                                case 0xd0: num=5;break;          //5                                case 0xb0: num=6;break;          //6                                case 0x70: num=7;break;          //减—                        }                        }                while(P1!=0xfd);                if(num==4||num==5||num==6)                {                        if(flag==0)         //没有按下符号键                        {                                //led=1;                                a=a*10+dat1[num];                                }                        else                        {                                //led=1;                                b=b*10+dat1[num];                        }                                        }                else                {                        flag=1;                        fuhao=2;//带表减号                }                lcdwrd(0x30+dat1[num]);        }        P1=0xfb;                 //令第三行为0,判断哪一列按下        if(P1!=0xfb)        {                delay(1000);                if(P1!=0xfb)                {                        key=P1&0xf0;                        switch(key)                        {                                case 0xe0: num=8;break;          //7                                case 0xd0: num=9;break;          //8                                case 0xb0: num=10;break;  //9                                case 0x70: num=11;break;  //乘*                        }                        }                while(P1!=0xfb);                if(num==8||num==9||num==10)                {                        if(flag==0)         //没有按下符号键                        {                                //led=1;                                a=a*10+dat1[num];                                }                        else                        {                                //led=1;                                b=b*10+dat1[num];                        }                                        }                else                {                        flag=1;                        fuhao=3;//带表乘号*                }                lcdwrd(0x30+dat1[num]);        }        P1=0xf7;                 //令第四行为0,判断哪一列按下        if(P1!=0xf7)        {                delay(1000);                if(P1!=0xf7)                {                        key=P1&0xf0;                        switch(key)                        {                                case 0xe0: num=12;break;  //0                                case 0xd0: num=13;break;  //清除rst                                case 0xb0: num=14;break;  //等号=                                case 0x70: num=15;break;  //除/                        }                        }                while(P1!=0xf7);                switch(num)                {                        case 12:                                         if(flag==0)         //没有按下符号键                                        {                                                //led=1;                                                a=a*10+dat1[num];                                                lcdwrd(0x30);                                                }                                        else                                        {                                                //led=1;                                                b=b*10+dat1[num];                                                lcdwrd(0x30);                                        }                                        break;                                                case 13:                                         lcdwrc(0x01);        //清屏指令                                                                a=0;                                        b=0;                                        flag=0;                                        fuhao=0;                                        break;                        case 15:                                                                flag=1;                                        fuhao=4;                                        lcdwrd(0x2f);//除号/                                        break;                                                                case 14:                                         if(fuhao==1)//加                                        {                                                lcdwrc(0x4f+0x80);                                                lcdwrc(0x04);//设置光标左移,屏幕不移动                                                c=a+b;                                                while(c!=0)         //一位一位显示                                                {                                                        lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置                                                        c=c/10;//取前面的结果数据                                                        }                                                lcdwrd(0x3d); //显示等于号=                                                a=0;                                                b=0;                                                flag=0;                                                fuhao=0;//全部清除为0                                        }                                        if(fuhao==2)   //减                                        {                                                lcdwrc(0x4f+0x80);                                                lcdwrc(0x04);//设置光标左移,屏幕不移动                                                if(a>b)                                                        c=a-b;                                                else                                                        c=b-a;                                                                                                while(c!=0)         //一位一位显示                                                {                                                        lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置                                                        c=c/10;//取前面的结果数据                                                        }                                                if(a<b)        lcdwrd(0x2d); //显示-号                                                lcdwrd(0x3d); //显示等于号=                                                a=0;                                                b=0;                                                flag=0;                                                fuhao=0;//全部清除为0                                        }                                        if(fuhao==3)//乘法                                                        {                                                lcdwrc(0x4f+0x80);                                                lcdwrc(0x04);//设置光标左移,屏幕不移动                                                c=a*b;                                                while(c!=0)         //一位一位显示                                                {                                                        lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置                                                        c=c/10;//取前面的结果数据                                                        }                                                lcdwrd(0x3d); //显示等于号=                                                a=0;                                                b=0;                                                flag=0;                                                fuhao=0;//全部清除为0                                                }                                        if(fuhao==3)//乘法                                                        {                                                lcdwrc(0x4f+0x80);                                                lcdwrc(0x04);//设置光标左移,屏幕不移动                                                c=a*b;                                                while(c!=0)         //一位一位显示                                                {                                                        lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置                                                        c=c/10;//取前面的结果数据                                                        }                                                lcdwrd(0x3d); //显示等于号=                                                a=0;                                                b=0;                                                flag=0;                                                fuhao=0;//全部清除为0                                                }                                        if(fuhao==4)                                        {                                                k=0;                                                lcdwrc(0x4f+0x80);                                                lcdwrc(0x04);//设置光标左移,屏幕不移动                                                c=(long)(((float)a/b)*1000);//强制转换为long。                                                while(c!=0)         //一位一位显示                                                {                                                        k++;                                                        lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置                                                        c=c/10;//取前面的结果数据                                                        if(k==3)                                                        {                                                                lcdwrd(0x2e);                                                                k=0;                                                        }                                                                }                                                if(a/b<0)          //如果a比b小的话那么除的结果最高位是0                                                {                                                        lcdwrd(0x30);                                                        }                                                lcdwrd(0x3d); //显示等号                                                a=0;                                                b=0;                                                flag=0;                                                fuhao=0;//全部清除为0                                        }                                        break;                }        }}void main(){        lcdinit();        lcdwrd(0x31);        while(1)        {                keyscan();                }}

e10dad1f7c0c7c8f 2020-06-07 阅读:89

3

回答

#include<reg51.h>   //包含51单片机寄存器定义的头文件sbit P14=P1^4;      //将P14位定义为P1.4引脚sbit P15=P1^5;      //将P15位定义为P1.5引脚sbit P16=P1^6;      //将P16位定义为P1.6引脚sbit P17=P1^7;      //将P17位定义为P1.7引脚unsigned char code Tab[ ]={0xc00xf90xa40xb00x990x920x820xf80x800x90};    //数字0~9的段码unsigned char keyval;    //定义变量储存按键值/@@**************************************************************函数功能:数码管动态扫描延时**************************************************************/void led_delay(void)     {unsigned char j;for(j=0;j<200;j++);}/@@**************************************************************函数功能:按键值的数码管显示子程序**************************************************************/void display(unsigned char k){P2=0xbf;            //点亮数码管DS6P0=Tab[k/10];       //显示十位led_delay();        //动态扫描延时P2=0x7f;            //点亮数码管DS7P0=Tab[k%10];       //显示个位led_delay();       //动态扫描延时   }/@@**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void)   {unsigned char ij;for(i=0;i<100;i++)for(j=0;j<60;j++);}/@@**************************************************************函数功能:主函数**************************************************************/void main(void){EA=1;                  //开总中断ET0=1;                 //定时器T0中断允许         TMOD=0x01;            //使用定时器T0的模式1TH0=(65536-500)/256;  //定时器T0的高8位赋初值TL0=(65536-500)%256;  //定时器T0的高8位赋初值TR0=1;                //启动定时器T0keyval=0x00;          //按键值初始化为0while(1)                //无限循环{display(keyval);   //调用按键值的数码管显示子程序}}/@@**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1    //定时器T0的中断编号为1,使用第一组寄存器{TR0=0;                  //关闭定时器T0P1=0xf0;                 //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0)      //列线中有一位为低电平“0”,说明有键按下delay20ms();           //延时一段时间、软件消抖if((P1&0xf0)!=0xf0)      //确实有键按下{P1=0xfe;             //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”keyval=1;            //可判断是S1键被按下if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”keyval=2;            //可判断是S2键被按下if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”keyval=3;            //可判断是S3键被按下if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”keyval=4;           //可判断是S4键被按下           P1=0xfd;             //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0)           //如果检测到接P1.4引脚的列线为低电平“0”keyval=5;            //可判断是S5键被按下if(P15==0)             //如果检测到接P1.5引脚的列线为低电平“0”keyval=6;            //可判断是S6键被按下if(P16==0)             //如果检测到接P1.6引脚的列线为低电平“0”keyval=7;            //可判断是S7键被按下if(P17==0)            //如果检测到接P1.7引脚的列线为低电平“0”keyval=8;           //可判断是S8键被按下P1=0xfb;             //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”keyval=9;          //可判断是S9键被按下if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”keyval=10;         //可判断是S10键被按下if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”keyval=11;        //可判断是S11键被按下if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”keyval=12;        //可判断是S12键被按下           P1=0xf7;             //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0)          //如果检测到接P1.4引脚的列线为低电平“0”keyval=13;          //可判断是S13键被按下if(P15==0)           //如果检测到接P1.5引脚的列线为低电平“0”keyval=14;         //可判断是S14键被按下if(P16==0)          //如果检测到接P1.6引脚的列线为低电平“0”keyval=15;        //可判断是S15键被按下if(P17==0)          //如果检测到接P1.7引脚的列线为低电平“0”keyval=16;        //可判断是S16键被按下}TR0=1;                    //开启定时器T0TH0=(65536-500)/256;  //定时器T0的高8位赋初值TL0=(65536-500)%256;  //定时器T0的高8位赋初值           }

602b56b0268d0c5c 2020-06-07 阅读:153

1

回答

在这个论坛有下一些代码,但是测试的时候不知道是晶振,还是串口,还是C#的上位机问题,测试的都是前面和后面总有一两个字母数字不一样(看图片),而且代码逻辑是刷一下能上传8位,而我刷一下只能上4位

9fbab08cefd6e0bb 2020-06-07 阅读:121

5

回答

我是能51单片机做那我就一定用51单片机,因为我感觉51单片机直接操作寄存器应用比较灵活,如果实在不能满足需求我才会考虑其他的单片机,对51单片机我是情有独钟的;但是有一些人会说做项目看需求选择单片机的,但是有些人不管什么简单复杂的通通用STM32来做,还有的还歧视8位的单片机,说速度慢,淘汰了,抗干扰差等等这些理由排挤8位的单片机,并且抢占8位单片机的市场?

9cdcc1338bde66cc 2020-06-06 阅读:112

11

回答

最近调程序发现和C语言有点不同,不知道什么原因。。

547da6d1099da677 2020-06-06 阅读:417
  • 帮助人数
  • 0
  • 获得赞数
  • 0
  • 一周积分
  • 0

每日任务

提问一次
100IC币
回答一次
30IC币

问题达人换一批

本月问答IC币兑换

排名
用户名
问答积分
可兑换IC币
1
938
20000
2
780
20000
3
668
15000
4
656
15000
5
486
10000
6
468
10000
7
372
8000
8
322
8000
9
322
8000
10
210
6000
11
166
4000
12
126
4000
13
120
4000
14
110
4000
15
86
2000
16
76
2000
17
68
2000
18
66
2000
19
66
2000
20
62
2000
21
56
2000
22
52
2000
23
46
1000
24
44
1000
25
38
1000
26
36
1000
27
34
1000
28
30
1000
29
26
0
< 123 >