基于DS1302的简易数码管电子钟

发布者:糖三角最新更新时间:2012-08-10 来源: 51hei关键字:DS1302  数码管  电子钟 手机看文章 扫描二维码
随时随地手机看文章
#include
#include
#include"DS1302.h"
#include"KEY.h"
#include"IIC.H"
#define uchar unsigned char
#define uint unsigned int
#define LEDIO P0
#define LEDCHIP P2
sbit BEEP=P3^7;
/*************************数码管定义**************************************/
  //段码        0   1    2    3    4    5     6    7   8    9   A    B  -  P   d
uchar code led[15]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x40,0x73,0x5E};
  //位选信号                                   全灭
uchar code selchip[7]={0x01,0x02,0x04,0x08,0x10,0x20,0x10};
        //数据格式:   秒   分   时   日   月 星期   年
uchar  time_temp[7]={0x00,0x50,0x10,0x12,0x30,0x01,0x11};  //存放初始化时间及设置ds1302的数据
uchar  DataTime[7];           //读取DS1302的数据
/**********************************************************/    
uchar  display[4][6]={0x06,0x5b,0x6d,0x6f,0x6d,0x6f};    //数码管显示
uchar  i=0,key1,key2=20,pos=0,p,k;      //按键和扫描变量
uchar  mod=0;          //模式:设置时间进入按钮
bit  bflash=0,clockdown=0;   //设置和闹铃标志
uchar   hour,minute,second,year,month,date;  //有关时间的变量寄存
uchar  ss=1;//闹铃响的次数可以自己修改
uchar  clock1[3]={0x06,0,0x01},clock2[3]={14,0,0x01};   //闹钟时间与开关,默认开关开
uint num=5000;     //设置自动返回主界面时间
/////////////////////////////////
void TimeInit()      //定时扫描初始化
{
 EA = 0;
 TMOD |= 0x10;
 TH1 = 0xfd;
 TL1 = 0xe6;
 EA=1;
// ET0=1;
 ET1=1;
 TR1=1;
}
///////////////////////////////////////////////////////
/*
void t0int() interrupt 1         //T0中断程序,控制发音的音调
{
    TR0 = 0;                     //先关闭T0
    BEEP = ~BEEP;          //输出方波, 发音
    TH0 = t0h;               //下次的中断时间, 这个时间, 控制音调高低
    TL0 = t0l;
    TR0 = 1;                     //启动T0
 LEDIO=display[mod][i];
 LEDCHIP=selchip[i];
 if(i>=5)
  i=0;
 else
  i++;
}
*/
/////////////////////////////////////////
void TimeInt() interrupt 3   //定时扫描中断
{
 if(i==pos)
 {
   if(bflash==1) //闪烁标志;设置时间日期和闹铃
  {
   if(k++<40)
   {
    if(i==4)
    i=0;
    else
    i=i+2;
   }  
   else
   {
    if(p++>40)
    {
     p=0;
     k=0;
    }
   }
  }
 }
 LEDIO=display[mod][i];
 LEDCHIP=selchip[i];
 if(num==0)      //自动还回时间界面
 {
  mod=0;
  bflash=0;
 }
 else
  num--; 
 if(i>=5)
  i=0;
 else
  i++;
 TH1=0xfa;
 TL1=0xd8;
}
////////////////////////////////////////////////////////
void TimeToBin()       //把时间变成2进制
{
 second=DataTime[0]/16*10+DataTime[0]%16;
 minute=DataTime[1]/16*10+DataTime[1]%16;
 hour=DataTime[2]/16*10+DataTime[2]%16;
 date=DataTime[3]/16*10+DataTime[3]%16;
 month=DataTime[4]/16*10+DataTime[4]%16;
 year=DataTime[6]/16*10+DataTime[6]%16;
}
////////////////////////////////////////////////////////
void TimeToBCD()      //把时间变为BCD码
{
 time_temp[0]=second/10*16+second%10;
 time_temp[1]=minute/10*16+minute%10;
 time_temp[2]=hour/10*16+hour%10;
 time_temp[3]=date/10*16+date%10;
 time_temp[4]=month/10*16+month%10;
 time_temp[6]=year/10*16+year%10;
}
////////////////////////////////////////////////
    
