📄 ht1380_time1.lst
字号:
C51 COMPILER V7.20 HT1380_TIME1 07/12/2007 10:17:00 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE HT1380_TIME1
OBJECT MODULE PLACED IN ht1380_time1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ht1380_time1.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2
3 /*****定义ht1380芯片接口********/
4 // ht1380 ht1380_sclk --->P1.0
5 // ht1380 I/O --->P1.1
6 // ht1380 ht1380_rest --->P1.2
7 sbit ht1380_sclk=P1^0;
8 sbit ht1380_data=P1^1;
9 sbit ht1380_rest=P1^2;
10 /**********定义两个全局变量*********/
11 //定义数组变量用于存放四个数码管的显示数据
12 //定义number存放动态显示是第几个数码管
13 unsigned char d[4],number;
14
15 /*********定义时间变量年月日时分秒***********/
16 unsigned char year,month,day,hour,minute,second;
17 /**********定义冒号变量 distime=1 是数码管冒号显示出来************/
18 bit distime;
19
20 /*******与数码管相关的两个表*********/
21 //一个显示译码表
22 //一个使能译码表
23 unsigned char code tab[10]={0x3f,6,0x5b,0x4f,0x66,0x6d,0x7d,7,0x7f,0x6f};
24 unsigned char code digit[4]={0xf8,0xf4,0xf2,0xf1};
25
26 /******延时程序***********/
27 void delay(unsigned char dy)
28 {
29 1 while(--dy);
30 1 }
31 /******* ht1380 子程序*****************/
32 //------------- sent_char to ht1380----------
33 //上升沿写入
34 void sent_char(unsigned char sentchar)
35 {
36 1 unsigned char ii;
37 1
38 1 for(ii=0;ii<8;ii++)
39 1 {
40 2 ht1380_sclk=0;
41 2 if ((sentchar & 1)!=0) ht1380_data=1;
42 2 else ht1380_data=0;
43 2 ht1380_sclk=1;
44 2 sentchar=sentchar>>1;
45 2 }
46 1 }
47 //------------- get_char from ht1380---------
48 unsigned char get_char()
49 {
50 1 unsigned char getchar,ii,temp;
51 1 getchar=0;temp=1;
52 1 for(ii=0;ii<8;ii++)
53 1 {
54 2 ht1380_sclk=0;
55 2 ht1380_data=1;
C51 COMPILER V7.20 HT1380_TIME1 07/12/2007 10:17:00 PAGE 2
56 2 if(ht1380_data==1) getchar=getchar |temp;
57 2 ht1380_sclk=1;
58 2 temp=temp<<1;
59 2 }
60 1 return(getchar);
61 1 }
62
63 //-------------set_wp_off------------------
64 void set_wp_off()
65 {
66 1 ht1380_rest=1;
67 1 sent_char(0x8e); //10001110b
68 1 sent_char(0); //00000000b
69 1 ht1380_sclk=0;
70 1 ht1380_rest=0;
71 1 }
72 //-----------set_wp_on--------------------
73 void set_wp_on()
74 {
75 1 ht1380_rest=1;
76 1 sent_char(0x8e); //10001110b
77 1 sent_char(0x80); //10000000b
78 1 ht1380_sclk=0;
79 1 ht1380_rest=0;
80 1 }
81 //----------read_time --------------------
82 void read_time()
83 {
84 1 unsigned char temp;
85 1 ht1380_rest=1;
86 1 sent_char(0xbf); //10111111b
87 1 second=get_char();
88 1 minute=get_char();
89 1 hour= get_char();
90 1 day= get_char();
91 1 month= get_char();
92 1 temp= get_char(); /* week day */
93 1 year= get_char();
94 1 temp= get_char();
95 1 ht1380_sclk=0;
96 1 ht1380_rest=0;
97 1
98 1 }
99 //--------------set time-----------------
100 void set_time()
101 {
102 1 set_wp_off();
103 1 ht1380_rest=1;
104 1 sent_char(0xbe); //10111110b
105 1 sent_char(second);
106 1 sent_char(minute);
107 1 sent_char(hour);
108 1 sent_char(day);
109 1 sent_char(month);
110 1 sent_char(1); /* week day */
111 1 sent_char(year);
112 1 sent_char(0);
113 1 ht1380_sclk=0;
114 1 ht1380_rest=0;
115 1 set_wp_on();
116 1 }
117
C51 COMPILER V7.20 HT1380_TIME1 07/12/2007 10:17:00 PAGE 3
118 /*****定时器初始化程序*******/
119 void Init_Timer (void)
120 {
121 1 TMOD=0x21;
122 1 TH0=(65536-1000)/256;
123 1 TL0=(65536-1000)%256;
124 1 TR0=1;
125 1 ET0=1;
126 1 EA=1;
127 1 }
128
129 /*****定时器0中断服务程序******/
130 //显示处理,具体可以参考前面的实验
131 void timer0() interrupt 1 using 1
132 {
133 1 TH0=(65536-1000)/256;
134 1 TL0=(65536-1000)%256;
135 1 number=number++;
136 1 if(number>3) number=0;
137 1 P2=digit[number];
138 1 P0=tab[d[number]];
139 1 //在第二个数码管显示时,将最高位的小数点显示出来,这里为冒号
140 1 if(distime==1 && number==1)
141 1 P0=tab[d[number]]+0x80;
142 1 }
143 /*******主函数***********/
144 //效果:显示 分:秒
145 void main (void)
146 {
147 1 year=07;month=03;day=0x04;hour=0x19;minute=0x16;second=0x13; //软件预设时间参数
148 1 ht1380_rest=0;ht1380_sclk=0; //选中时钟芯片
149 1 set_time(); //设置时间
150 1 Init_Timer(); //初始化定时器及全局变量
151 1 number=0;
152 1 distime=1;
153 1 while(1)
154 1 {
155 2 read_time();
156 2 // d[0]=hour/16;
157 2 // d[1]=hour %16;
158 2 // d[2]=minute/16;
159 2 // d[3]=minute %16;
160 2 d[0]=minute/16;
161 2 d[1]=minute%16;
162 2 d[2]=second/16;
163 2 d[3]=second%16;
164 2 delay(250);
165 2 }
166 1 }
167
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 350 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -