久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2765|回復: 15
打印 上一主題 下一主題
收起左側

如何把這個89C單片機程序改為適合12C5608AD適用?

[復制鏈接]
跳轉到指定樓層
樓主
ID:242298 發表于 2021-12-28 04:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
100黑幣
本帖最后由 leezll 于 2021-12-28 13:20 編輯

這個程序我自己改了下,可是刷寫到單片機時鐘就是不走時,不知道是延遲代碼問題還是其他原因,請大神修改,謝謝


#include<STC12C5608AD.h>
#define uchar unsigned char
#define uint unsigned int
/************************12864端口定義*******************************************/
#define dataport P1   //12864數據口
sbit rs=P2^6; //指令/數據端口
sbit rw=P2^7; //讀/寫端口
sbit en=P3^7; //使能端口
sbit psb=P2^0; //并口/串口端口(本萬年歷采用并口)
sbit rst=P2^1; //復位端口
/********************************************************************************/
/***********************DS1302端口定義*******************************************/
sbit clock_rst=P3^4;  //1302復位管腳定義
sbit clock_dat=P3^5;  //1302I/O管腳定義
sbit clock_clk=P2^4;  //1302時鐘管腳定義  
/***************寄存器定義(用于記錄1302IO的輸入和輸出)*************************/
sbit a0=ACC^0;
sbit a1=ACC^1;
sbit a2=ACC^2;
sbit a3=ACC^3;
sbit a4=ACC^4;
sbit a5=ACC^5;
sbit a6=ACC^6;
sbit a7=ACC^7;
/********************DS18B20端口定義*********************************************/
/********************************************************************************/
sbit DQ=P2^2; //DS18B20數據端口
/********************************************************************************/
/******************18B20全局變量定義*********************************************/
uchar temp;     //溫度全局變量(整數部分)
uint xs;     //溫度全局變量(小數部分)
/********************************************************************************/

