头像-8432

qiuqiu

  • 山东省青岛市
  • EMC/EMI
  • 通讯广播

个人成就

获得 12 次赞

帮助过256人

请问如何确定一个延时程序的延时时间呢?

请问如何确定一个晶振12M的单片机程序中延时程序延时的时间呢? 比如说12M晶振,晶振周期1/12微妙,一个机器周期包含12个晶振周期,所以12M晶振时机器周期=12x(1/12)微秒=1微秒。 那么1MS的延时程序为: void delay(uint z)//延时函数1ms {         uint xy;         for(x=z;x>0;x--);                 for(y=110;y>0;y--); } 请问这个y=110里这个110是怎么来的? 谢谢大家指点

FPGA复位按键失效,请问是怎么回事??

我把SD卡读写的例程修改了部分,当SD卡初始化完成后LED点亮,按下复位按键后熄灭。测试中LED可以亮,但是按下复位按键后LED灯还是亮的,请问为什么不熄灭呢?

关于STM32的模拟IIC通信实验

QQ截图20201123112548.png (26.78 KB 下载次数: 0) 下载附件 昨天 11:26 上传 在IIC实验中的等待应答型号的函数中,在1出把SDA设置成输入模式,紧接着在2处将SDA输出高电平。 请问为什么要这样做呢,还有就是SDA已经先配置成输入模式,还能输出高电平吗?

求助,这个交通灯代码秒表走的很快,应该怎么修改

#include <reg51.h> #define uchar unsigned char #define uint  unsigned int uchar data DirectVal[4];                                        //秒显示的变量 uchar data DefaultVal_DX=60;                          //东西数默认 uchar data DefaultVal_NB=90;                        //南北默认值 uchar data setTime_DX=60;                //设置东西方向的时间 uchar data setTime_NB=90;                //设置南北方向的时间 int n; uchar data CountCount1; sbit  k4=P3^1;                //禁止 sbit  k1=P3^5;                //时间加 sbit  k2=P3^6;                //时间减 sbit  k3=P3^7;     //切换方向 sbit  SPEAKER = P3^2; sbit RED_NB=P2^6;                //南北红灯标志 sbit YELLOW_NB=P2^5;        //南北黄灯标志 sbit GREEN_NB=P2^4;     //南北绿灯标志 sbit RED_DX=P2^3;                //东西红灯标志 sbit YELLOW_DX=P2^2;        //东西黄灯标志 sbit GREEN_DX=P2^1;                //东西绿灯标志                 bit set=0;                                //调时方向切换键标志 =1时,南北,=0时,东西 bit dx_nb=0;                        //东西南北控制位 bit Shanshuo=0;                        //闪烁标志位 uchar code TABLE[11]={        //共阴极字型码         0x3f  //--0         0x06  //--1         0x5b  //--2         0x4f  //--3         0x66  //--4         0x6d  //--5         0x7d  //--6         0x07  //--7         0x7f  //--8         0x6f  //--9         0x00   //--NULL }; void key();                                        //按键扫描子程序 void SegmentDisplay();                                //显示子程序 void Buzzer(); void delaylms(int ms)                //延时子程序 {         uint jk;         for(j=0;j<ms;j++)                        //延时ms            for(k=0;k<124;k++);                //大约1毫秒的延时 } /@@*定时器0初始化*/ void Timer0Init(){         TMOD |= 0X01;         TH0 = 0X4B;         TL0 = 0XFC;         ET0 = 1;         EA = 1;         TR0 = 1; } /@@*定时器1初始化*/ void Timer1Init(){         TMOD |= 0X10;         TH1 = 0X4B;         TL1 = 0XFC;         ET1 = 1;         EA = 1;         TR1 = 1; } /@@*主程序*/ void main() {         Timer0Init();         Timer1Init();         TR1 = 0;         P2=0Xc3;                                        // 默认东西绿灯,南北红灯灯      DefaultVal_NB=DefaultVal_DX+5; //设置南北通行时间比东西多5秒         while(1)                        {                          key();                 SegmentDisplay();         }        } /@@*按键扫描子程序*/ void key(void){         if(k1!=1)        {                 delaylms(10);                 if(k1!=1){                   TR0=0;                         Shanshuo=0;                         P2=0x00;                         TR1=0;                         if(set==0)//设置键按下                                 setTime_DX++;//南北加1                         else                                 setTime_NB++;//东西加1                         if(setTime_NB==100)                                 setTime_NB=1;                         if(        setTime_DX==100)                                 setTime_DX=1;//加到100置1                         DefaultVal_NB=setTime_NB ;//设置的数值赋给东西南北                         DefaultVal_DX=setTime_DX;                                          do        {                                 SegmentDisplay();                         }while(k1!=1);//松手检测                 }         }         if(k2!=1)        {                                                        //当K2(时间减)按键按下时                 delaylms(10);                 if(k2!=1){                          TR0=0;                         Shanshuo=0;                         P2=0x00;                         TR1=0;                         if(set==0)                                 setTime_DX--;                         else                                 setTime_NB--;                         if(setTime_NB==0)                                 setTime_NB=99;                                if(        setTime_DX==0 )                                 setTime_DX=99;                         DefaultVal_NB=setTime_NB ;                         DefaultVal_DX=setTime_DX;                   do{                                          SegmentDisplay();                         }                         while(k2!=1);                 }         }         if(k3!=1) {                 delaylms(10);                 if(k3!=1){                                             TR0=0;                         set=!set;                         TR1=0;                         dx_nb=set;                         do{                                 SegmentDisplay();                         }                                                        while(k3!=1);                 }         }                if(k4!=1){                 delaylms(10);                 if(k4!=1){                         TR0=0;                         P2=0x00;                         RED_DX=1;                         RED_NB=1;                         TR1=0;                         DefaultVal_DX=30;                         DefaultVal_NB=30;                         TR0 = 1;                         do{                                 SegmentDisplay();                                 SPEAKER = !SPEAKER;                                 if((DefaultVal_DX == 0)&&(DefaultVal_NB==0)){                                         SPEAKER = 1;                                 }                         }                                while(k4!=1);                 }         } } /@@*数码管显示程序*/ void SegmentDisplay(void) {                        DirectVal[1]=DefaultVal_NB/10;                 // 东西秒十位         DirectVal[2]=DefaultVal_NB%10;                 // 东西秒个位         DirectVal[3]=DefaultVal_DX/10;                 // 南北秒十位         DirectVal[0]=DefaultVal_DX%10;                 // 南北秒个位                        P1=0xff;         P0=0x00;         P1=0xfe;         P0=TABLE[DirectVal[1]];                delaylms(1);         P1=0xff;         P0=0x00;                                                            P1=0xfd;         P0=TABLE[DirectVal[2]];         delaylms(1);         P1=0xff;         P0=0x00;         P1=0Xfb;         P0=TABLE[DirectVal[3]];         delaylms(1);         P1=0xff;         P0=0x00;         P1=0Xf7;         P0=TABLE[DirectVal[0]];         delaylms(1); } void time0(void) interrupt 1 using 1 {         TH0=0X4b;         TL0=0Xfc;         TR0=1;         Count++;         if(Count==10){                 if((DefaultVal_NB<=5)&&(dx_nb==0)&&(Shanshuo==1)){//东西黄灯闪                                        GREEN_DX=0;                         YELLOW_DX=0;                 }                                                             if((DefaultVal_DX<=5)&&(dx_nb==1)&&(Shanshuo==1)){//南北黄灯闪                                        GREEN_NB=0;                         YELLOW_NB=0;                 }                }                if(Count==20){                 Count=0;                 DefaultVal_DX--;                                                //东西时间减1                 DefaultVal_NB--;                                                //南北时间减1                 if((DefaultVal_NB<=5)&&(dx_nb==0)&&(Shanshuo==1)){//东西黄灯闪                                        GREEN_DX=0;                         YELLOW_DX=1;                 }                                                             if((DefaultVal_DX<=5)&&(dx_nb==1)&&(Shanshuo==1)){//南北黄灯闪                                        GREEN_NB=0;                         YELLOW_NB=1;                 }                                                                                 if(DefaultVal_DX==0&&DefaultVal_NB==5){//当东西倒计时到0时,重置5秒,用于黄灯闪烁时间                            DefaultVal_DX=5;                         Shanshuo=1;                 }                 if(DefaultVal_NB==0&&DefaultVal_DX==5){//当南北倒计时到0时,重置5秒,用于黄灯闪烁时间                            DefaultVal_NB=5;                         Shanshuo=1;                 }                 if(dx_nb==0&&DefaultVal_NB==0){//当黄灯闪烁时间倒计时到0时,                         P2=0x00;//重置东西南背方向的红绿灯                         GREEN_NB=1;                         RED_DX=1;                         dx_nb=!dx_nb;                         Shanshuo=0;                         DefaultVal_NB=setTime_NB;        //重赋南北方向的起始值                         DefaultVal_DX=setTime_NB+5;//重赋东西方向的起始值                 }                                if(dx_nb==1&&DefaultVal_DX==0){        //当黄灯闪烁时间到                         P2=0X00;                                        //重置东西南北的红绿灯状态                         GREEN_DX=1;                                //东西绿灯亮                         RED_NB=1;                                        //南北红灯亮                         dx_nb=!dx_nb;                         Shanshuo=0;                         DefaultVal_DX=setTime_DX;                        //重赋东西方向的起始值                         DefaultVal_NB=setTime_DX+5;                //重赋南北方向的起始值                 }         }        } void time1(void) interrupt 3{         TH1=0X4b;         TL1=0Xfc;         Count1++;         if(Count1==10)         {                 YELLOW_NB=0;//南北黄灯灭                 YELLOW_DX=0;//东西黄灯灭         }         if(Count1==20){                 Count1=0;                 YELLOW_NB=1;//南北黄灯亮                 YELLOW_DX=1;//东西黄灯亮         }        }

设计一个0-100v,1000w电源采用什么方式好。

设计一个1000w,0-100v电源采用什么拓扑好

为什么我用DB9口发数据给被控设备没有响应

发现一个很奇怪的问题,为什么我用DB9口发数据给被控设备没有响应,然后该串口发给PC上的串口助手后,再通过串口助手发给被控设备却能够控制了,想不明白为啥,本质上DB9口发送的数据和串口助手发的数据是一样的,为啥DB9口串口就不行了?(开拓者板 COM2串口通信)

片上稳压器和片内稳压器的作用

什么是片上稳压器和片内稳压器?他们的作用是什么?

74HC573驱动数码管发热

做了个电路用74HC573驱动,一位0.8英寸的数码管竟然发热了,显示1还可以,显示8的时候 热量就不能接受了,是不是要加限流电阻 了,加多少合适