void  TimerDis()
{ /************************时间扫描设置************************/
 display[0][0]=led[hour/10];
 display[0][1]=led[hour%10]|0x80;
 display[0][2]=led[minute/10];
 display[0][3]=led[minute%10]|0x80;
 display[0][4]=led[second/10];
 display[0][5]=led[second%10];
 /************************日期扫描设置************************/
 display[1][0]=led[year/10];
 display[1][1]=led[year%10]|0x80;
 display[1][2]=led[month/10];
 display[1][3]=led[month%10]|0x80;
 display[1][4]=led[date/10];
 display[1][5]=led[date%10];
 /**********************闹铃1扫描设置****************************/
 display[2][0]=led[10];       //第一个闹钟
 display[2][1]=led[14-clock1[2]];  //P闹钟开d闹钟关
 display[2][2]=led[clock1[0]/10];
 display[2][3]=led[clock1[0]%10]|0x80;
 display[2][4]=led[clock1[1]/10];
 display[2][5]=led[clock1[1]%10];
 /***********************闹铃2扫描设置**************************/
 display[3][0]=led[11];      //第一个闹钟
 display[3][1]=led[14-clock2[2]];     //P闹钟开d闹钟关
 display[3][2]=led[clock2[0]/10];
 display[3][3]=led[clock2[0]%10]|0x80;
 display[3][4]=led[clock2[1]/10];
 display[3][5]=led[clock2[1]%10];
 /********************************************************/
 //second=DataTime[0]/16*10+DataTime[0]%16;
}
///////////////////////////////////////////////////////
void KeySet()
{
 key1=KeyTab[KeyRvs()];   //读取键盘值
 if(key2!=key1)      //防止连续跳动,释放按键
 {
  if(key1=='*')
  {
   pos=0;        //返回首位方便设置
   if(!bflash)       //先进设置时间的界面
   mod=0;
   else
   mod=(mod+1)%4;     //功能选择
   bflash=1;     //进入时钟设置标志
   num=5000;      //若是没有操作自动返回主界面
  }
  /////////////////////////////移位按键选择设置的位置
  if((key1=='0')&&(bflash))
  {
   pos=(pos+2)%6;
   num=5000;
  }
  if((!bflash)&&(key1=='0'))      //一键关闭闹铃睡懒觉按键,下次又开闹铃
  {  
   clockdown=1;       
  }
  ///////////////////////////// 时分秒设置,加按键,
  if((key1=='#')&&(bflash))
  { 
   num=5000;      //
   if(mod==0)       //时间设置
   {
    if(pos==0)
    {
     hour=(hour+1)%24;
    }
    else if(pos==2)
    {
     minute=(minute+1)%60;
    }
    else
    {
     second=(second+1)%60;
    }
   }
   ////////////////////////////////年月日设置
   if(mod==1)
   {
    if(pos==0)
    {
     year=(year+1)%100;
    }
    else if(pos==2)
    {
     month=(month+1)%13;
    }
    else
    {
     if(month==2)     //二月处理
     {
      if(year%4==0)     //闰年二月
      date=(date+1)%30;
      else
      date=(date+1)%29;
     }
     /////////////////////////////////////////////////大月设置
     else if((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12))
      date=(date+1)%32;
     else  /////////////////////////////////////////小月设置
      date=(date+1)%31;
     }     
   }
   //////////////////////////////////////////////闹铃1设置
   if(mod==2)
   {
    if(pos==0)         //闹铃1开关设置
    {
     clock1[2]=(clock1[2]+1)%2;
    }
    if(pos==2)
    {
     clock1[0]=(clock1[0]+1)%24;
    }
    if(pos==4)
    {
     clock1[1]=(clock1[1]+1)%60;
    }
   }
   //////////////////////////////////////////////闹铃2设置
   if(mod==3)
   {
    if(pos==0)           //闹铃2开关设置
    {
     clock2[2]=(clock2[2]+1)%2;
    }
    if(pos==2)
    {
     clock2[0]=(clock2[0]+1)%24;
    }
    if(pos==4)
    {
     clock2[1]=(clock2[1]+1)%60;
    }
   }
  }
  if((!bflash)&&(key1=='#'))      //查看闹铃设置
  {  
   mod=(mod+1)%2+2;       
  }
  ///////////////////////////////////////////////确认键设置
  if(key1=='D')
  {
   if(bflash)           //清除设置标志
   {
    bflash=0;
    mod=0;
    TimeToBCD();
    Set_Ds1302(time_temp);
    while(!Write_Nbyte_iic(SLAVE,0x50,clock1,3));
    while(!Write_Nbyte_iic(SLAVE,0x60,clock2,3));
   }
   else         //切换时间和日期
    mod=(mod+1)%2;
   num=5000;          //自动返回时间界面
  }
  key2=key1;
 }            //键值保存。释放按键用
}
//////////////////////////////////////
/********************闹铃响一分钟****************************/
void CLOCK()
{ 
 if((clock1[0]==hour)&&(clock1[1]==minute)&&(clock1[3])||((clock2[0]==hour)&&(clock2[1]==minute)&&(clock2[3])))
 {
 
  if(!clockdown)     //没有睡懒觉则正常响铃
   BEEP=~BEEP;
  else
   BEEP=1;    //否则关闭闹铃
 }        
 else
 {
  clockdown=0;         //恢复闹铃
  BEEP=1;             //关闭闹铃
 }     
}
/////////////////////////////////////////
main()
{
 while(!Read_Nbyte_iic(SLAVE,0x50,clock1,3));
 while(!Read_Nbyte_iic(SLAVE,0x60,clock2,3));
 TimeInit();      //断电以后唤醒时钟
 Init_Ds1302();
 while(1)
 {
  Get_Ds1302(DataTime); //读取时间
  TimerDis();   //段码处理
  KeySet();    //扫描按键
  if(!bflash)   //如果没有进入设置时间则正常显示否则时间暂停
  {
   TimeToBin();
  }
  CLOCK();  //闹铃设置
 }
}
/*******************************************************************************************************************************/
#ifndef  _DS1302_H_
#define  _DS1302_H_
/*********************************************************************************/
#include
#include
#define uchar unsigned char
#define uint unsigned int
sbit RST = P3^4;
sbit SCLK  = P3^5;
sbit IO    = P3^6;
/********以下是函数声明********/
void  Ds1302_Write_Byte(uchar ch);   //写一字节数据函数声明
uchar Ds1302_Read_Byte();        //读一字节数据函数声明
void  Write_Ds1302(uchar cmd,uchar indata); //写DS1302函数声明
uchar Read_Ds1302(uchar addr);   //读DS1302函数声明
void  Set_Ds1302(uchar *str);    //设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
void  Get_Ds1302(uchar *str);    //读当前时间函数声明
void  Init_Ds1302();     //DS1302初始化函数声明
/********以下是写一字节数据函数********/
void Ds1302_Write_Byte(uchar ch)
{
   uchar n;
   EA=0;
   for(n=0;n<8;n++)
   {
    SCLK=0;             //写时低电平改变数据
    if(ch&0x01)
    IO=1;
    else
    IO=0;
    SCLK=1;            //高电平把数据写入DS1302
    _nop_();
 _nop_();
    ch=ch>>1;
   }
   EA=1;
}
/********以下是读一字节数据函数********/
uchar Ds1302_Read_Byte()   
{
   uchar n,temp=0;
   EA=0;
   IO=1;               
   for(n=0;n<8;n++)
   {
    SCLK=1;
    if(IO)
    temp|=0x80;
    else
    temp&=0x7f;
    SCLK=0;             //产生下跳沿
    temp=temp>>1;
   }
   EA=1;
   return (temp);
}
/********写DS1302函数, 往DS1302的某个地址写入数据 ********/
void Write_Ds1302(uchar cmd,uchar indata)
{
   SCLK=0;
   RST=1;
   Ds1302_Write_Byte(cmd);       
   Ds1302_Write_Byte(indata);
   SCLK=0;
   RST=0;
}
/********读DS1302函数,读DS1302某地址的的数据********/
uchar Read_Ds1302(uchar addr)
{
   uchar backdata;
   RST=0;
   SCLK=0;
   RST=1;
   Ds1302_Write_Byte(addr);        //先写地址
   backdata=Ds1302_Read_Byte();    //然后读数据
   SCLK=0;
   RST=0;
   return (backdata);
}
/********设置初始时间函数********/
void Set_Ds1302(uchar *str)
{
   uchar n,addr = 0x80;
   Write_Ds1302(0x8e,0x00);          //写控制字,允许写操作
   for(n=0;n<7;n++)
   {
     Write_Ds1302(addr,*str);
     addr=addr+2;
  str++;
   }
   Write_Ds1302(0x8e,0x80);          //写保护,不允许写
}
/********读取当前时间函数********/
void Get_Ds1302(uchar *str)
{
 uchar n,addr = 0x81;
 for(n=0;n<7;n++)
 {
  str[n]=Read_Ds1302(addr);
  addr+=2;
 }
}
/************初始化时间********************/
void Init_Ds1302()
{
 RST=0;
    SCLK=0;
 RST=1;
 Write_Ds1302(0x80,0x00);  //写秒寄存器
    Write_Ds1302(0x90,0xab);  //写充电器
    Write_Ds1302(0x8e,0x80);  //写保护控制字,禁止写
}
///////////////////////////////////////
#endif
/***********************************************************************************************************************/
#ifndef _KEY_H_
#define _KEY_H_
/****************************************************/
#define KEYIO P1       //定义键盘的输入口
unsigned char code KeyTab[17]="123A456B789C*0#D";         //键盘查表
/***********************************************/
void delay_ms(unsigned int time)   //误差 -0.000000000003us
{
    unsigned char a,b;
 while(time--)
 {
       for(b=102;b>0;b--)
        for(a=3;a>0;a--);
 }
}
/**************************************************/
///////////////////////////////////////////////
unsigned char KeyRvs(void)    //反转法
{
  unsigned char temH, temL, key;
 delay_ms(10);     //两次扫描间隔为10ms,消除抖动导致的误操作
  KEYIO = 0x0f; temL = KEYIO;//高四位先输出0;读入,低四位含有按键信息
  KEYIO = 0xf0; temH = KEYIO;//然后反转输出0;读入,高四位含有按键信息
 switch(temL)
 {
  case 0x0e: key = 0; break;
  case 0x0d: key = 1; break;
  case 0x0b: key = 2; break;
  case 0x07: key = 3; break;
  default: return 16;//按下的不是上述按键,就当是没有按键
  }
 switch(temH)
 {
  case 0xe0: return  key;
  case 0xd0: return (key + 4);
  case 0xb0: return (key + 8);
  case 0x70: return (key + 12);
  default: return 16;//按下的不是上述按键,就当是没有按键
 }
 
 
}
/**********************************************************/ 
#endif
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#ifndef  _IIC_H
#define  _IIC_H_
/***************************************************/