/**********************1302全局變量定義******************************************/
uchar sec,min,hour,day,month,week,year1,year2=20;//秒,分,時,日,月,星期,年
/************************蜂鳴器端口定義******************************************/
sbit beep=P2^3;
uchar num;
/***********************按鍵定義*************************************************/
sbit key1=P3^1;
sbit key2=P3^2;
sbit key3=P3^3;
sbit key4=P2^5;
uchar set=0; //set=0時顯示首頁,1時顯示次頁
uchar status=0;//按鍵功能選擇定義(年0,月1,日2,時3,分4 )
/********************************************************************************/
uchar code month_week[12]={6,2,3,6,1,4,6,2,5,7,3,5}; //2000年各月頭天星期表
uchar code year_code[300]={0x0C,0x96,0x45, /*2000*/  0x4d,0x4A,0xB8, /*2001*/   //2002~2099年農歷表
0x0d,0x4A,0x4C, /*2002*/   0x0d,0xA5,0x41, /*2003*/  0x25,0xAA,0xB6, /*2004*/
0x05,0x6A,0x49, /*2005*/   0x7A,0xAd,0xBd, /*2006*/  0x02,0x5d,0x52, /*2007*/
0x09,0x2d,0x47, /*2008*/   0x5C,0x95,0xBA, /*2009*/  0x0A,0x95,0x4e, /*2010*/
0x0B,0x4A,0x43, /*2011*/   0x4B,0x55,0x37, /*2012*/  0x0A,0xd5,0x4A, /*2013*/
0x95,0x5A,0xBf, /*2014*/   0x04,0xBA,0x53, /*2015*/  0x0A,0x5B,0x48, /*2016*/
0x65,0x2B,0xBC, /*2017*/   0x05,0x2B,0x50, /*2018*/  0x0A,0x93,0x45, /*2019*/
0x47,0x4A,0xB9, /*2020*/   0x06,0xAA,0x4C, /*2021*/  0x0A,0xd5,0x41, /*2022*/
0x24,0xdA,0xB6, /*2023*/   0x04,0xB6,0x4A, /*2024*/  0x69,0x57,0x3d, /*2025*/
0x0A,0x4e,0x51, /*2026*/   0x0d,0x26,0x46, /*2027*/  0x5e,0x93,0x3A, /*2028*/
0x0d,0x53,0x4d, /*2029*/   0x05,0xAA,0x43, /*2030*/ 0x36,0xB5,0x37, /*2031*/
0x09,0x6d,0x4B, /*2032*/   0xB4,0xAe,0xBf, /*2033*/  0x04,0xAd,0x53, /*2034*/
0x0A,0x4d,0x48, /*2035*/   0x6d,0x25,0xBC, /*2036*/  0x0d,0x25,0x4f, /*2037*/
0x0d,0x52,0x44, /*2038*/   0x5d,0xAA,0x38, /*2039*/  0x0B,0x5A,0x4C, /*2040*/
0x05,0x6d,0x41, /*2041*/   0x24,0xAd,0xB6, /*2042*/  0x04,0x9B,0x4A, /*2043*/
0x7A,0x4B,0xBe, /*2044*/   0x0A,0x4B,0x51, /*2045*/  0x0A,0xA5,0x46, /*2046*/
0x5B,0x52,0xBA, /*2047*/   0x06,0xd2,0x4e, /*2048*/  0x0A,0xdA,0x42, /*2049*/
0x35,0x5B,0x37, /*2050*/   0x09,0x37,0x4B, /*2051*/  0x84,0x97,0xC1, /*2052*/
0x04,0x97,0x53, /*2053*/   0x06,0x4B,0x48, /*2054*/  0x66,0xA5,0x3C, /*2055*/
0x0e,0xA5,0x4f, /*2056*/   0x06,0xB2,0x44, /*2057*/  0x4A,0xB6,0x38, /*2058*/
0x0A,0xAe,0x4C, /*2059*/   0x09,0x2e,0x42, /*2060*/  0x3C,0x97,0x35, /*2061*/
0x0C,0x96,0x49, /*2062*/   0x7d,0x4A,0xBd, /*2063*/  0x0d,0x4A,0x51, /*2064*/
0x0d,0xA5,0x45, /*2065*/   0x55,0xAA,0xBA, /*2066*/  0x05,0x6A,0x4e, /*2067*/
0x0A,0x6d,0x43, /*2068*/   0x45,0x2e,0xB7, /*2069*/  0x05,0x2d,0x4B, /*2070*/
0x8A,0x95,0xBf, /*2071*/   0x0A,0x95,0x53, /*2072*/  0x0B,0x4A,0x47, /*2073*/
0x6B,0x55,0x3B, /*2074*/   0x0A,0xd5,0x4f, /*2075*/  0x05,0x5A,0x45, /*2076*/
0x4A,0x5d,0x38, /*2077*/   0x0A,0x5B,0x4C, /*2078*/  0x05,0x2B,0x42, /*2079*/
0x3A,0x93,0xB6, /*2080*/   0x06,0x93,0x49, /*2081*/  0x77,0x29,0xBd, /*2082*/
0x06,0xAA,0x51, /*2083*/   0x0A,0xd5,0x46, /*2084*/  0x54,0xdA,0xBA, /*2085*/
0x04,0xB6,0x4e, /*2086*/   0x0A,0x57,0x43, /*2087*/  0x45,0x27,0x38, /*2088*/
0x0d,0x26,0x4A, /*2089*/   0x8e,0x93,0x3e, /*2090*/  0x0d,0x52,0x52, /*2091*/
0x0d,0xAA,0x47, /*2092*/   0x66,0xB5,0x3B, /*2093*/  0x05,0x6d,0x4f, /*2094*/
0x04,0xAe,0x45, /*2095*/   0x4A,0x4e,0xB9, /*2096*/  0x0A,0x4d,0x4C, /*2097*/
0x0d,0x15,0x41, /*2098*/   0x2d,0x92,0xB5, /*2099*/
};
uint code month_day1[12]={0,31,59,90,120,151,181,212,243,273,304,334};//平年月份累計天數表
uint code month_day2[12]={0,31,60,91,121,152,182,213,244,274,305,335};//閏年月份累計天數表
uint table_addr; //查農歷表的地址全局變量
uchar year1_n,month_n,day_n; //農歷年月日全局變量
uchar month_r;  //農歷閏月全局變量,無時為0
/**********************延時函數*************************************************/
void delay(uint t)  
{
uint b;
for(;t;t--)
  for(b=0;b<121;b++);
}
/*******************************************************************************/
/**************************12864子函數******************************************/
/**********************檢查忙信號子函數*****************************************/
void busy()  
{
rs=0;  //指令操作
rw=1;  //讀操作
dataport=0xff; //數據端口置位
en=1;  //使能
while(dataport&0x80); //等待數據端口位7為0
en=0;  //取消使能
}
/************************寫指令函數*********************************************/
void write_code(uchar c)   
{
busy();   //檢查忙標志
rs=0;   //指令操作
rw=0;   //寫操作
dataport=c;  //送指令到端口
en=1;   //使能
delay(1);  //稍微延時
en=0;   //取消使能
}
/************************寫數據函數*********************************************/
void write_data(uchar d)   
{
busy();   //檢查忙標志
rs=1;   //數據操作
rw=0;   //寫操作
dataport=d;  //送數據到端口
en=1;   //使能
delay(1);  //稍微延時
en=0;   //取消延時
}
/***********************寫漢字**************************************************/
void write_hz(uchar *hz)
{         
while(*hz>0)
{
  write_data(*hz); //寫入漢字
  hz++;
}
}

