• 大小: 10KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: 51单片机  

资源简介

本代码是用在51单片机上的,材料有51单片机,DS1302芯片,四位数码管。程序可以完美运行。

资源截图

代码片段和文件信息

#include
#include
#define uchar unsigned char
#define uint unsigned int

sbit IO=P2^2;  //数据输入输出线
sbit RST=P2^3;  //复位信号线
sbit SCLK=P2^1;   //时钟信号线
sbit key=P1^5;
sbit chushikey=P1^4;
 sbit dp=P2^7;
 
uchar code write_addr[]={0x800x820x840x860x880x8a0x8c};   //写的地址
uchar code read_addr[]={0x810x830x850x870x890x8b0x8d};   //读的地址

//---存储顺序是秒分时日月周年存储格式是用BCD码---//
uchar time[7]={00x490x080x060x060x030x18};  //初始化的时间为2015年12月12日12:00

//变量定义:
unsigned char table[]=
   {0xc00xf90xa40xb00x990x920x820xf80x800x900xbf};
     //表:共阳数码管 0-9
//引脚定义:  
sbit SMG_q = P1^0; //定义数码管阳级控制脚(千位)
sbit SMG_b = P1^1; //定义数码管阳级控制脚(百位)
sbit SMG_s = P1^2; //定义数码管阳级控制脚(十位)
sbit SMG_g = P1^3; //定义数码管阳级控制脚(个位)

void delay_1(int i)
{
while(i--);
}
//延时子函数短暂延时
void delay(void){  
 unsigned char i=10;
 while(i--);
}

//写字节
void write(uchar addruchar dat)
{
   uchar ij;
   SCLK=0;       
   _nop_();
   RST=0;        
   _nop_();
   RST=1;             //拉高,准备写地址写数据
   _nop_();
   _nop_(); 
   for(i=0;i<8;i++)   //传送8位地址,往哪里写
   {
      SCLK=0;        //再置为低,以便实现上升沿  
      _nop_();
      IO=addr&0x01;   //先传送最低位
      addr>>=1;       //向右移位,把8位数据依次写入
      SCLK=1;         //数据在上升沿时,写入数据
      _nop_();    
   }
   for(j=0;j<8;j++)  //写入8位数据
   {
      SCLK=0;        //置为低,以便实现上升沿
      _nop_(); 
      IO=dat&0x01;   //先传送最低位
      dat>>=1;       //向右移位,把8位数据依次写入
      SCLK=1;        //数据在上升沿时,写入数据
      _nop_();
   }
    RST=0;          //释放
   _nop_();
}
//读字节
uchar read(uchar addr)
{
    uchar idat=0;
   SCLK=0;
   _nop_();
   RST=0;
   _nop_();
   RST=1;               //拉高,准备写地址读数据
   _nop_();
   _nop_();
   for(i=0;i<8;i++)     //传送8位地址,从哪里读
   {
      SCLK=0;           //置为低,以便实现上升沿
      _nop_();
      IO=addr&0x01;     //先传送最低位
      addr>>=1;         //向右移位,把8位数据依次写入
      SCLK=1;           //数据在上升沿时,写入数据
      _nop_();
   }
   _nop_();
   for(i=0;i<8;i++)     //读出8位数据
   {  
      SCLK=1;           //置为低,以便实现下降沿
      _nop_();
      dat>>=1;          //向右移位,把8位数据依次读出
//      if(IO==1)
//        dat=dat|0x80;         
      SCLK=0;          //读数据时,下降沿有效
   if(IO==1)
        dat=dat|0x80;  
      _nop_();     
   }
   RST=0;              //复位
   _nop_();
   SCLK = 1;
   _nop_();
   IO = 0;
   _nop_();
   IO = 1;
   _nop_();
   return dat;         //返回读到的数据
}
//读时间
//void read_time()
//{
//   uchar n;
//  // for(n=0;n<7;n++)
//    time[0]=read(read_addr[0]);   //读取分秒时日月周年
// time[6]=read(read_addr[6]);   //读取分秒时日月周年
//}

void ds1302_init()
{
   uchar k;
   write(0x8e0x00);  //禁止写保护,即允许数据写入
   for(k=0;k<8;k++)   //写入7个字节的时钟信号:分秒时日月周年
   {
     write(write_addr[k]time[k]);
   }
   write(0x8e0x80);  //打开写保护
}

void dingshi()
{
TMOD=0x01;
        TH0=(65536-1000)/256;
        TL0=(65536-1000)%256;
      //  EA=1;
        ET0=1;
        TR0=1;

  int h=0;
void main()
{
  
  char 

评论

共有 条评论