#include
#define uchar unsigned char
#define uint unsigned int
#define SLAVE 0xa0   //IIC器件地址  注意全部接地
#define Rslave SLAVE+1   //送读控制字
sbit SDA=P3^0;     //IIC数据接口
sbit SCL=P3^1;     //IIC时钟接口
////////////////////////////////////////////////////////
void delay_iic(uint time)
{
 for(time;time>0;time--);
}
///////////////////////////////////////
void start_iic()
{
 SDA=1;
 SCL=1;
 delay_iic(10);
 SDA=0;
 delay_iic(10);
 SCL=0;
}

void stop_iic()
{
 SDA=0;
 SCL=1;
 delay_iic(10);
 SDA=1;
 delay_iic(10);
 SCL=0;
}

void ack_iic()
{
 SDA=0;
 SCL=1;
 delay_iic(10);
 SCL=0;
 SDA=1;
}

void nack_iic()
{
 SDA=1;
 SCL=1;
 delay_iic(10);
 SCL=0;
 SDA=0;
}

////////////////////////* write 1 byte   *//////////////////////
void write_byte(uchar ch)
{
 uchar i;
 for(i=0;i<8;i++)
 {
  if(ch&0x80)
  SDA=1;
  else
  SDA=0;
  SCL=1;
  delay_iic(10);
  SCL=0;
  ch=ch<<1;
 }
 SDA=1;
 SCL=1;
 delay_iic(10);
 if(SDA==1)
 F0=0;
 else
 F0=1;
 SCL=0;
}
///////////////////////////*  read 1 byte  *////////////////////////
uchar read_byte()
{
 uchar i;
 uchar r=0;
 SDA=1;
 for(i=0;i<8;i++)
 {
  r=r<<1;
  SCL=1;
  delay_iic(10);
  if(SDA==1)
  r++;
  SCL=0;
 }
 return r;
}
/***********************写一个字节**************************
bit  Write_Byte_iic(uchar addr,uchar ch)
{
 start_iic();  //产生起始信号
 write_byte(SLAVE);   //发送从器件地址
 if(F0==0) return 0;   //检查应答位
 write_byte(addr);   //发送目的地址
 if(F0==0) return 0;
 write_byte(ch);   //发送8为数据
 if(F0==0) return 0;
 stop_iic();      //停止信号
 return 1;
}
  
/********************读一个字节***************************
uchar Read_Byte_iic(uchar addr)
{ 
 uchar ch;       
 start_iic();    //启动IIC
 write_byte(SLAVE);    //写器件地址
 if(F0==0)return 0;
 write_byte(addr);    //写读取的地址
 if(F0==0)return 0;
 start_iic();   //再次产生起始信号,不能少
 write_byte(Rslave);  //送读控制字
 if(F0==0)return 0;
 ch=read_byte();   //读出指定单元的内容
 nack_iic();    //非应答信号
 stop_iic();    //停止IIC
 return (ch); 
}
 ************************************************************/
