职业卸杠选手🌙 woshinidage101
关注数: 495 粉丝数: 77 发帖数: 2,656 关注贴吧数: 44
新人求助,ds1302与51做的电子表程序的问题 程序如下 #include <reg51.h> #include <stdio.h> //#include "DS1302.h" #define uchar unsigned char #define uint unsigned int unsigned char time[7]; //Ëù¶ÁÈ¡µÄʱ¼ä char adjust_flag=0; sbit k1=P1^0; //¼ÓÊ® sbit k2=P1^1; //¼Ó·Ö sbit k3=P1^2; //×ßÃë sbit CLK = P1^5; //DS1302ʱÖÓÐźŠsbit IO = P1^6; //DS1302Êý¾ÝÐźŠsbit CE = P1^7; //DS1302ƬѡÐźŠuchar code duan_code[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40}; uchar display_code[]={0xff,0xff,0x40,0xff,0xff,0x40,0xff,0xff}; uchar bit_code[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //ÑÓ³Ùʱ¼äms¼¶ void delayms(unsigned int x) { unsigned char i; while(x--) for(i=0;i++;i<120); } void write_byte(unsigned char x) { unsigned char i; CLK=0; for(i=0;i<8;i++) { IO=x&0x01; CLK=1; CLK=0; x>>=1; } } void write_data(unsigned char addr,unsigned char dat) { CLK=0; CE=1; write_byte(addr); write_byte(dat); CLK=0; CE=0; } unsigned char read_byte(void) { unsigned char i,b,t; for(i=0;i<8;i++) { b>>=1; t=IO; b|=t<<7; CLK=1; CLK=0; } b=b/16*10+b%16; return (b); } unsigned char read_data(unsigned char addr) { unsigned char dat; CE=0; CLK=0; CE=1; write_byte(addr); dat=read_byte(); CLK=1; CE=0; return dat; } void set_1302() { write_data(0x8e,0x00); write_data(0x80,(time[0]/10<<4)|(time[0]%10)); write_data(0x82,(time[1]/10<<4)|(time[1]%10)); write_data(0x84,(time[2]/10<<4)|(time[2]%10)); write_data(0x8e,0x80); } void gettime() { time[0]=read_data(0x81); time[1]=read_data(0x83); time[2]=read_data(0x85); } void int0() interrupt 0 { TR0=0; if(k1==0) { delayms(5); if(k1==0) { adjust_flag=1; time[2]=(time[2]+1)%24; while(!k1); } } else if(k2==0) { delayms(5); if(k2==0) { adjust_flag=1; time[1]=(time[1]+1)%60; if(time[1]==0)time[2]++; while(!k2); } } else if(k3==0) { delayms(5); if(k3==0) { set_1302(); adjust_flag=0; // gettime(); while(!k3); } } TR0=1; } void main() { uchar i; IE=0X81; while(1) { if(adjust_flag==0) gettime(); display_code[0]=duan_code[time[2]/10]; display_code[1]=duan_code[time[2]%10]; display_code[3]=duan_code[time[1]/10]; display_code[4]=duan_code[time[1]%10]; display_code[6]=duan_code[time[0]/10]; display_code[7]=duan_code[time[0]%10]; for(i=0;i<8;i++) { P2=bit_code[i]; P0=display_code[i]; delayms(5); } } } 乱码是中文 忽略就好啦
1 下一页