/***************************初始化12864*****************************************/
void init_12864()  
{
psb=1;        //并口方式
rst=1;        //復位端置高
write_code(0x30); //8位數據傳送,基本指令操作
delay(50);
write_code(0x0c); //無光標,不反白
delay(50);   
write_code(0x01); //清除顯示
delay(50);
write_code(0x40); //光標左移,字符不動
delay(50);
}                  
/*******************************************************************************/
/*************************DS1302子函數******************************************/
/************************1302寫驅動函數*****************************************/
void write_clock(uchar dat)
{
ACC=dat;
clock_dat=a0; clock_clk=1; clock_clk=0; //數據在上升沿變化
clock_dat=a1; clock_clk=1; clock_clk=0; //下降沿寫入1302
clock_dat=a2; clock_clk=1; clock_clk=0;
clock_dat=a3; clock_clk=1; clock_clk=0;
clock_dat=a4; clock_clk=1; clock_clk=0;
clock_dat=a5; clock_clk=1; clock_clk=0;
clock_dat=a6; clock_clk=1; clock_clk=0;
clock_dat=a7; clock_clk=1; clock_clk=0;
}
/************************1302讀驅動函數*****************************************/
uchar read_clock()
{
clock_dat=1;   //輸出賦1
a0=clock_dat;clock_clk=1; clock_clk=0;  //位0為1,讀1302
a1=clock_dat;clock_clk=1; clock_clk=0; //下降沿讀出有效
a2=clock_dat;clock_clk=1; clock_clk=0;
a3=clock_dat;clock_clk=1; clock_clk=0;
a4=clock_dat;clock_clk=1; clock_clk=0;
a5=clock_dat;clock_clk=1; clock_clk=0;
a6=clock_dat;clock_clk=1; clock_clk=0;
a7=clock_dat;clock_clk=1; clock_clk=0;
return(ACC);
}
/***************************寫數據入1302****************************************/
void write_dat_clock(uchar add,uchar dat)
{
clock_clk=0;
clock_rst=0; //時鐘脈沖為低時
clock_rst=1; //復位端才能置高
write_clock(add); //寫入地址(命令字節)
write_clock(dat); //寫入數據
clock_rst=0; //終止數據傳送
clock_clk=1;
}
/***************************從1302讀出數據**************************************/
uchar read_dat_clock(uchar add)
{
uchar dat=0; //定義數據儲存變量
clock_clk=0;
clock_rst=0;
clock_rst=1;
write_clock(add); //寫入要讀數據的地址
dat=read_clock(); //讀出數據
clock_rst=0; //終止數據傳送
clock_clk=1;
return dat;  //返回數據
}
/**************************設置初始時間函數*************************************/
void set_time()
{
write_dat_clock(0x8e,0x00);  //允許寫操作
write_dat_clock(0x8c,0x09);  //年
write_dat_clock(0x8a,0x03);  //星期
write_dat_clock(0x88,0x10);  //月
write_dat_clock(0x86,0x14);  //日
write_dat_clock(0x84,0x21);  //小時
write_dat_clock(0x82,0x56);  //分
write_dat_clock(0x80,0x00);  //秒,且振蕩器工作
//write_dat_clock(0x90,0xa5);  //充電
write_dat_clock(0x8e,0x80);  //禁止寫操作
}
/*****************************讀取時間******************************************/
void get_time()
{
sec=read_dat_clock(0x81);    //讀取秒
sec=(sec>>4)*10+(sec&0x0f);  //秒二進制轉換
min=read_dat_clock(0x83);    //讀取分鐘
min=(min>>4)*10+(min&0x0f);  //分二進制轉換
hour=read_dat_clock(0x85);   //讀取小時
hour=(hour>>4)*10+(hour&0x0f);//小時二進制轉換
day=read_dat_clock(0x87);     //讀取日期
day=(day>>4)*10+(day&0x0f);   //日期二進制轉換
month=read_dat_clock(0x89);   //讀取月份
month=(month>>4)*10+(month&0x0f);//月二進制轉換
week=read_dat_clock(0x8b);    //讀取星期
week=(week>>4)*10+(week&0x0f);//星期二進制轉換
year1=read_dat_clock(0x8d);     //讀取年份
year1=(year1>>4)*10+(year1&0x0f); //年份二進制轉換
}         
/*************************DS18B20各子函數***************************************/  
/*************************DS18B20延時函數***************************************/
void delay_DS18B20(uint i)
{
for(;i;i--);
}
/*************************DS18B20初始化函數*************************************/
init_DS18B20()  
{  
DQ=1;       //DQ復位
delay_DS18B20(100);   //稍作延時
DQ=0;       //產生復位脈沖
delay_DS18B20(160); //精確延時,大于480us
DQ=1;       //拉高總線
delay_DS18B20(50);   //等待20us左右
while(DQ);      //等待DS18B20發出存在脈沖
delay_DS18B20(30); //脈沖持續100us左右
}
/*****************************寫一個字節****************************************/
void write_onechar(uchar dat)
{
uchar i;
for(i=8;i>0;i--)
{
  DQ=0;
  DQ=dat&0x01;
  delay_DS18B20(3);
  DQ=1;
  dat>>=1;
}
}
/*****************************讀一個字節****************************************/
uchar read_onechar()
{
uchar i;
uchar dat;
for(i=8;i>0;i--)
{
  DQ=0;    //總線拉低
  dat>>=1; //維持一個指令時間
  DQ=1;    //拉高總線
  if(DQ)  //讀數據
   dat|=0x80;
  delay_DS18B20(20); //維持60us
}
return dat;
}
/*************************讀取溫度數值******************************************/
uchar read_tem()
{
uchar ltemp;          //定義溫度低字節
uchar htemp;          //定義溫度高字節
uchar t;           //定義溫度整數部分返回值
init_DS18B20();
write_onechar(0xcc);  //跳過讀序號列號的操作
write_onechar(0x44);  // 啟動溫度轉換
init_DS18B20();
write_onechar(0xcc);  //跳過讀序號列號的操作
write_onechar(0xbe);  //讀取溫度寄存器
ltemp=read_onechar(); //讀取溫度低字節
htemp=read_onechar(); //讀取溫度高字節
ltemp=ltemp>>4;       //低字節右移4位,去掉小數位
t=htemp<<4;        //高字節左移4位,去掉符號位
t|=ltemp;        //合并整數部分
xs=ltemp&0x0f;       //小數部分賦予xs
xs*=0.625;        //計算小數部分的數值
return t;        //返回溫度整數部分數值
}
/******************************************************************************/
/*****************************按鍵功能函數*************************************/
void key_1()     //選擇變量函數
{
key1=1;
if(key1==0)
{
  delay(10);
  if(key1==0)
  {
   if(++status>5)status=0; //1控制年的變化,2控制月的變化,3控制日的變化
  }       //4控制時的變化,5控制分的變化
  while(key1==0);
}
}
/******************************************************************************/
void key_2()       //加函數
{
key2=1;
if(key2==0)
{
  delay(10);
  if(key2==0)
  {
   switch(status)
   {
    case 1:if(++year1>99)year1=0;break;
    case 2:if(++month>12)month=1;break;
    case 3:if(++day>31)day=1;break;
    case 4:if(++hour>=24)hour=0;break;
    case 5:if(++min>=60)min=0;break;
   }
  }
  while(key2==0);
}
}
/*****************************************************************************/
void key_3()//減函數
{
key3=1;
if(key3==0)
{
  delay(10);
  if(key3==0)
  {
   switch(status)
   {
    case 1:if((year1--)<=0)year1=99;break;
    case 2:if((month--)<=1)month=12;break;
    case 3:if((day--)<=1)day=31;break;
    case 4:if((hour--)<=0)hour=23;break;
    case 5:if((min--)<=0)min=59;break;
   }
  }
  while(key3==0);
}
}
/*****************************************************************************/
key_4()     //選擇變量函數
{
key4=1;
if(key4==0)
{
  delay(10);
  if(key4==0)
  {
   if(++set>1)set=0;//0顯示首頁,1顯示次頁
  }
  write_code(0x01); //清除一下顯示屏
  while(key4==0);
}
}
/*****************************************************************************/
void key_time()    //按鍵設置時間的處理
{
write_dat_clock(0x8e,0x00);  //允許寫操作
write_dat_clock(0x8c,(year1/10)*16+year1%10);  //年
write_dat_clock(0x8a,(week/10)*16+week%10);  //星期
write_dat_clock(0x88,(month/10)*16+month%10);  //月
write_dat_clock(0x86,(day/10)*16+day%10);  //日
write_dat_clock(0x84,(hour/10)*16+hour%10);  //小時
write_dat_clock(0x82,(min/10)*16+min%10);  //分
write_dat_clock(0x8e,0x80);  //禁止寫操作
}
/*****************************************************************************/
/***********************平閏年設定********************************************/
bit prp(uchar y)
{
uint temp;
temp=2000+y;
if(((temp%4)==0)&&((temp%100)!=0)||((temp%400)==0))
  return 1;
else
  return 0;
}
/***********************某年月日星期設定**************************************/
void d_week()
{
uchar x,y;
x=year1/4;
y=year1%4;
if(month<3)
  week=((x*5+2+(y-1)+(day-1))%7+month_week[month-1])%7;
else
  week=((x*5+y+(day-1))%7+month_week[month-1])%7;
}
/***********************某年月日農歷設定**************************************/
uchar get_moon_day(uchar m,uint ta)//農歷月天數判定函數
{
uchar temp;
switch(m)
{
  case 1:temp=year_code[ta]&0x08;break;
  case 2:temp=year_code[ta]&0x04;break;
  case 3:temp=year_code[ta]&0x02;break;
  case 4:temp=year_code[ta]&0x01;break;
  case 5:temp=year_code[ta+1]&0x80;break;
  case 6:temp=year_code[ta+1]&0x40;break;
  case 7:temp=year_code[ta+1]&0x20;break;
  case 8:temp=year_code[ta+1]&0x10;break;
  case 9:temp=year_code[ta+2]&0x08;break;
  case 10:temp=year_code[ta+2]&0x04;break;
  case 11:temp=year_code[ta+2]&0x02;break;
  case 12:temp=year_code[ta+2]&0x01;break;
  case 13:temp=year_code[ta+2]&0x80;break;
}
if(temp==0)
  return 29;
else
  return 30;
}
/**********************某年農歷閏月設定**************************************/
uchar get_month_r(uchar y)
{
uchar temp,ta;
ta=y*3;
temp=(year_code[ta]&0xf0)>>4;
return temp;
}
/*********************陽歷轉化農歷*******************************************/
void convert_yinyan(uchar year1,uchar month,uchar day)
{
uchar month_n1,day_n1;//春節公歷月日
uint temp1,temp2;     //值轉移變量
table_addr=year1*3;
month_n1=(year_code[table_addr+2]&0x60)>>5;//農歷正月所在月數
day_n1=year_code[table_addr+2]&0x1f;    //農歷正月所在當月日數
month_r=get_month_r(year1);  //計算當年閏月
if(month_n1==1)   //春節離當年元旦天數
  temp1=day_n1-1;
else
  temp1=30+day_n1-1;
if(prp(year1))//次年是否為閏年
  temp2=month_day2[month-1]+day-1;
else
  temp2=month_day1[month-1]+day-1;
if(temp2>=temp1)//次月日在春節后否
{
  year1_n=year1;
  month_n=1;
  temp2=temp2-temp1;
  temp1=get_moon_day(month_n,table_addr); //當月天數計算
  while(temp2>=temp1)
  {
   month_n++;
   temp2=temp2-temp1;
   temp1=get_moon_day(month_n,table_addr);
  }
  day_n=temp2+1;
}
else
{
  year1_n=year1-1;
  temp1=temp1-temp2;
  table_addr=table_addr-3;
  month_r=get_month_r(year1-1);
  if(month_r==0)   //若當年沒有閏月
   month_n=12;
  else
   month_n=13;
  temp2=get_moon_day(month_n,table_addr);
  while(temp1>=temp2)
  {
   month_n--;
   temp1=temp1-temp2;
   temp2=get_moon_day(month_n,table_addr);
  }
}



}

