中原工学院信息商务学院课程设计
4.4 源程序代码
#include
#define uchar unsigned char #define uint unsigned int uchar
data_7seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; /*段码*/
uchar hour,min,sec; uchar year,mon,day; sbit shi=P1^0; sbit fen=P1^1; sbit miao=P1^2;
sbit key4=P1^3; /*时分秒切换调节键*/ sbit rst=P1^4; sbit sck=P1^5; sbit io=P1^6;
sbit fm=P1^7; /*函数声明:*/
void write_ds1302_byte(uchar dat);
void write_ds1302(uchar add,uchar dat); uchar read_ds1302(uchar add); void read_rtc(); void set_rtc(); void read_rtd(); void set_rtd(); void display(); void display1(); void delay(int n); void show(); void fmzz();
/*DS1302单字节写入:*/
void write_ds1302_byte(uchar dat) {
uchar i;
for (i=0;i<8;i++) {
sck=0;
io=dat&0x01; dat=dat>>1; sck=1;
10
中原工学院信息商务学院课程设计
} }
/*DS1302多字节写入:*/
void write_ds1302(uchar add,uchar dat) {
rst=0;_nop_(); sck=0;_nop_(); rst=1;_nop_();
write_ds1302_byte(add); write_ds1302_byte(dat); rst=0;_nop_(); io=1; sck=1; }
/*DS1302读取:*/
uchar read_ds1302(uchar add) {
uchar i,value; rst=0;_nop_(); sck=0;_nop_(); rst=1;_nop_();
write_ds1302_byte(add); for (i=0;i<8;i++) {
value=value>>1; sck=0;
if (io) value=value|0x80; sck=1; }
rst=0;_nop_();
sck=0;_nop_(); sck=1; io=1;
return value; }
/*调整时间:*/ void set_rtc() {
if (shi==0) delay(100); if (shi==0) {
hour=(hour>>4)*10+(hour&0x0f); hour++;
if (hour==24) hour=0;
11
中原工学院信息商务学院课程设计
hour=((hour/10)<<4)+(hour); write_ds1302(0x84,hour); }
if (fen==0) delay(100); if (fen==0) {
min=(min>>4)*10+(min&0x0f); min++;
if (min==60) min=0;
min=((min/10)<<4)+(min); write_ds1302(0x82,min); }
if (miao==0) delay(100); if (miao==0) {
sec=(sec>>4)*10+(sec&0x0f); sec++;
if (sec==60) sec=0;
sec=((sec/10)<<4)+(sec); write_ds1302(0x80,sec); } }
/*调整日期:*/ void set_rtd() {
if (shi==0) delay(100); if (shi==0) {
year=(year>>4)*10+(year&0x0f); year++;
if (year==99) year=0;
year=((year/10)<<4)+(year); write_ds1302(0x8C,year); }
if (fen==0) delay(100); if (fen==0) {
mon=(mon>>4)*10+(mon&0x0f); mon++;
if (mon==13) mon=0;
mon=((mon/10)<<4)+(mon);
12
中原工学院信息商务学院课程设计
write_ds1302(0x88,mon); }
if (miao==0) delay(100); if (miao==0) {
day=(day>>4)*10+(day&0x0f); day++;
if (day==31) sec=0;
day=((day/10)<<4)+(day); write_ds1302(0x86,day); } }
/*读取时间:*/ void read_rtc() {
hour=read_ds1302(0x85); min=read_ds1302(0x83); sec=read_ds1302(0x81); }
/*读取日期*/ void read_rtd() {
year=read_ds1302(0x8D); mon=read_ds1302(0x89); day=read_ds1302(0x87); }
/*显示时间:*/ void display() {
unsigned int a=1;
P2=0x01;P0=data_7seg[hour/16];delay(a); P2=0x02;P0=data_7seg[hour];delay(a); P2=0x04;P0=data_7seg[min/16];delay(a); P2=0x08;P0=data_7seg[min];delay(a); P2=0x10;P0=data_7seg[sec/16];delay(a); P2=0x20;P0=data_7seg[sec];delay(a); }
/*显示日期:*/ void display1()
13
中原工学院信息商务学院课程设计
{
unsigned int a=1;
P2=0x01;P0=data_7seg[year/16];delay(a); P2=0x02;P0=data_7seg[year];delay(a); P2=0x04;P0=data_7seg[mon/16];delay(a); P2=0x08;P0=data_7seg[mon];delay(a); P2=0x10;P0=data_7seg[day/16];delay(a); P2=0x20;P0=data_7seg[day];delay(a);
}
/*蜂鸣:*/ void fmzz() {
uint i;
for (i=0;i<100;i++) {
fm=!fm; delay(2); } }
/*延时程序:*/ void delay(int n) {
unsigned int i,j; for(i=0;i for(j=0;j<121;j++) {;} } } /*显示学号:*/ void show() { unsigned int m; for(m=0;m<20;m++) { uint a=10; P2=0x01;P0=data_7seg[0];delay(a); P2=0x02;P0=data_7seg[2];delay(a); P2=0x04;P0=data_7seg[4];delay(a); P2=0x08;P0=data_7seg[2];delay(a); P2=0x10;P0=data_7seg[2];delay(a); P2=0x20;P0=data_7seg[2];delay(a); } 14