資源簡介
本代碼是用在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?
- 上一篇:數控直流電壓源
- 下一篇:stc89c51AD庫
評論
共有 條評論