/***********************特殊功能子函數***************************************/
/**************************星期設定******************************************/
void xingqi()
{
d_week();
switch(week)
{
  case 1:write_hz("一");break;
  case 2:write_hz("二");break;
  case 3:write_data(0xc8);write_data(0xfd);break;
  case 4:write_hz("四");break;
  case 5:write_hz("五");break;
  case 6:write_hz("六");break;
  case 0:write_hz("日");break;
  default:break;
}
}
/*************************生肖年設定*****************************************/
void shengxiao()
{
uchar sx=year1%12;
switch(sx)
{
  case 0:write_hz("龍");break;
  case 1:write_hz("蛇");break;
  case 2:write_hz("馬");break;
  case 3:write_hz("羊");break;
  case 4:write_hz("猴");break;
  case 5:write_hz("雞");break;
  case 6:write_hz("狗");break;
  case 7:write_hz("豬");break;
  case 8:write_hz("鼠");break;
  case 9:write_hz("牛");break;
  case 10:write_hz("虎");break;
  case 11:write_hz("兔");break;
  default:break;
}
}
/************************天干地支設定****************************************/
void tgdz()
{
uchar tiangan=year1_n%10;
uchar dizhi=year1_n%12;
switch(tiangan)
{
  case 4:write_hz("甲");break;
  case 5:write_hz("乙");break;
  case 6:write_hz("丙");break;
  case 7:write_hz("丁");break;
  case 8:write_hz("戊");break;
  case 9:write_hz("己");break;
  case 0:write_data(0xb8);write_data(0xfd);break;
  case 1:write_hz("辛");break;
  case 2:write_hz("壬");break;
  case 3:write_hz("葵");break;
  default:break;
}
switch(dizhi)
{
  case 8:write_hz("子");break;
  case 9:write_hz("丑");break;
  case 10:write_hz("寅");break;
  case 11:write_hz("卯");break;
  case 0:write_hz("辰");break;
  case 1:write_hz("巳");break;
  case 2:write_hz("午");break;
  case 3:write_hz("未");break;
  case 4:write_hz("申");break;
  case 5:write_hz("酉");break;
  case 6:write_hz("戌");break;
  case 7:write_hz("亥");break;
  default:break;
}
}
/*******************農歷月設定**********************************************/
void nongli_m()
{
if(month_n==0)
{
  switch(month_n)
  {
   case 1: write_hz("    ");write_data(0xd5);write_data(0xfd);break;  //正
   case 2: write_hz("    二");break;
   case 3: write_hz("    ");write_data(0xc8);write_data(0xfd);break;  //三
   case 4: write_hz("    四");break;
   case 5: write_hz("    五");break;
   case 6: write_hz("    六");break;
   case 7: write_hz("    七");break;
   case 8: write_hz("    八");break;
   case 9: write_hz("    九");break;
   case 10:write_hz("    十");break;
   case 11:write_hz("  十一");break;
   case 12:write_hz("  十二");break;
  }
}
else
{
  if((month_n-1)==month_r)
  {
   switch(month_n-1)
   {
    case 1: write_hz("  閏一");break;
    case 2: write_hz("  閏二");break;
    case 3: write_hz("  閏");write_data(0xc8);write_data(0xfd);break;
    case 4: write_hz("  閏四");break;
    case 5: write_hz("  閏五");break;
    case 6: write_hz("  閏六");break;
    case 7: write_hz("  閏七");break;
    case 8: write_hz("  閏八");break;
    case 9: write_hz("  閏九");break;
    case 10:write_hz("  閏十");break;
    case 11:write_hz("閏十一");break;
    case 12:write_hz("閏十二");break;
   }
  }
  else if(month_n<=month_r)
  {
   switch(month_n)
   {
    case 1: write_hz("    ");write_data(0xd5);write_data(0xfd);break;
    case 2: write_hz("    二");break;
    case 3: write_hz("    ");write_data(0xc8);write_data(0xfd);break;
    case 4: write_hz("    四");break;
    case 5: write_hz("    五");break;
    case 6: write_hz("    六");break;
    case 7: write_hz("    七");break;
    case 8: write_hz("    八");break;
    case 9: write_hz("    九");break;
    case 10:write_hz("    十");break;
    case 11:write_hz("  十一");break;
    case 12:write_hz("  十二");break;
   }
  }
  else
  {
   switch(month_n-1)
   {
    case 2: write_hz("    二");break;
    case 3: write_hz("    ");write_data(0xc8);write_data(0xfd);break;
    case 4: write_hz("    四");break;
    case 5: write_hz("    五");break;
    case 6: write_hz("    六");break;
    case 7: write_hz("    七");break;
    case 8: write_hz("    八");break;
    case 9: write_hz("    九");break;
    case 10:write_hz("    十");break;
    case 11:write_hz("  十一");break;
    case 12:write_hz("  十二");break;
   }
  }
}
}
/***********************農歷日設定******************************************/
void nongli_d()
{
switch(day_n)
{
  case 1: write_hz("初一  ");break;
  case 2: write_hz("初二  ");break;
  case 3: write_hz("初");write_data(0xc8);write_data(0xfd);write_hz("  ");break;
  case 4: write_hz("初四  ");break;
  case 5: write_hz("初五  ");break;
  case 6: write_hz("初六  ");break;
  case 7: write_hz("初七  ");break;
  case 8: write_hz("初八  ");break;
  case 9: write_hz("初九  ");break;
  case 10:write_hz("初十  ");break;
  case 11:write_hz("十一  ");break;
  case 12:write_hz("十二  ");break;
  case 13:write_hz("十");write_data(0xc8);write_data(0xfd);write_hz("  ");break;
  case 14:write_hz("十四  ");break;
  case 15:write_hz("十五  ");break;
  case 16:write_hz("十六  ");break;
  case 17:write_hz("十七  ");break;
  case 18:write_hz("十八  ");break;
  case 19:write_hz("十九  ");break;
  case 20:write_hz("廿十  ");break;
  case 21:write_hz("廿十一");break;
  case 22:write_hz("廿十二");break;
  case 23:write_hz("廿十");write_data(0xc8);write_data(0xfd);break;
  case 24:write_hz("廿十四");break;
  case 25:write_hz("廿十五");break;
  case 26:write_hz("廿十六");break;
  case 27:write_hz("廿十七");break;
  case 28:write_hz("廿十八");break;
  case 29:write_hz("廿十九");break;
  case 30:write_data(0xc8);write_data(0xfd);write_hz("十");write_hz("  ");break;
}
}

