物理与电子工程学院
附录2
程序清单:
#include
#define uchar unsigned char #define uint unsigned int sbit ACC0 = ACC^0; sbit ACC7 = ACC^7; sbit t=P1^0; sbit jia=P1^1; sbit jian=P1^2; sbit m=P1^3;
sbit T_CLK = P1^6; sbit T_IO = P3^5; sbit T_RST = P1^7; sbit E=P2^7; //1602 sbit RW=P2^6; sbit RS=P2^5;
void v_W1302(uchar ucAddr, uchar ucDa); uchar uc_R1302(uchar); uchar dectobcd(uchar bcd); uchar bcdtodec(uchar); void delay(uchar x) {
uchar i; while(x--)
for(i=0;i<110;i++); }
void enable(uchar del) {
RS = 0; RW = 0; P0 = del; E = 1; delay(3); E=0; }
void write(uchar del)
16
物理与电子工程学院
{
RS = 1; RW = 0; P0 = del; E = 1; delay(3); E=0; }
void L1602_init(void) {
enable(0x01); enable(0x38); enable(0x06); enable(0x0c); E=0; }
void L1602_char(uchar hang,uchar lie,char sign) {
uchar a;
//if(hang == 1) a = 0x80; if(hang == 2) a = 0xc0; a = a + lie - 1; enable(a); write(sign); }
void timechange() {
uchar a,num=1; uchar hour,min,sec;
while(num) {
if(t==0) delay(5); if(t==0) {
num++; // beep(); while(!t); }
17
物理与电子工程学院
if(m==0) delay(5); if(m==0) num=0;
enable(0x0f);
a=uc_R1302(0x81)|0x80; v_W1302(0x8e,0); v_W1302(0x80,a);
if(num==4) num=1; if(num==1) {
enable(0xc0+12); if(jia==0) delay(5); if(jia==0) {
while(!jia);
sec=bcdtodec(uc_R1302(0x81)&0x7f); sec++; if(sec>59) sec=0;
L1602_char(2, 12, sec/10/**/+48); L1602_char(2, 13, sec + 48);
v_W1302(0x80,dectobcd(sec)|0x80); } if(jian==0) delay(5); if(jian==0) { while(!jian); sec=bcdtodec(uc_R1302(0x81)); sec--; if(sec==-1) sec=59; L1602_char(2, 12, sec/10/**/+48); L1602_char(2, 13, sec + 48); v_W1302(0x80,dectobcd(sec)|0x80); } } if(num==2) {
18
物理与电子工程学院
enable(0xc0+9); if(jia==0) delay(5); if(jia==0) {
min = bcdtodec(uc_R1302(0x83)); min++; while(!jia); if(min>59) min=0;
L1602_char(2, 9, min / 10 /*% 10 */+ 48); L1602_char(2, 10, min % 10 + 48); v_W1302(0x82,dectobcd(min)); }
if(jian==0) delay(5); if(jian==0) {
min = bcdtodec(uc_R1302(0x83)); min--;
while(!jian); if(min==-1) min=59;
L1602_char(2, 9, min / 10/*% 10 */+ 48); L1602_char(2, 10, min % 10 + 48); v_W1302(0x82,dectobcd(min)); } }
if(num==3) {
enable(0xc0+6); if(jia==0) delay(5); if(jia==0) { hour = bcdtodec(uc_R1302(0x85)); hour++; while(!jia); if(hour>23) hour=0; L1602_char(2, 6, hour / 10 /*% 10*/ + 48); L1602_char(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour)); }
19
物理与电子工程学院
if(jian==0) delay(5); if(jian==0) { while(!jian); hour = bcdtodec(uc_R1302(0x85)); hour--; if(hour==-1) hour=23; L1602_char(2, 6, hour / 10/* % 10*/+ 48); L1602_char(2, 7, hour % 10 + 48); v_W1302(0x84,dectobcd(hour)); } } }
if(num==0) {
enable(0x0c); }
v_W1302(0x80,uc_R1302(0x81)&0x7f); }
void v_RTInputByte(uchar ucDa) {
uchar i;
ACC = ucDa; T_RST = 1; for(i=8; i>0; i--) {
T_IO = ACC0; T_CLK = 1; T_CLK = 0;
ACC = ACC >> 1; } }
uchar uc_RTOutputByte(void) {
uchar i; T_RST = 1;
for(i=8; i>0; i--) {
ACC = ACC >>1;
20