虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

uchar

  • 基于8051+Proteus仿真案例

    基础程序设计 01 闪烁的LED  /*  名称闪烁的LED   说明LED按设定的时间间隔闪烁 */  #include<reg51.h>  #define uchar unsigned char  #define uint unsigned int  sbit LED=P1^0;  //延时  void DelayMS(uint x)  {   uchar i;   while(x--) {    for(i=0;i<120;i++);   }  }  //主程序  void main() {   while(1) {    LED=~LED;    DelayMS(150);   }  } 

    标签: 基于8051仿真 基于Proteus仿真 基于8051+Proteus仿真

    上传时间: 2016-09-19

    上传用户:xinhoujue

  • 51单片机C语言程序设计Proteus仿真实训

    基础程序设计 01 闪烁的LED  /*  名称闪烁的LED   说明LED按设定的时间间隔闪烁  */  #include<reg51.h>  #define uchar unsigned char  #define uint unsigned int  sbit LED=P1^0;  //延时  void DelayMS(uint x) {   uchar i;   while(x--) {    for(i=0;i<120;i++);   } }  //主程序  void main() {   while(1)  {    LED=~LED;    DelayMS(150);   }  } 

    标签: 51单片机C语言程序设计 51单片机C语言程序设计Proteus仿真实训

    上传时间: 2016-09-19

    上传用户:xinhoujue

  • 12345

    /****************temic*********t5557***********************************/    #include   <at892051.h>     #include   <string.h>    #include   <intrins.h>     #include   <stdio.h>     #define    uchar    unsigned char     #define    uint     unsigned int     #define    ulong    unsigned long     //STC12C2051AD的SFR定义     sfr  WDT_CONTR = 0xe1;//stc2051的看门狗??????     /**********全局常量************/    //写卡的命令     #define    write_command0       0//写密码     #define    write_command1       1//写配置字     #define    write_command2       2//密码写数据     #define    write_command3       3//唤醒     #define    write_command4       4//停止命令     #define    TRUE       1     #define    FALSE      0     #define    OK         0     #define    ERROR      255     //读卡的时间参数us     #define ts_min          250//270*11.0592/12=249//取近似的整数     #define ts_max          304//330*11.0592/12=304     #define t1_min          73//90*11.0592/12=83:-10调整     #define t1_max          156//180*11.0592/12=166     #define t2_min          184//210*11.0592/12=194     #define t2_max          267//300*11.0592/12=276     //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/     sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13     sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE     PIN=6     sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut  PIN=2     sbit wtd_sck = P1^7;//SPI总线     sbit wtd_si = P1^3;    sbit wtd_so = P1^2;    sbit iic_data = P1^2;//lcd IIC     sbit iic_clk = P1^7;    sbit led_light = P1^6;//测试绿灯     sbit led_light1 = P1^5;//测试红灯     sbit led_light_ok  = P1^1;//读卡成功标志     sbit fengmingqi = P1^5;    /***********全局变量************************************/       uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码             //uchar idata card_snr[4];   //配置字     uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7};     //存储卡上用户数据(1-7)7*4=28     uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram     uchar command; //第一个命令     uchar command1;//     //uint  temp;     uchar j,i;    uchar myaddr = 8;    //uchar ywqz_count,time_count;             //ywqz jishu:     uchar bdata DATA;    sbit BIT0 = DATA^0;    sbit BIT1 = DATA^1;    sbit BIT2 = DATA^2;    sbit BIT3 = DATA^3;    sbit BIT4 = DATA^4;    sbit BIT5 = DATA^5;    sbit BIT6 = DATA^6;    sbit BIT7 = DATA^7;    uchar bdata DATA1;    sbit BIT10 = DATA1^0;    sbit BIT11 = DATA1^1;    sbit BIT12 = DATA1^2;    sbit BIT13 = DATA1^3;    sbit BIT14 = DATA1^4;    sbit BIT15 = DATA1^5;    sbit BIT16 = DATA1^6;    sbit BIT17 = DATA1^7;    bit i_CurrentLevel;//i_CurrentLevel  BIT 00H(Saves current level of OutPut pin of U2270B)     bit timer1_end;    bit read_ok = 0;    //缓存定时值,因用同一个定时器     union HLint { uint W;    struct   {    uchar H;uchar L;   }   B; };//union HLint idata a     union HLint data a;    //缓存定时值,因用同一个定时器     union HLint0 { uint W;    struct {   uchar H;   uchar L; } B; };//union HLint idata a     union HLint0 data b;    /**********************函数原型*****************/    //读写操作     void f_readcard(void);//全部读出1~7 AOR唤醒     void f_writecard(uchar x);//根据命令写不同的内容和操作     void f_clearpassword(void);//清除密码     void f_changepassword(void);//修改密码     //功能子函数     void write_password(uchar data *data p);//写初始密码或数据     void write_block(uchar x,uchar data *data p);//不能用通用指针     void write_bit(bit x);//写位     /*子函数区*****************************************************/    void delay_2(uint x)    //延时,时间x*10us@12mhz,最小20us@12mhz     {    x--; x--;    while(x)    {      _nop_();      _nop_();      x--;    }    _nop_();//WDT_CONTR=0X3C;不能频繁的复位     _nop_();    }    /////////////////////////////////////////////////////////////////////     void initial(void)    {    SCON = 0x50; //串口方式1,允许接收     //SCON  =0x50;     //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1,     //REN=1允许接收     TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位)     TCON = 0x40; //设定时器1 允许开始计时(IT1=1)     TH1 = 0xfD;  //FB 18.432MHz 9600 波特率     TL1 = 0xfD;  //fd 11.0592 9600     IE = 0X90;     //EA=ES=1     TR1 = 1;     //启动定时器     WDT_CONTR = 0x3c;//使能看门狗     p_U2270B_Standby = 0;//单电源     PCON = 0x00;    IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0     led_light1 = 1;    led_light = 0;    p_U2270B_OutPut = 1;    }    /************************************************/    void f_readcard()//读卡     {    EA = 0;//全关,防止影响跳变的定时器计时     WDT_CONTR = 0X3C;//喂狗     p_U2270B_CFE = 1;//      delay_2(232);  //>2.5ms            /*   //   aor    用唤醒功能来防碰撞   p_U2270B_CFE = 0; delay_2(18);//start gap>150us   write_bit(1);//10=操作码读0页   write_bit(0);       write_password(&bankdata[24]);//密码block7   p_U2270B_CFE =1 ;//    delay_2(516);//编程及确认时间5.6ms   */    WDT_CONTR = 0X3C;//喂狗     led_light = 0;    b.W = 0;    while(!(read_ok == 1))    {             //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断?              while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1       TR0 = 1;      //deng xia jiang       while(p_U2270B_OutPut);//等待下降沿       TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//定时器晚启动10个周期       //同步头       if((324 < a.W) && (a.W < 353)) ;//检测同步信号1                  else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //等待上升沿        while(!p_U2270B_OutPut);   TR0 = 0;   a.B.H = TH0;   a.B.L = TL0;   TH0 = TL0 = 0;   TR0 = 1;//b.N1<<=8;            if(a.B.L < 195);//0.5p       else     {     TR0 = 0;     TH0 = TL0 = 0;     goto read_error;    }      //读0~7块的数据       for(j = 0;j < 28;j++)      {       //uchar i;                  for(i = 0;i < 16;i++)//8个位        {        //等待下降沿的到来         while(p_U2270B_OutPut);                TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;              if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;//先左移再赋值          b.B.L += 0xc0;                             i++;        }        else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p         {         b.W >>= 1;         b.B.L += 0x80;                           }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;        while(!p_U2270B_OutPut);//上升                   TR0 = 0;     a.B.H = TH0;     a.B.L = TL0;     TH0 = TL0 = 0;     TR0 = 1;                      if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P          {         b.W >>= 2;         i++;        }        else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P         //else if(!(a.W==0))         {         b.W >>= 1;         //temp+=0x00;          //led_light1=0;led_light=1;delay_2(40000);         }        else      {      TR0 = 0;      TH0 = TL0 = 0;      goto read_error;     }        i++;       }       //取出奇位        DATA = b.B.L;       BIT13 = BIT7;    BIT12 = BIT5;    BIT11 = BIT3;    BIT10 = BIT1;       DATA = b.B.H;       BIT17 = BIT7;    BIT16 = BIT5;    BIT15 = BIT3;    BIT14 = BIT1;       bankdata[j] = DATA1;      }              read_ok = 1;//读卡完成了     read_error:    _nop_();    }       }    /***************************************************/    void f_writecard(uchar x)//写卡     {    p_U2270B_CFE = 1;    delay_2(232);  //>2.5ms            //psw=0 standard write     if (x == write_command0)//写密码:初始化密码     {      uchar i;      uchar data *data p;      p = cominceptbuff;      p_U2270B_CFE = 0;   delay_2(31);//start gap>330us       write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0       for(i = 0;i < 35;i++)      {       write_bit(1);//写数据位1       }      p_U2270B_CFE = 1;      led_light1 = 0;   led_light = 1;   delay_2(40000);//测试使用       //write_block(cominceptbuff[4],p);       p_U2270B_CFE = 1;      bankdata[20] = cominceptbuff[0];//密码存入       bankdata[21] = cominceptbuff[1];      bankdata[22] = cominceptbuff[2];      bankdata[23] = cominceptbuff[3];    }    else if (x == write_command1)//配置卡参数:初始化     {      uchar data *data p;      p = cominceptbuff;      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_bit(0);//写锁定位0               write_block(cominceptbuff[4],p);      p_U2270B_CFE=  1;    }    //psw=1  pssword mode     else if(x == write_command2)  //密码写数据    {      uchar data*data p;      p = &bankdata[24];      write_bit(1);//写操作码1:10       write_bit(0);//写操作码0       write_password(p);//发口令       write_bit(0);//写锁定位0       p = cominceptbuff;      write_block(cominceptbuff[4],p);//写数据            }    else if(x == write_command3)//aor    //唤醒 {      //cominceptbuff[1]操作码10 X xxxxxB       uchar data *data p;      p = cominceptbuff;      write_bit(1);//10       write_bit(0);             write_password(p);//密码       p_U2270B_CFE = 1;//此时数据不停的循环传出     }    else //停止操作码     {      write_bit(1);//11       write_bit(1);             p_U2270B_CFE = 1;         }    p_U2270B_CFE = 1;    delay_2(560);//5.6ms     }    /************************************/    void f_clearpassword()//清除密码     {    uchar data *data p;    uchar i,x;          p = &bankdata[24];//原密码     p_U2270B_CFE = 0; delay_2(18);//start gap>150us     //操作码10:10xxxxxxB     write_bit(1);    write_bit(0);              for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x00,p);//写新配置参数:pwd=0             //密码无效:即清除密码     DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {    write_bit(BIT7);    DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /*********************************/    void f_changepassword()//修改密码            {       uchar data *data p;    uchar i,x,addr;    addr = 0x07;//block7     p = &Nkey_a[0];//原密码     DATA = 0x80;//操作码10:10xxxxxxB     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    for(x = 0;x < 4;x++)//发原密码     {             DATA = *(p++);      for(i = 0;i < 8;i++)      {       write_bit(BIT7);       DATA >>= 1;      }    }    write_bit(0);//锁定位0:0     p = &cominceptbuff[0];    write_block(0x07,p);//写新密码     p_U2270B_CFE = 1;    bankdata[24] = cominceptbuff[0];//密码存入     bankdata[25] = cominceptbuff[1];    bankdata[26] = cominceptbuff[2];    bankdata[27] = cominceptbuff[3];    DATA = 0x00;//停止操作码00000000B     for(i = 0;i < 2;i++)    {      write_bit(BIT7);      DATA <<= 1;    }    p_U2270B_CFE = 1;       delay_2(560);//5.6ms     }    /***************************子函数***********************************/    void write_bit(bit x)//写一位     {    if(x)    {      p_U2270B_CFE = 1;   delay_2(32);//448*11.0592/120=42延时448us       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写1     }    else    {      p_U2270B_CFE = 1;   delay_2(92);//192*11.0592/120=18       p_U2270B_CFE = 0;   delay_2(28);//280*11.0592/120=26写0     }    }    /*******************写一个block*******************/    void write_block(uchar addr,uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//block0数据     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }    DATA = addr <<= 5;//0地址     for(i = 0;i < 3;i++)    {      write_bit(BIT7);      DATA <<= 1;    }                   }    /*************************************************/    void write_password(uchar data *data p)    {    uchar i,j;        for(i = 0;i < 4;i++)//     {             DATA = *(p++);      for(j = 0;j < 8;j++)      {       write_bit(BIT0);       DATA >>= 1;      }    }        }   /*************************************************/   void main()    {    initial();    TI = RI = 0;    ES = 1;    EA = 1;  delay_2(28);   //f_readcard();     while(1) {   f_readcard();      //读卡   f_writecard(command1);  //写卡    f_clearpassword();   //清除密码     f_changepassword();    //修改密码 } }

    标签: 12345

    上传时间: 2017-10-20

    上传用户:my_lcs

  • 一个按键控制的 10 级变速跑马灯试验

    在本课中,我们要用一个按键来实现跑马灯的 10 级调速。这又会涉及到键的去抖的问 题。  本课的试验结果是,每按一次按键,跑马速度就降低一级,共 10 级。  这里我们又增加了一个变量 speedlever,来保存当前的速度档次。  在按键里的处理中,多了当前档次的延时值的设置。  请看程序:  ――――――――――――――――  #define uchar unsigned char //定义一下方便使用  #define uint unsigned int  #define ulong unsigned long  #include <reg52.h> //包括一个 52 标准内核的头文件    sbit P10 = P1^0; //头文件中没有定义的 IO 就要自己来定义了  sbit P11 = P1^1;  sbit P12 = P1^2;  sbit P13 = P1^3;  sbit K1= P3^2;    bit ldelay=0; //长定时溢出标记,预置是 0  uchar speed=10; //设置一个变量保存默认的跑马灯的移动速度  uchar speedlever=0; //保存当前的速度档次    char code dx516[3] _at_ 0x003b;//这是为了仿真设置的  //一个按键控制的 10 级变速跑马灯试验  void main(void) // 主程序  {   uchar code ledp[4]={0xfe,0xfd,0xfb,0xf7};//预定的写入 P1 的值   uchar ledi; //用来指示显示顺序   uint n;     RCAP2H =0x10; //赋 T2 的预置值 0x1000,溢出 30 次就是 1 秒钟   RCAP2L =0x00;   TR2=1; //启动定时器   ET2=1; //打开定时器 2 中断   EA=1; //打开总中断     while(1) //主程序循环   {   if(ldelay) //发现有时间溢出标记,进入处理   {   ldelay=0; //清除标记   P1=ledp[ledi]; //读出一个值送到 P1 口   ledi++; //指向下一个   if(ledi==4)   {   ledi=0; //到了最后一个灯就换到第一个   }   }   if(!K1) //如果读到 K1 为 0   {   for(n=0;n<1000;n++); //等待按键稳定   while(!K1); //等待按键松开   for(n=0;n<1000;n++); //等待按键稳定松开     speedlever++;   if(speedlever==10)speedlever=0;   speed=speedlever*3; //档次和延时之间的预算法则,也可以用查表方法,做出 不规则的法则   }   }  }  //定时器 2 中断  timer2() interrupt 5  {   static uchar t;   TF2=0;   t++;     if((t==speed)||(t>30)) //比较一个变化的数值,以实现变化的时间溢出,同时限制了最慢速 度为 1 秒   {   t=0;   ldelay=1;//每次长时间的溢出,就置一个标记,以便主程序处理   }  }  ――――――――――――――――――――――   请打开 lesson11 目录的工程,编译,运行,看结果:  按 K1,速度则降低一次,总共 10 个档次。 

    标签: 10 按键控制 变速 跑马灯

    上传时间: 2017-11-06

    上传用户:szcyclone

  • 模拟 PWM 输出控制灯的 10 个亮度级别

    LED 一般是恒流操作的,如何改变 LED 的亮度呢?答案就是 PWM 控制。在一定的 频率的方波中,调整高电平和低电平的占空比,即可实现。比如我们用低电平点亮一个 LED 灯,我们假设把一个频率周期分为 10 个时间等份,如果方波中的高低电平占空比是 9:1, 这是就是一个比较暗的亮度,如果方波中高低电平占空比是 10:0,这时,全部是高电平, 灯是灭的。如果占空比是 5:5,就是一个中间亮度,如果高低比是 1:9,是一个比较亮的 亮度,如果高低是 0:10,这时全部是低电平,就是最亮的。  实际上应用中,电视屏幕墙中的几十百万 LED 象素都是这样控制的,而且每一个象素 都有红绿蓝 3 个 LED,每个 LED 可以变化的亮度是几百到几万或者更多的级别,以实现真 彩色的显示。还有在您的手机中,背光灯的亮度如果是可以变化的,也应该是这种工作方式。 目前的城市彩灯也有很多都使用了 LED,需要控制亮度是也是 PWM 控制。  下面来分析我们的例程,在这个例程中,我们将定时器 2 溢出定为 1/1200 秒。每 10 次脉冲输出一个 120HZ 频率。这每 10 次脉冲再用来控制高低电平的 10 个比值。这样,在 每个 1/120 秒的方波周期中,我们都可以改变方波的输出占空比,从而控制 LED 灯的 10 个 级别的亮度。  为什么输出方波的频率要 120HZ 这么高?因为如果频率太低,人眼就会看到闪烁感 觉。一般起码要在 60HZ 以上才感觉好点,120HZ 就基本上看不到闪烁,只能看到亮度的变 化了。  下面请看程序,程序中有比较多的注释:  ―――――――――――――――――――――――  #define uchar unsigned char //定义一下方便使用  #define uint unsigned int  #define ulong unsigned long  #include <reg52.h> //包括一个 52 标准内核的头文件    sbit P10 = P1^0; //要控制的 LED 灯  sbit K1= P3^2; //按键 K1    uchar scale;//用于保存占空比的输出 0 的时间份额,总共 10 份    char code dx516[3] _at_ 0x003b;//这是为了仿真设置的  //模拟 PWM 输出控制灯的 10 个亮度级别  void main(void) // 主程序  {   uint n;     RCAP2H =0xF3; //赋 T2 的预置值,溢出 1 次是 1/1200 秒钟   RCAP2L =0x98;   TR2=1; //启动定时器   ET2=1; //打开定时器 2 中断   EA=1; //打开总中断   while(1) //程序循环   { ;//主程序在这里就不断自循环,实际应用中,这里是做主要工作   for(n=0;n<50000;n++); //每过一会儿就自动加一个档次的亮度   scale++;   if(scale==10)scale=0;   }  }  //1/1200 秒定时器 2 中断  timer2() interrupt 5  {   static uchar tt; //tt 用来保存当前时间在一秒中的比例位置   TF2=0;     tt++;   if(tt==10) //每 1/120 秒整开始输出低电平   {   tt=0;     if(scale!=0) //这里加这一句是为了消除灭灯状态产生的鬼影   P10=0;   }     if(scale==tt) //按照当前占空比切换输出高电平   P10=1;    }  ――――――――――――――――――  在主程序中,每延时一段时间,就自动换一个占空比,以使亮度自动变化,方便观察。  编译,运行,看结果。  可以看到,LED 的亮度以每种亮度 1 秒左右不断变化,共有 10 个级别。

    标签: PWM 10 模拟 控制灯 亮度 输出

    上传时间: 2017-11-06

    上传用户:szcyclone

  • 矩阵式键盘

    include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20)   { aa=0; temp++; if(temp==99999)    { temp=0;    } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10;   } display(wang,qian, bai,shi,ge); } }   void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }   void display(uint wang,uint qian,uint bai,uint shi,uint ge) {         dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1);   dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1);           dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1);   dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1);   dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); }   void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; }   void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; } include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20)   { aa=0; temp++; if(temp==99999)    { temp=0;    } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10;   } display(wang,qian, bai,shi,ge); } }   void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }   void display(uint wang,uint qian,uint bai,uint shi,uint ge) {         dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1);   dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1);           dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1);   dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1);   dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); }   void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; }   void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; } include<reg52.h> #define uint unsigned int #define uchar unsigned char uint temp,aa,wang,qian,bai,shi,ge; sbit dula=P2^6; sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display( uint wang,uint qian,uint bai,uint shi,uint ge); void delay(uint z); void init(); void main() { init();//初始化子程序 while(1) { if(aa==20)   { aa=0; temp++; if(temp==99999)    { temp=0;    } wang=temp/10000; qian=(temp-wang*10000)/1000; bai=(temp-wang*10000-qian*1000)/100; shi=(temp-wang*10000-qian*1000-bai*100)/10; ge=temp%10;   } display(wang,qian, bai,shi,ge); } }   void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }   void display(uint wang,uint qian,uint bai,uint shi,uint ge) {         dula=1; P0=table[wang]; dula=0; P0=0xff; wela=1; P0=0xfe; wela=0; delay(1);   dula=1; P0=table[qian]; dula=0; P0=0xff; wela=1; P0=0xfd; wela=0; delay(1);           dula=1; P0=table[bai]; dula=0; P0=0xff; wela=1; P0=0xfb; wela=0; delay(1);   dula=1; P0=table[shi]; dula=0; P0=0xff; wela=1; P0=0xf7; wela=0; delay(1);   dula=1; P0=table[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delay(1); }   void init() { wela=0; dula=0; temp=0; TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; }   void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; }

    标签: 矩阵式键盘

    上传时间: 2021-12-18

    上传用户:2590813506

  • 宏晶 STC15F2K60S2开发板配套软件源码 基础例程30例

    宏晶 STC15F2K60S2开发板配套软件源码 基础例程30例/**********************基于STC15F2K60S2系列单片机C语言编程实现使用如下头文件,不用另外再包含"REG51.H"#include <STC15F2K60S2.h>***********************/#include "STC15F2K60S2.H"//#include "REG51.H" //sfr P4   = 0xC0;#define  uint unsigned int  #define  uchar unsigned char  /**********************引脚别名定义***********************/sbit SEL=P4^3; // LED和数码管选择引脚 高:LED有效 低:数码管有效 // SEL连接的单片机引脚必须为带有上拉电阻的引脚 或将其直接连接VCC#define data P2 // 数据输入定义  /**********************函数名称:Delay_1ms功能描述:延时入口参数:unsigned int t 表示要延时t个1ms 出口参数:无备注:通过参数t,控制延时的时间长短***********************/void Delay_1ms(uint t){ uchar j;   for(;t>0;t--)       for(j=110;j>0;j--)     ;}/**********************函数名称:Led_test功能描述:对8个二极管进行测试,依次轮流点亮8个二极管入口参数:无出口参数:无备注:  ***********************/void Led_test(){    uchar G_value=0x01; // 给变量赋初值 SEL=1;    //高电平LED有效   while(1) { data=G_value; Delay_1ms(10000); G_value=G_value<<1; if(G_value==0x00) { data=G_value; Delay_1ms(10000); G_value=0x01;      } }}/***********************主函数************************/void main(){ ///////////////////////////////////////////////// //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为 //      高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用 //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2 //        P2.3/P2.7/P3.7/P4.2/P4.4/P4.5 ///////////////////////////////////////////////// P4M1=0x00; P4M0=0x00; P2M0=0xff; P2M1=0x00; //将P2设为推挽 Led_test();  }

    标签: STC15F2K60S2

    上传时间: 2022-05-03

    上传用户:

  • 51单片机键盘模拟音量数码管显示源码

    本程序所用的原理图下载: 点这里 ,单片机芯片使用的stc89c52;找到相应部分即可.这是一整个单片机开发板的电路图其他的忽略.hex文件及其工程文件以下是通过测试的源代码:/**功能:使用矩阵按键使得按键按下时数码管上显示各自对应的数字(0 ~ F);*日期:2018-05-03-17:51;*特别说明:本程序代码已经通过调试,仅供学习使用;**//***********AT89C52-RC 单片机51hei 实验板***********//*****************51hei-开发板*********************/#include typedef unsigned int uint;typedef unsigned char uchar;

    标签: 51单片机

    上传时间: 2022-07-23

    上传用户:

  • CC1101接收程序及相关电路图

    #include"main.h"#include"cc1101.h"#include"lcd1602.h"void main(void){inti;uchar leng=0;//待接收字节长度uchar TXBuf[8]={0};//8字节,如果需要更长的数据包,请正确设置uchar RXBuf[8]={0};l/接收缓存区InitLcd1602();WriteAddressLcd1602(1,0);WriteCharForLCD1602("The CC1101 Test!");WriteAddressLcd1602(2,0);WriteCharForLCD1602("Design by XuJiel");Delaynms(6000);ClearLcd16020;Cpulnit();POWER_UP_RESET_CC1100(0;halRfWriteRfSetings();halSpiWriteBurstReg(CCxxx0_PATABLE,PaTabel,8);TxBuf[0]=1;

    标签: cc1101 程序 电路图

    上传时间: 2022-08-10

    上传用户:ttalli

  • VIP专区-嵌入式/单片机编程源码精选合集系列(112)

    VIP专区-嵌入式/单片机编程源码精选合集系列(112)资源包含以下内容:1. 总结了常用的主要c算法.2. 太阳能热水器智能控制,它以89C52单片机为核心.3. 本系统由单片机系统、矩阵键盘、LED显示和报警系统组成。系统能完成开锁、超时报警、超次锁定、管理员解密、修改用户密码基本的密码锁的功能。除上述基本的密码锁功能外.4. ID读卡器原理图,分立元件的,挺经典的,值得收藏.5. 嵌入式的驱动结构.6. 实现汉字液晶显示子程序 液晶屏分为4行*12列汉字.7. 一个简单的用单片机控制唱歌---“祝你平安”.8. modbus的ascii模式源代码.9. modbus的rtu源代码.10. ocm4x8c液晶显示器的显示c语言程序,供开发使用.11. 基于lpc2106和OV6620的源代码.12. 93C46是一个具有SPI接口的存储芯片.13. A Guide To Digital Design And Synthesis.14. ndis 中间层截获后转发的例子,通过修改IP 地址和MAC地址转发..15. ads下2410的测试程序.16. 主要是关于GUI的一本很好的书籍。对于初学习者有很大的帮组作用.17. 这是一本关于嵌入式系统应用软件开发案例,介绍了ARM处理器和UC/OS-II操作系统的嵌入式编程的基础知识和独有特点,本书的每一个综合实验都分别用实验报告书、实验指导书和源码详解3个部分给予介绍..18. 液晶驱动1621B的驱动程序.19. LZ9FC22_FV_LCD,LCD driver ic for embeded application..20. 《电路板设计与制作Protel99 高级应用》随书光盘.21. TI的2812的SCI的调试程序.22. TI的2812的TIMER的调试程序.23. ADS设计开发基础.24. 很好的proteus应用实例.25. hipGenius是一款USB设备芯片型号查询工具.26. #include <reg52.h> #include <stdio.h> #include <string.h> #define uchar unsigne.27. 如何把PCB图加入到WORD中是很多人所苦恼的问题..很多网站上都有提供这类问题的答案.但我觉得这个最可行..截图时要尽量放大,要不会出现像素不足的问题.28. prolog语言教程.29. 数控机床刀具半径补偿圆弧接圆弧C程序代码.30. 数控机床刀具半径补偿 直线接直线 C程序源码.31. 语音芯片1420P。可录音20秒。自己编的程序。.32. c/c++嵌入式开发的重要资料.33. wince 5.0下 实现PCI8串口卡驱动.34. 电机矢量控制程序.35. SPI总线与CPLD之间的通信程序.36. 第一章 在Allegro 中准备好进行SI 仿真的PCB 板图.37. 实施交通灯的控制.38. usb器件的电源测试.39. zr36966与eeprom连线.40. 介绍了各种cpld的配置和下载方法.

    标签: 光电检测技术

    上传时间: 2013-06-14

    上传用户:eeworm