/************************節日函數*******************************************/
void holiday()
{  
while(1){
if(status==1)          {write_hz("    調整年份    ");break;}
if(status==2)          {write_hz("    調整月份    ");break;}
if(status==3)          {write_hz("    調整日期    ");break;}
if(status==4)          {write_hz("    調整小時    ");break;}
if(status==5)          {write_hz("    調整分鐘    ");break;}
if(month==1&&day==1)   {write_hz("    新年元旦    ");break;}
if(month==2&&day==14)  {write_hz("  今日情人節    ");break;}
if(month==3&&day==8)   {write_hz("  國際婦女節    ");break;}
if(month==3&&day==12)  {write_hz("  植樹節    ");break;}
if(hour>=22&&hour<=23) {write_hz("該準備睡咯~~~");break;}
if(hour>=0&&hour<4)    {write_hz("你,睡了嗎?Z~");break;}

}  
}
/**************************整點半點報時函數**********************************/
void time()
{
get_time();
if(min==0&&sec==0)
{
  num=0;
  delay(500);
}
if(min==0)
{
  if(hour==0)
  {   
   if(num<12)
   {
    beep=0;
    delay(1000);
    beep=1;
    num=num+1;
   }
  }
  if(hour>0&&hour<13)
  {
   if(num<hour)
   {
    beep=0;
    delay(1000);
    beep=1;
    num=num+1;
   }
  }
  if(hour>12&&hour<24)
  {
   if(num<hour-12)
   {
    beep=0;
    delay(1000);
    beep=1;
    num=num+1;
   }
  }
}
if(min==30&&sec==0)
{
  beep=0;
  delay(1000);
  beep=1;
}
}/***************************首頁函數*****************************************/
void shou()
{
write_code(0x80);
write_data(year2/10+0x30);write_data(year2%10+0x30);
write_data(year1/10+0x30);write_data(year1%10+0x30);
write_hz("年");
write_code(0x84);
write_hz("生肖");
shengxiao();
write_hz("年");
write_code(0x90);
write_data(month/10+0x30);write_data(month%10+0x30);
write_hz("月");
write_data(day/10+0x30);write_data(day%10+0x30);
write_hz("日");
write_code(0x95);
write_hz("星期");
xingqi();
write_code(0x88);
write_data(hour/10+0x30);write_data(hour%10+0x30);
write_data(0x3a);
write_data(min/10+0x30);write_data(min%10+0x30);
write_data(0x3a);
write_data(sec/10+0x30);write_data(sec%10+0x30);
write_code(0x8d);
write_data(temp/10+0x30);write_data(temp%10+0x30);
write_data(0x2e);write_data(xs+0x30);write_hz("℃");
write_code(0x98);
holiday();
}
/***************************次頁函數*****************************************/
void ci()
{
write_code(0x81);
write_hz("農歷");
write_code(0x84);
tgdz();
write_hz("年");
convert_yinyan(year1,month,day);
write_code(0x90);
nongli_m();
write_code(0x93);
write_hz("月");
nongli_d();
write_code(0x8a);
write_data(hour/10+0x30);write_data(hour%10+0x30);
write_data(0x3a);
write_data(min/10+0x30);write_data(min%10+0x30);
write_data(0x3a);
write_data(sec/10+0x30);write_data(sec%10+0x30);
write_code(0x98);         
write_hz("星期");
xingqi();
write_code(0x9d);
write_data(temp/10+0x30);write_data(temp%10+0x30);
write_data(0x2e);write_data(xs+0x30);write_hz("℃");
}
/*****************************主函數******************************************************/
void main()
{
init_12864();
delay(1000);
set_time();
while(1)
{
  if(set==0)
  shou();
  else
  ci();
  temp=read_tem();
  get_time();
  key_1();
  key_2();
  key_3();
  key_4();
  key_time();
  time();
}
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:57657 發表于 2021-12-28 06:29 | 只看該作者
多少M的晶振? delay和delay_DS18B20里的延時參數需要調整,軟件延時不好計算,具體多長時間用示波器或邏輯分析儀抓一下,并調到合適為止。
回復

使用道具 舉報

板凳
ID:57657 發表于 2021-12-28 10:20 | 只看該作者
你還可以改成這樣:

  1. void delay_DS18B20(uint i){
  2.         i *= 12;
  3.         for (; i; i--);
  4. }

  5. void delay(uint t){
  6.         uint b;
  7.         t *= 12;
  8.         for (; t; t--)
  9.                 for (b = 0; b < 121; b++);
  10. }
復制代碼
回復

使用道具 舉報

地板
ID:839438 發表于 2021-12-28 11:05 | 只看該作者
因該時晶振問題,你需要看下你的原來那個程序時什么晶振
回復

使用道具 舉報

5#
ID:242298 發表于 2021-12-28 11:16 | 只看該作者
晶振肯定是32.768kHz的啊,難道說的是單片機上的?12000Hz的
回復

使用道具 舉報

6#
ID:242298 發表于 2021-12-28 11:19 | 只看該作者
npn 發表于 2021-12-28 10:20
你還可以改成這樣:

關鍵是界面完整,不走時,按鍵沒效果。。。你這樣改好像不行啊。我1302的晶振是32.768kHz的。。。換了好幾個都還是這樣
回復

使用道具 舉報

7#
ID:242298 發表于 2021-12-28 11:29 | 只看該作者
npn 發表于 2021-12-28 06:29
多少M的晶振? delay和delay_DS18B20里的延時參數需要調整,軟件延時不好計算,具體多長時間用示波器或邏輯 ...

這個不走時和18B20有啥關系啊、。
回復

使用道具 舉報

8#
ID:57657 發表于 2021-12-28 11:51 | 只看該作者
leezll 發表于 2021-12-28 11:29
這個不走時和18B20有啥關系啊、。

1302的晶振32.768Khz 內部將其分頻成1Hz走秒計時,嚴禁換成其他頻率。
18B20沒有問題不用改,單片機晶振范圍 一般在4~35Mhz 之間,通常為12Mhz。
回復

使用道具 舉報

9#
ID:242298 發表于 2021-12-28 12:47 | 只看該作者
npn 發表于 2021-12-28 11:51
1302的晶振32.768Khz 內部將其分頻成1Hz走秒計時,嚴禁換成其他頻率。
18B20沒有問題不用改,單片機晶振 ...

請問這個程序怎么寫
回復

使用道具 舉報

10#
ID:57657 發表于 2021-12-28 13:02 | 只看該作者
leezll 發表于 2021-12-28 12:47
請問這個程序怎么寫

void main 函數的下一行 加一句 CLK_DIV = 0x03; 或者 CLK_DIV = 0x04;
回復

使用道具 舉報

11#
ID:242298 發表于 2021-12-28 13:22 | 只看該作者
npn 發表于 2021-12-28 13:02
void main 函數的下一行 加一句 CLK_DIV = 0x03; 或者 CLK_DIV = 0x04;

加了編譯就提示出錯。。。。。
回復

使用道具 舉報

12#
ID:57657 發表于 2021-12-28 15:47 | 只看該作者
leezll 發表于 2021-12-28 13:22
加了編譯就提示出錯。。。。。

檢查頭文件里有沒有這個寄存器
回復

使用道具 舉報

13#
ID:161164 發表于 2021-12-28 16:18 | 只看該作者
看了看代碼
有11個while循環
再按你的描述推理一下
可能卡在第253行的while(DQ);那里
(#include<STC12C5608AD.h>為第1行)
把它注釋掉再跑跑看
回復

使用道具 舉報

14#
ID:993066 發表于 2021-12-28 16:56 | 只看該作者
延時不能用while循環,用定時器。
回復

使用道具 舉報

15#
ID:57657 發表于 2021-12-28 20:45 | 只看該作者
while(DQ);  此處要加超時檢測,否則到猴年馬月都不會被拉低。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕综合 | 国产精品mv在线观看 | 中文字幕韩在线第一页 | 观看av| 日韩一区二区在线看 | 欧美成人精品一区二区三区 | 亚洲国产成人在线观看 | 欧美激情在线精品一区二区三区 | 国产精品观看 | 性一区 | 久久成人精品 | 欧美午夜一区 | 在线日韩不卡 | 久久国产秒 | 天天射影院| 99视频免费看 | 国产精品视频一区二区三区不卡 | 久久久久亚洲精品 | 国产91丝袜在线18 | 成人深夜福利 | 亚洲视频一区 | 日韩中文字幕在线视频观看 | 日韩三级电影一区二区 | 青青草国产在线观看 | 欧美亚洲成人网 | 欧美美女一区二区 | 极品电影院 | 综合久 | 亚洲精品在线视频 | 91 在线 | 亚洲男人网 | 九九综合| 国产精品国产三级国产aⅴ原创 | 欧美在线视频网站 | 亚洲一区 中文字幕 | 天天草视频 | 国产一区二区三区在线 | 91精品国产一二三 | a级毛片免费高清视频 | 久久av网| 成人黄色网址大全 |