////////////////////////////////////////////////////////////
bit Read_Nbyte_iic(uchar slave,uint addr,uchar *str,uchar  numb)
{
 uchar i;
 start_iic();
 write_byte(slave);  //write  iic  addr
 if(F0==0)
 return 0;
 write_byte(addr);  //write  data   addr
 if(F0==0)
 return 0;
 start_iic();   //再次产生起始信号,不能少
 write_byte(Rslave);  //送读控制字
 if(F0==0)
 return 0;
 for(i=0;i				   
关键字:DS1302  数码管  电子钟 引用地址:基于DS1302的简易数码管电子钟

上一篇:用单片机写的电子时钟
下一篇:带信号量和抢占式的中断调度的mini操作系统(基于8051)

推荐阅读最新更新时间:2024-03-16 13:05

基于51单片机的智能恒温箱设计--数码管显示
一.硬件方案 根据恒温箱控制器的功能要求,并结合对51系列单片机软件编程自由度大,可用编程实现各种控制算法和逻辑控制。所以采用AT89C52作为电路系统的控制核心。按键将设置好的温度值传给单片机,通过温度显示模块显示出来。初始温度设置好后,单片机开启输出控制模块,使电热器开始加热,同时将从数字温度传感器DS18B20测量到的温度值实时的显示出来,当加热到设定温度值时,单片机控制声光报警模块,发出声光报警,同时关闭加热器。当自然冷却到设定温度50摄氏度以下时,单片机再次启动加热器,如此循环反复,以达到恒温控制的目的。 主要由51单片机+最小系统+数码管显示模块+数码管驱动模块+温度采集模块+蜂鸣器模块+LED指示灯模块+继电器驱
[单片机]
基于51单片机的智能恒温箱设计--<font color='red'>数码管</font>显示
STM32单片机(10) 数码管输出实验[补] 静态(共阳)+动态(共阴)
注:使用普中科技开发板测试时,需要拔掉Boot1插口 参考手册、电路图等参见 STM32单片机学习(1) 总记 学习资料+参考手册+LED灯 静态数码管实验 /******************************************************************************* * * 软件功能: 静态数码管实验(软件延时方式) * *******************************************************************************/ #include stm32f10x.h #include de
[单片机]
PIC控制时钟芯片DS1302汇编程序
#INCLUDE CBLOCK 20H SEC ;秒 MIN ;分 HOU ;小时 DATE ;日期 MON ;月 DAY ;日 YERR ;年 DDD ;写使能位 TIME_TX ;1302发送寄存器 TIME_RX ;1302接收寄存器 COUNT1 ; COUNT2 ; DELAY1 DELAY2 ENDC ******************************* ; ; 1302子程序说明 ; ;****************************** ; DS1302INI ;1302初始化,先禁止RST,设定充电方式 ; SET_TIME ;一次发送7个数据设定时间,包含写使能寄存器,8个数据 ; GET_T
[单片机]
51单片机控制8位LED数码管做9999累加的程序
采用stc89c52单片机芯片,四位数码管的接法:P1位选 P0段选 程序: #include reg51.h void delay(unsigned int d); char t; unsigned char code duan = {0x3f,0x06, 0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; unsigned char code wei ={0xfe,0xfd,0xfb ,0xf7,0xef,0xdF,0xbF,0x7F}; main() { unsigned int f=1 ,n=0; unsigned char i,out ;
[单片机]
ds1302带闹钟功能的单片机控制的时钟程序
端口自己修改一下 用的1602液晶显示 #include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit wela=P2^7; sbit nz=P2^3;//闹钟 sbit lcdrs=P3^5; sbit lcdwr=P3^6; sbit lcden=P3^4;//液晶使能 sbit k1=P3^0; sbit k2=P3^1; sbit k3=P3^2; sbit k4=P3^3; sbit ajjd=P3^7;//按键 sbit clk=P2^1; sbit io=P2^0; sbit rst=P2^
[单片机]
51单片机驱动CT1642数码管显示源程序
拆解电视机顶盒找到带CT1642控制的数码管 在网上找到代码修改了一下 没有解决按键检测的问题 可根据自己的需求修改对应引脚 制作出来的实物图如下: 单片机源程序如下: sbit DAT=P2^2; sbit CLK=P2^1; sbit KEY=P2^0; u8 NixieTable ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; u8 NixieTablepos ={0,0x02,0x04,0x08}; void CT1642_Write(u8 Pos, u8 Val) { u8 i,Posn; // 1、移18位:对应C1--C4、6位空、Q2--Q9 P
[单片机]
51单片机驱动CT1642<font color='red'>数码管</font>显示源程序
LED数码管显示分类及其典型应用电路
本文主要讲述了LED数码管的显示分类及其特点、LED数码管典型应用电路。    一.LED数码管显示分类   LED数码管显示分为静态显示方式和动态显示方式。   (1) 静态显示方式:每一位字段码分别从I/O控制口输出,保持不变直至CPU刷新。   其特点为:编程较简单,但占用I/O口线多,一般适用于显示位数较少的场合。   (2) 动态显示方式,在某一瞬时显示一位,依次循环扫描,轮流显示,由于人的视觉滞留效应,人们看到的是多位同时稳定显示。   其特点为:占用I/O端线少,电路较简单,编程较复杂,CPU要定时扫描刷新显示。一般适用于显示位数较多的场合。    二.LED显示器的扩展(显示方式)   LED显示
[电源管理]
LED<font color='red'>数码管</font>显示分类及其典型应用电路
实战单片机电子钟制作(一)
前一段时间开始带学生进行毕业设计,学生想做一个电子钟,问我怎么做,我告诉他得有一点专业性,否则不能称其为毕业设计。经过1个月的反复酝酿,我们确定了如下方案和最终目标: 1.整体功能达到市售电子日历效果,显示内容包括年、月、日、星期、时、分、秒、室温。 2.实时时钟芯片有两种:DS12C887、DS1302。学习和使用过程中可进行选择。 3.数码管控制采用MAX7219专用扫描驱动芯片。 4.电路板上留有PS/2键盘接口,用于调节当前时间、数码管显示亮度、闹铃时间。这一点和普通电子日历有明显区别,毕竟我们做的是一个有点专业要求的电子钟。 5.电路板上安装有继电器,可作为简单的时间控制或温度控制装置。
[单片机]
实战单片机<font color='red'>电子钟</font>制作(一)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved