找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4013|回复: 3
收起左侧

16x64点阵屏时钟程序

[复制链接]
ID:79544 发表于 2016-6-21 12:14 | 显示全部楼层 |阅读模式
点阵屏不一样所以驱动也不一样。点阵屏的接口是标准8x2接口,用8/1扫描、
  1. #include "STC12C5A60S2.h"
  2. #include <intrins.h>  
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. uchar l_tmpDate[]={0,0,0,1,1,1,13};//秒分时日月周年08-05-15 12:00:00

  6. uchar l_tmpdisplay[15];   
  7. code uchar Write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位  
  8. code uchar Read_RTC_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};  
  9. sbit SCK = P1^3; //DS1302时钟;  
  10. sbit SDA = P1^4; //DS1302数据;  
  11. sbit RST = P1^5;// DS1302复位;   
  12. uchar set=0; //按键选择标志位;
  13. char key_flag=0;//按键加减标志位;
  14. uchar menue=0; //菜单选择标志位;
  15. uchar ok=0;  //确认标志位;  
  16. char miao,fen,shi,ri,yue,zhou,nian;/*时间日期数值标志位;*/
  17. /////////////DS1302写一个字节/////
  18. void Write_Ds1302_Byte(uchar temp)  
  19. {   
  20.         uchar i;   
  21.         for (i=0;i<8;i++)      //循环8次 写入数据  
  22.         {     
  23.                  SCK=0;      
  24.                 SDA=temp&0x01;     //每次传输低字节      
  25.                 temp>>=1;   //右移一位      
  26.                 SCK=1;   
  27.         }
  28. }
  29. /*****************/ /*                  
  30. 写入DS1302                                    
  31. */ /************************/
  32. void Write_Ds1302(uchar address,uchar dat )      
  33. {   
  34.         RST=0;  _nop_();   
  35.         SCK=0;  _nop_();   
  36.         RST=1;       _nop_();                    //启动   
  37.         Write_Ds1302_Byte(address); //发送地址   
  38.         Write_Ds1302_Byte(dat);  //发送数据   
  39.         RST=0;                //恢复
  40. }
  41. /***************/ /*                  
  42. 读出DS1302数据                              
  43. */ /*********************/
  44. uchar Read_Ds1302 ( uchar address )
  45. {     
  46.         uchar i,temp=0x00;     
  47.         RST=0;  _nop_();  _nop_();   
  48.         SCK=0;  _nop_();  _nop_();   
  49.         RST=1;  _nop_();
  50.         _nop_();   
  51.         Write_Ds1302_Byte(address);     
  52.         for (i=0;i<8;i++)   //循环8次 读取数据   
  53.         {      
  54.                 if(SDA)   
  55.                 {   
  56.                         temp|=0x80;   
  57.                 }   //每次传输低字节   
  58.                 temp>>=1;   //右移一位   
  59.                 SCK=1;     _nop_();     _nop_();   
  60.                 SCK=0;   
  61.         }
  62.         RST=0;  _nop_();            
  63. //以下为DS1302复位的稳定时间   
  64.         _nop_();  
  65.         RST=0;  
  66.         SCK=0;  _nop_();  _nop_();  _nop_();  _nop_();  
  67.         SCK=1;  _nop_();  _nop_();  
  68.         SDA=0;  _nop_();  _nop_();  
  69.         SDA=1;  _nop_();  _nop_();  
  70.         return (temp);   //返回
  71. }
  72. /**************************/ /*                  
  73. 读时钟数据                                   
  74. */ /***********************/
  75. void Read_RTC(void)         //读取 日历
  76. {   
  77.         uchar i,*p;   
  78.         p=Read_RTC_address;      //地址传递  
  79.         for(i=0;i<7;i++)      //分7次读取 秒分时日月周年
  80.         {   
  81.                 l_tmpDate[i]=Read_Ds1302(*p);   
  82.                 p++;  
  83.         }   
  84. }
  85. /***************************/ /*                  
  86. 设定时钟数据                                 
  87. */ /************************/
  88. void Set_RTC(void)      //设定 日历
  89. {  
  90.         uchar i,*p,tmp;  
  91.         for(i=0;i<7;i++)         
  92.         {           //BCD处理   
  93.                 tmp=l_tmpDate[i]/10;   
  94.                 l_tmpDate[i]=l_tmpDate[i]%10;   
  95.                 l_tmpDate[i]=l_tmpDate[i]+tmp*16;   
  96.         }      
  97.         Write_Ds1302(0x8E,0X00); //关闭写保护;      
  98.         p=Write_rtc_address; //传地址   
  99.         for(i=0;i<7;i++)  //7次写入 秒分时日月周年   
  100.         {     
  101.                 Write_Ds1302(*p,l_tmpDate[i]);      
  102.                 p++;   
  103.         }   
  104.         Write_Ds1302(0x8E,0x80); //打开写保护;  
  105. }
  106. /*********8x16字模 ****************************/
  107. //取模方式:逐行式 逆向 阴码  宽x高=8x16
  108. uchar code table[]={
  109. /*--  文字:  0  --*/  /*--  宋体12;  
  110. 此字体下对应的点阵为:宽x高=8x16   --*/  
  111. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,
  112. 0x24,0x18,0x00,0x00,
  113. /*--  文字:  1  --*/  /*--  宋体12;  
  114. 此字体下对应的点阵为:宽x高=8x16   --*/  
  115. 0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,
  116. 0x08,0x3E,0x00,0x00,   
  117. /*--  文字:  2  --*/  /*--  宋体12;  
  118. 此字体下对应的点阵为:宽x高=8x16   --*/  
  119. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,
  120. 0x42,0x7E,0x00,0x00,   
  121. /*--  文字:  3  --*/  /*--  宋体12;  
  122. 此字体下对应的点阵为:宽x高=8x16   --*/  
  123. 0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,
  124. 0x22,0x1C,0x00,0x00,   
  125. /*--  文字:  4  --*/  /*--  宋体12;  
  126. 此字体下对应的点阵为:宽x高=8x16   --*/  
  127. 0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,
  128. 0x20,0x78,0x00,0x00,   
  129. /*--  文字:  5  --*/  /*--  宋体12;  
  130. 此字体下对应的点阵为:宽x高=8x16   --*/  
  131. 0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,
  132. 0x22,0x1C,0x00,0x00,
  133. /*--  文字:  6  --*/  /*--  宋体12;  
  134. 此字体下对应的点阵为:宽x高=8x16   --*/  
  135. 0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,
  136. 0x24,0x18,0x00,0x00,   
  137. /*--  文字:  7  --*/  /*--  宋体12;  
  138. 此字体下对应的点阵为:宽x高=8x16   --*/  
  139. 0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,
  140. 0x08,0x08,0x00,0x00,   
  141. /*--  文字:  8  --*/  /*--  宋体12;  
  142. 此字体下对应的点阵为:宽x高=8x16   --*/  
  143. 0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,
  144. 0x42,0x3C,0x00,0x00,   
  145. /*--  文字:  9  --*/  /*--  宋体12;  
  146. 此字体下对应的点阵为:宽x高=8x16   --*/  
  147. 0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,
  148. 0x24,0x1C,0x00,0x00,   
  149. /*--  文字:  -  --*///10;  /*--  宋体12;  
  150. //此字体下对应的点阵为:宽x高=8x16   --*/  
  151. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x00,0x00,0x00,
  152. 0x00,0x00,0x00,0x00,




  153. /*--  文字:  :  --*///11;  /*--  宋体12;  
  154. //此字体下对应的点阵为:宽x高=8x16   --*/  
  155. ////0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x00,
  156. //0x18,0x18,0x00,0x00,0x00,0x00,

  157. 0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
  158. 0x18,0x18,0x00,0x00,
  159. /*--  文字:  _  --*///12  /*--  宋体12;  
  160. //此字体下对应的点阵为:宽x高=8x16   --*/  
  161. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  162. 0x00,0x00,0x00,0xFF,   
  163. /****************空格****13*****************/
  164. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  0x00,0x00,0x00,
  165. 0x00,0x00,0x00,0x00,0x00,/*" ",0*/
  166. //////////////C//14//////////////
  167. //取模方式:逐行式 逆向 阴码  宽x高=8x16
  168. 0x00,0x00,0x3C,0x3E,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02,
  169. 0x02,0x3E,0x3C,0x00,

  170. //14   'a'-83;  
  171. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,  0x42,0x78,0x44,
  172. 0x42,0x42,0xFC,0x00,0x00,/*"a",0*/   
  173. 0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x1A,  
  174. 0x26,0x42,0x42,0x42,0x26,0x1A,0x00,0x00,/*"b",1*/   
  175. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,  
  176. 0x44,0x02,0x02,0x02,0x44,0x38,0x00,0x00,/*"c",2*/   
  177. 0x00,0x00,0x00,0x60,0x40,0x40,0x40,0x78,  
  178. 0x44,0x42,0x42,0x42,0x64,0xD8,0x00,0x00,/*"d",3*/   
  179. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,  
  180. 0x42,0x7E,0x02,0x02,0x42,0x3C,0x00,0x00,/*"e",4*/   
  181. 0x00,0x00,0x00,0xF0,0x88,0x08,0x08,0x7E,  
  182. 0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"f",5*/   
  183. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,  
  184. 0x22,0x22,0x1C,0x02,0x3C,0x42,0x42,0x3C,/*"g",6*/
  185. 0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x3A,  
  186. 0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"h",7*/   
  187. 0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x0E,  
  188. 0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"i",8*/   
  189. 0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x38,  
  190. 0x20,0x20,0x20,0x20,0x20,0x20,0x22,0x1E,/*"j",9*/   
  191. 0x00,0x00,0x00,0x03,0x02,0x02,0x02,0x72,  
  192. 0x12,0x0A,0x16,0x12,0x22,0x77,0x00,0x00,/*"k",10*/   
  193. 0x00,0x00,0x00,0x0E,0x08,0x08,0x08,0x08,  
  194. 0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00,/*"l",11*/
  195. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,  
  196. 0x92,0x92,0x92,0x92,0x92,0xB7,0x00,0x00,/*"m",12*/   
  197. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3B,  
  198. 0x46,0x42,0x42,0x42,0x42,0xE7,0x00,0x00,/*"n",13*/   
  199. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,  
  200. 0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,/*"o",14*/   
  201. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,  
  202. 0x26,0x42,0x42,0x42,0x22,0x1E,0x02,0x07,/*"p",15*/   
  203. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,  
  204. 0x44,0x42,0x42,0x42,0x44,0x78,0x40,0xE0,/*"q",16*/   
  205. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x77,  
  206. 0x4C,0x04,0x04,0x04,0x04,0x1F,0x00,0x00,/*"r",17*/   
  207. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7C,  
  208. 0x42,0x02,0x3C,0x40,0x42,0x3E,0x00,0x00,/*"s",18*/
  209. 0x00,0x00,0x00,0x00,0x00,0x08,0x08,0x3E,  
  210. 0x08,0x08,0x08,0x08,0x08,0x30,0x00,0x00,/*"t",19*/   
  211. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x63,  
  212. 0x42,0x42,0x42,0x42,0x62,0xDC,0x00,0x00,/*"u",20*/   
  213. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,  
  214. 0x42,0x24,0x24,0x14,0x08,0x08,0x00,0x00,/*"v",21*/   
  215. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xEB,  
  216. 0x49,0x49,0x55,0x55,0x22,0x22,0x00,0x00,/*"w",22*/   
  217. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x76,  
  218. 0x24,0x18,0x18,0x18,0x24,0x6E,0x00,0x00,/*"x",23*/   
  219. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE7,  
  220. 0x42,0x24,0x24,0x14,0x18,0x08,0x08,0x07,/*"y",24*/   
  221. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7E,  
  222. 0x22,0x10,0x08,0x08,0x44,0x7E,0x00,0x00,/*"z",25*/
  223. };
  224. /************16x16 字模 ***************/
  225. //取模方式:逐行式 逆向 阴码  宽x高=16x16
  226. uchar code table1[]={   
  227. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  228. 0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x7F,
  229. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  230. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"一",0*/

  231. 0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,
  232. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  233. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  234. 0xFF,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,/*"二",1*/
  235.   
  236. 0x00,0x00,0x00,0x00,0xFE,0x3F,0x00,0x00,
  237. 0x00,0x00,0x00,0x00,0x00,0x00,0xFC,0x1F,
  238. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  239. 0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,/*"三",2*/
  240.   
  241. 0x00,0x00,0x00,0x00,0xFE,0x3F,0x22,0x22,
  242. 0x22,0x22,0x22,0x22,0x22,0x22,0x22,0x22,
  243. 0x12,0x22,0x12,0x3C,0x0A,0x20,0x06,0x20,  
  244. 0x02,0x20,0xFE,0x3F,0x02,0x20,0x00,0x00,/*"四",3*/   
  245. 0x00,0x00,0xFE,0x3F,0x40,0x00,0x40,0x00,
  246. 0x40,0x00,0x40,0x00,0xFC,0x0F,0x20,0x08,
  247. 0x20,0x08,0x20,0x08,0x20,0x08,0x10,0x08,  
  248. 0x10,0x08,0x10,0x08,0xFF,0x7F,0x00,0x00,/*"五",4*/
  249. 0x40,0x00,0x80,0x00,0x00,0x01,0x00,0x01,
  250. 0x00,0x00,0xFF,0x7F,0x00,0x00,0x00,0x00,
  251. 0x20,0x02,0x20,0x04,0x10,0x08,0x10,0x10,  
  252. 0x08,0x10,0x04,0x20,0x02,0x20,0x00,0x00,/*"六",5*/   
  253. 0x00,0x00,0xF8,0x0F,0x08,0x08,0x08,0x08,
  254. 0x08,0x08,0x08,0x08,0x08,0x08,0xF8,0x0F,
  255. 0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,  
  256. 0x08,0x08,0x08,0x08,0xF8,0x0F,0x08,0x08,/*"日",6*/   
  257. 0x00,0x00,0xF8,0x0F,0x08,0x08,0xF8,0x0F,
  258. 0x08,0x08,0xF8,0x0F,0x80,0x00,0x88,0x00,
  259. 0xF8,0x1F,0x84,0x00,0x82,0x00,0xF8,0x0F,
  260. 0x80,0x00,0x80,0x00,0xFE,0x3F,0x00,0x00,/*"星",7*/   
  261. 0x44,0x00,0x44,0x3E,0xFE,0x22,0x44,0x22,
  262. 0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,0x22,
  263. 0x7C,0x22,0x44,0x3E,0x44,0x22,0xFF,0x22,  
  264. 0x20,0x21,0x44,0x21,0x82,0x28,0x41,0x10,/*"期",8*/

  265. 0x00,0x00,0xE0,0x0F,0x62,0x0C,0xE6,0x0F,0x6C,0x0C,
  266. 0xEA,0x0F,0x06,0x00,0xF4,0x1F,0x3C,0x18,0xB0,0x1A,
  267. 0xBC,0x1A,0xB4,0x1A,0xB2,0x1A,0xFB,0x3F,0xF9,0x3F,
  268. 0x00,0x00,  /////////////////////温////9//

  269. 0x00,0x00,0xC0,0x00,0x80,0x00,0xFC,0x0F,0x0C,0x00,
  270. 0x6C,0x03,0xFC,0x0F,0x6C,0x03,0xEC,0x03,0x0C,0x00,
  271. 0xEC,0x07,0x6C,0x06,0xCC,0x03,0x66,0x06,0x33,0x0C,
  272. 0x00,0x00,/////////////////度、、、、、、10//

  273. 0x00,0x00,0x0C,0x00,0xFC,0x1F,0x0C,0x00,0xF6,0x07,
  274. 0xB0,0x01,0xB0,0x01,0xB0,0x01,0xFC,0x0F,0x80,0x01,
  275. 0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x00,0x00,
  276. 0x00,0x00,///////////年、、、、、、、、、11//

  277. 0x00,0x00,0xF8,0x0F,0x18,0x0C,0x18,0x0C,0x18,0x0C,
  278. 0xF8,0x0D,0x18,0x0C,0x18,0x0C,0xF8,0x0D,0x18,0x0C,
  279. 0x18,0x0C,0x1C,0x0C,0x1C,0x0C,0x0E,0x0F,0x06,0x06,
  280. 0x00,0x00,///////////月////////////12///

  281. //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  282. //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,   
  283. //9; //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  284. //0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,  
  285. };
复制代码
  1. /***********************************************************
  2.         功   能:16x64点阵屏加DS1302显示时间
  3.         单片机:STC12C5A60S2
  4.         晶  振:22.1184M
  5.         作  者:苏义江改编自网络
  6.         时  间:2016-6-18日
  7. ***********************************************************/
  8. #include <STC12C5A60S2.h>
  9. #include "macroandconst.h"
  10. #include  <intrins.h>
  11. #define uchar unsigned char
  12. #define uint unsigned int


  13. sbit R =P2^6; //上半屏数据
  14. sbit R1=P2^7; //下半屏数据
  15. sbit CLK=P2^4;   //74HC595的移位时钟 SHCP
  16. sbit STB=P2^3;   //输出锁存  STCP 595锁存信号

  17. //行扫描
  18. sbit A1   =P2^0;
  19. sbit B1   =P2^1;
  20. sbit C1   =P2^2;
  21. sbit OE   =P2^5;    //74HC138的使能

  22. sbit fmq  =P1^7;//蜂鸣器
  23. //按键
  24. sbit keymenue =P0^2; //功能
  25. sbit keyup    =P0^3; //加
  26. sbit keydown  =P0^4; //减
  27. sbit keyswitch=P0^5; //调整移位
  28. sbit keyok    =P0^6; //确认

  29. sbit DQ  =P1^6; //DS18B20的数据输入/输出脚DQ,根据情况设定
  30. //sbit wei =P2^7;//数码管位选573使能
  31. //sbit duan=P2^6;//数码管段选573使能
  32. uchar code smg[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,
  33.                                                 0x82,0xF8,0x80,0x90,0xBF}; //显示段码


  34. extern uchar code table[];
  35. extern uchar code table1[];  
  36. extern uchar set; //按键选择标志位;
  37. extern char key_flag;//按键加减标志位;
  38. extern uchar menue; //菜单选择标志位;
  39. extern uchar ok;  //确认标志位;

  40. uint sdata;//测量到的温度的整数部分
  41. uchar xiaoshu1;//小数第一位
  42. uchar xiaoshu2;//小数第二位
  43. uchar xiaoshu;//两位小数
  44. bit  fg=1; //温度正负标志

  45. uint temp;              //温度值


  46. extern char miao,fen,shi,ri,yue,zhou,nian;/*时间日期数值标志位;*/
  47. extern uchar l_tmpDate[];//秒分时日月周年08-05-15 12:00:00
  48. extern uchar l_tmpdisplay[];   
  49. extern void Write_Ds1302(uchar address,uchar dat );
  50. extern void Read_RTC(void);
  51. void data_change();
  52. uint num;

  53. void Delay10ms()  //@11.0592MHz
  54. {  
  55.         uchar i, j;   
  56.         i = 108;  
  57.         j = 145;  
  58.         do  
  59.         {   
  60.         while (--j);  
  61.         }
  62.         while (--i);
  63. }
  64. //STC12C5A单片机定时1us DS18B20延时
  65. void  delay_b20(uchar n)
  66. {   
  67.         while(n--)
  68.           {
  69.                   _nop_();       
  70.           }   
  71. }

  72. bit Init_DS18B20(void) //发送复位
  73. {                              
  74.         bit flag;         //储存DS18B20是否存在的标志,flag=0,表示存在;flag=1,表示不存在   
  75.         DQ = 1;           //先将数据线拉高   
  76.         delay_b20(1); //略微延时约6微秒      ;  
  77.         DQ = 0;           //再将数据线从高拉低,要求保持480~960us  
  78.         delay_b20(500); //略微延时约600微秒       ;         
  79. //以向DS18B20发出一持续480~960us的低电平复位脉冲   
  80.         DQ = 1;           //释放数据线(将数据线拉高)   
  81.         delay_b20(60);   //延时约30us(释放总线后需等待15~60us让DS18B20输出存在脉冲)  
  82.         flag=DQ;          //让单片机检测是否输出了存在脉冲(DQ=0表示存在)        
  83.         delay_b20(500); //延时足够长时间,等待存在脉冲输出完毕       ;   
  84.         return flag;    //返回检测成功标志
  85. }               
  86. uchar ReadOneChar(void)  
  87. {   
  88.         uchar i=0;   
  89.         uchar dat;  //储存读出的一个字节数据   
  90.         for (i=0;i<8;i++)   
  91.         {           
  92.                 DQ =1;       // 先将数据线拉高      
  93.                 delay_b20(1);     //等待一个机器周期        
  94.                 DQ = 0;      //单片机从DS18B20读书据时,将数据线从高拉低即启动读时序      
  95.                 delay_b20(1);     //等待一个机器周期         
  96.                 DQ = 1;     //将数据线"人为"拉高,为单片机检测DS18B20的输出电平作准备     
  97.                 delay_b20(1);               ;      //延时约6us,使主机在15us内采样      
  98.                 dat>>=1;      
  99.                 if(DQ==1)         
  100.                 dat|=0x80;  //如果读到的数据是1,则将1存入dat   
  101.                 else     
  102.                 dat|=0x00;//如果读到的数据是0,则将0存入dat        //将单片机检测到的电平信号DQ存入r[i]      
  103.                 delay_b20(60);         ;              //延时3us,两个读时序之间必须有大于1us的恢复期      
  104.         }                        
  105.         return(dat);    //返回读出的十六进制数据
  106. }

  107. void WriteOneChar(uchar dat)
  108. {  
  109.         uchar i=0;  
  110.         for (i=0; i<8; i++)   
  111.         {     
  112.                 DQ =1;         // 先将数据线拉高     
  113.                 delay_b20(1);      //等待一个机器周期      
  114.                 DQ=0;          //将数据线从高拉低时即启动写时序           
  115.                 DQ=dat&0x01;   //利用与运算取出要写的某位二进制数据,      
  116.                   //并将其送到数据线上等待DS18B20采样     
  117.                 delay_b20(60);         ;
  118. //延时约30us,DS18B20在拉低后的约15~60us期间从数据线上采样     
  119.                 DQ=1;          //释放数据线           
  120.                 delay_b20(60);
  121.                 dat>>=1;       //将dat中的各二进制位数据右移1位   
  122.         }   
  123.         delay_b20(1);
  124. }
  125. void ReadyReadTemp(void)
  126. {        
  127.         Init_DS18B20();     //将DS18B20初始化   
  128.         WriteOneChar(0xCC); // 跳过读序号列号的操作  
  129.         WriteOneChar(0x44); // 启动温度转换         
  130.         delay_b20(200); //转换一次需要延时一段时间      
  131.         Init_DS18B20();     //将DS18B20初始化   
  132.         WriteOneChar(0xCC); //跳过读序号列号的操作   
  133.         WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位  
  134. }


  135. uchar doe[4];
  136. uint wendu_duzhuanhuan()
  137. {
  138.         uint a,b,t;
  139.         Init_DS18B20();     //将DS18B20初始化   
  140.         WriteOneChar(0xCC); // 跳过读序号列号的操作  
  141.         WriteOneChar(0x44); // 启动温度转换         
  142.         delay_b20(200); //转换一次需要延时一段时间      
  143.         Init_DS18B20();     //将DS18B20初始化   
  144.         WriteOneChar(0xCC); //跳过读序号列号的操作   
  145.         WriteOneChar(0xBE); //读取温度寄存器,前两个?
  146.         a=ReadOneChar();
  147.         b=ReadOneChar();
  148.         t=b;
  149.         t<<=8;
  150.         t=t|a;
  151.         t=t*0.6250+0.5;
  152.         return t;
  153. }
  154. void wenduzhuan()
  155. {
  156.         uint tp;
  157.         tp=wendu_duzhuanhuan();
  158.         doe[0]=tp/1000;
  159.         doe[1]=tp%1000/100;
  160.         doe[2]=tp%100/10;
  161.         doe[3]=tp%10;
  162. }

  163. void key()
  164. {     
  165. /*判断选择按键是否按下;如果按下了当松开的时候让背光打开;set++;*/   
  166.         if(keyswitch==0)   
  167.         {      
  168.                 Delay10ms();     
  169.                 if(keyswitch==0)      
  170.                 {      
  171.                          Delay10ms();     
  172.                         while(keyswitch==0);         
  173.                         set++;     //功能变量
  174.                         if(set>9)
  175.                         {set=0;menue=0;}         
  176.                 }   
  177.         }

  178. /*up和down按键的检测;加减标志位*/   
  179.         if(keyup==0)   
  180.         {
  181.                 Delay10ms();   
  182.                 if(keyup==0)     
  183.                 {            
  184.                         Delay10ms();   
  185.                         while(keyup==0);            
  186.                         key_flag++;  //加减标志位  
  187.                 }   
  188.         }
  189.         if(keydown==0)   
  190.         {
  191.                 Delay10ms();   
  192.                 if(keydown==0)   
  193.                 {         
  194.                         Delay10ms();   
  195.                         while(keydown==0);        
  196.                         key_flag--; //加减标志位   
  197.                 }
  198.         }   
  199.         if(keymenue==0)   
  200.         {   
  201.                 Delay10ms();   
  202.                 if(keymenue==0)   //菜单选择标志位;   
  203.                 {               
  204.                         Delay10ms();   
  205.                         while(keymenue==0);         
  206.                         menue++;     //菜单变量  
  207.                         if(menue>4)menue=0;         
  208.                 }   
  209.         }
  210.         if(keyok==0)   
  211.         {     
  212.                 Delay10ms();     
  213.                 if(keyok==0)    //确认标志位;     
  214.                 {
  215.                         Delay10ms();           
  216.                         while(keyok==0);     
  217.                         ok++;     
  218.                         if(ok>1)     
  219.                         {     
  220.                                 ok=0;   
  221.                                  menue=0;     
  222.                                 set=0;     
  223.                         }     
  224.                 }     
  225.         }     
  226. }
  227. //行扫描
  228. void hangsao(uchar num)
  229. {
  230.         switch(num)
  231.         {
  232.                 case 0:C1=0;B1=0;A1=0;break;
  233.                 case 1:C1=0;B1=0;A1=1;break;
  234.                 case 2:C1=0;B1=1;A1=0;break;
  235.                 case 3:C1=0;B1=1;A1=1;break;
  236.                 case 4:C1=1;B1=0;A1=0;break;
  237.                 case 5:C1=1;B1=0;A1=1;break;
  238.                 case 6:C1=1;B1=1;A1=0;break;
  239.                 case 7:C1=1;B1=1;A1=1;break;
  240.                 default:break;
  241.         }
  242. }
  243. /*****595写数据部分****************/

  244. void WriteByte(uchar DataR1,uchar DataR2)
  245. {
  246.         uchar i;
  247.         for(i = 0; i < 8; i++)//循环8次,把编码传给锁存器
  248.         {
  249.                   R=DataR1& 0x01;  //上屏数据  先送低位
  250.                   R1=DataR2 & 0x01;//下屏数据  先送低位
  251.                   CLK = 0;
  252.                 _nop_();
  253.                   CLK = 1;
  254.                   DataR1>>= 1;
  255.                   DataR2>>= 1;       
  256.         }
  257. }

  258. /*void WriteByte(uchar dat)   
  259. {  
  260.         uchar i;  
  261.         for (i=0;i<8;i++)   //循环8次,把编码传给锁存器  
  262.         {   
  263.                 dat=dat>>1;    //右移一位,取出该字节的最低位   
  264.                 R=CY;     //将该字节的最低位传给R   
  265.                 CLK=0;     //上升沿将数据移入595   
  266.                 CLK=1;  
  267.         }
  268. }
  269. */
  270. void writebyteshuzi(uchar n)//显示数字函数
  271. {  
  272.         WriteByte(~table[num+n*16],~table[num+n*16+8]);
  273. }
  274. void writebytehanzi(uchar n) //显示汉字函数
  275. {  
  276.         WriteByte(~table1[2*num+n*32+0],~table1[2*num+n*32+16]);
  277.         WriteByte(~table1[2*num+n*32+1],~table1[2*num+n*32+16+1]);
  278. }

  279. /******调时部分*************************/
  280. void set_date_time()
  281. {  
  282.         if(set==2)
  283.         {        
  284.                 menue=0;   //秒调整
  285.                 miao=l_tmpdisplay[10]*10+l_tmpdisplay[11];   
  286.                 miao=miao+key_flag;   
  287.                 if((key_flag<0)&(miao==0))miao=59;   
  288.                 if(miao>59)miao=0;   
  289.                 miao=miao%10+(miao/10)*16;   
  290.                 Write_Ds1302(0x8E,0x00);   
  291.                 Write_Ds1302(0x80,miao);   
  292.                 Write_Ds1302(0x8E,0x80);      
  293.         }
  294.         if(set==3)
  295.         {      
  296.                 menue=0;  //分调整
  297.                 fen=l_tmpdisplay[8]*10+l_tmpdisplay[9];  
  298.                 fen=fen+key_flag;  
  299.                 if(fen>59)  
  300.                 {  fen=0;  }   
  301.                 if((key_flag<0)&&(fen<0))
  302.                 {  fen=59;  }     
  303.                         fen=fen%10+(fen/10)*16;   
  304.                         Write_Ds1302(0x8E,0x00);  
  305.                         Write_Ds1302(0x82,fen);  
  306.                         Write_Ds1302(0x8E,0x80);   
  307.                 }
  308.         if(set==4)
  309.         {
  310.                 menue=0;  //时调整
  311.                 shi=l_tmpdisplay[6]*10+l_tmpdisplay[7];  
  312.                 shi=shi+key_flag;  
  313.                 if(shi>23)shi=0;  
  314.                 if((key_flag<0)&&(shi<0))shi=23;     
  315.                 shi=shi%10+(shi/10)*16;   
  316.                 Write_Ds1302(0x8E,0x00);  
  317.                 Write_Ds1302(0x84,shi);  
  318.                 Write_Ds1302(0x8E,0x80);   
  319.         }
  320.         if(set==5)
  321.         {     
  322.                 menue=1;  //日调整   
  323.                 ri=l_tmpdisplay[4]*10+l_tmpdisplay[5];  
  324.                 ri=ri+key_flag;  
  325.                 if(ri>31)ri=1;  
  326.                 if((key_flag<0)&&(ri<1))ri=31;  
  327.                 ri=ri%10+(ri/10)*16;   
  328.                 Write_Ds1302(0x8E,0x00);  
  329.                 Write_Ds1302(0x86,ri);  
  330.                 Write_Ds1302(0x8E,0x80);   
  331.                 zhou=l_tmpdisplay[12];  //周调整
  332.                 zhou=zhou+key_flag;  
  333.                 if(zhou>7)zhou=1;
  334.                 if((key_flag<0)&&(zhou<1))zhou=7;  
  335.                 zhou=zhou%10+(zhou/10)*16;   
  336.                 Write_Ds1302(0x8E,0x00);  
  337.                 Write_Ds1302(0x8A,zhou);  
  338.                 Write_Ds1302(0x8E,0x80);   
  339.         }
  340.         if(set==6)
  341.         {   
  342.                 menue=1;  //月调整   
  343.                 yue=l_tmpdisplay[2]*10+l_tmpdisplay[3];  
  344.                 yue=yue+key_flag;  
  345.                 if(yue>12)yue=1;  
  346.                 if((key_flag<0)&&(yue<1))yue=12;  
  347.                 yue=yue%10+(yue/10)*16;   
  348.                 Write_Ds1302(0x8E,0x00);  
  349.                 Write_Ds1302(0x88,yue);  
  350.                 Write_Ds1302(0x8E,0x80);   
  351.         }
  352.         if(set==7)             
  353.         {  
  354.                 menue=1;  //年调整
  355.                 nian=l_tmpdisplay[0]*10+l_tmpdisplay[1]+key_flag;;  
  356.                 if(nian>79)nian=0;  
  357.                 if((key_flag<0)&&(nian<0))nian=79;   
  358.                 nian=nian%10+(nian/10)*16;   
  359.                 Write_Ds1302(0x8E,0x00);  
  360.                 Write_Ds1302(0x8C,nian);  
  361.                 Write_Ds1302(0x8E,0x80);   
  362.           
  363.         }
  364.        
  365.         if(set==8)
  366.         {   
  367.                 menue=2; //周调整  
  368.                 zhou=l_tmpdisplay[12];
  369.                 zhou=zhou+key_flag;  
  370.                 if(zhou>7)zhou=1;  
  371.                 if((key_flag<0)&&(zhou<1))zhou=7;  
  372.                 zhou=zhou%10+(zhou/10)*16;   
  373.                 Write_Ds1302(0x8E,0x00);  
  374.                 Write_Ds1302(0x8A,zhou);  
  375.                 Write_Ds1302(0x8E,0x80);      
  376.         }
  377.         if(set==9)
  378.         {   
  379.                 menue=3;   //温度调整
  380.                
  381.                 sdata=l_tmpdisplay[13]/10;
  382.                 sdata=l_tmpdisplay[14]%10;
  383.                 sdata=sdata+key_flag;                   
  384.                 sdata=sdata%10+(sdata/10)*16;                        
  385.         }   
  386.         key_flag=0;         
  387. }
  388. /******日期、时间、星期数据的转化****************/
  389. void data_change()
  390. {     
  391.         l_tmpdisplay[0]=l_tmpDate[6]/16;   
  392.         l_tmpdisplay[1]=l_tmpDate[6]%16;//年;     
  393.         l_tmpdisplay[2]=l_tmpDate[4]/16;   
  394.         l_tmpdisplay[3]=l_tmpDate[4]%16;//月;     
  395.         l_tmpdisplay[4]=l_tmpDate[3]/16;   
  396.         l_tmpdisplay[5]=l_tmpDate[3]%16;//日;     
  397.         l_tmpdisplay[6]=l_tmpDate[2]/16;   
  398.         l_tmpdisplay[7]=l_tmpDate[2]%16;//小时;     
  399.         l_tmpdisplay[8]=l_tmpDate[1]/16;   
  400.         l_tmpdisplay[9]=l_tmpDate[1]%16;//分钟;      
  401.         l_tmpdisplay[10]=l_tmpDate[0]/16;   
  402.         l_tmpdisplay[11]=l_tmpDate[0]%16;//秒钟;
  403.         l_tmpdisplay[12]=l_tmpDate[5]%16;//显示当前星期;
  404.        
  405.         l_tmpdisplay[13]=doe[1]/16;//温度十位;
  406.         l_tmpdisplay[14]=doe[2]%16;//温度个位;

  407. }

  408. /*******星期显示处理*******************/
  409. void week()
  410. {  
  411.         if(l_tmpdisplay[12]==1)  
  412.         {  
  413.                 writebyteshuzi(13);   
  414.                 writebytehanzi(7);  
  415.                 writebytehanzi(8);  
  416.                 writebytehanzi(0);   
  417.                 writebyteshuzi(13);   
  418.         }  
  419.         if(l_tmpdisplay[12]==2)  
  420.         {  
  421.                 writebyteshuzi(13);   
  422.                 writebytehanzi(7);  
  423.                 writebytehanzi(8);  
  424.                 writebytehanzi(1);
  425.                 writebyteshuzi(13);   
  426.         }   
  427.         if(l_tmpdisplay[12]==3)  
  428.         {   
  429.                 writebyteshuzi(13);   
  430.                 writebytehanzi(7);  
  431.                 writebytehanzi(8);  
  432.                 writebytehanzi(2);   
  433.                 writebyteshuzi(13);   
  434.         }
  435.         if(l_tmpdisplay[12]==4)  
  436.         {   
  437.                 writebyteshuzi(13);   
  438.                 writebytehanzi(7);  
  439.                 writebytehanzi(8);  
  440.                 writebytehanzi(3);
  441.                 writebyteshuzi(13);   
  442.         }   
  443.         if(l_tmpdisplay[12]==5)  
  444.         {   
  445.                 writebyteshuzi(13);   
  446.                 writebytehanzi(7);  
  447.                 writebytehanzi(8);  
  448.                 writebytehanzi(4);   
  449.                 writebyteshuzi(13);   
  450.         }
  451.         if(l_tmpdisplay[12]==6)  
  452.         {   
  453.                 writebyteshuzi(13);   
  454.                 writebytehanzi(7);  
  455.                 writebytehanzi(8);  
  456.                 writebytehanzi(5);   
  457.                 writebyteshuzi(13);  
  458.         }   
  459.         if(l_tmpdisplay[12]==7)  
  460.         {  
  461.                 writebyteshuzi(13);   
  462.                 writebytehanzi(7);  
  463.                 writebytehanzi(8);
  464.                 writebytehanzi(6);   
  465.                 writebyteshuzi(13);   
  466.         }
  467. }
  468. void shijian()
  469. {            
  470.         writebyteshuzi(l_tmpdisplay[6]); //时;     
  471.         writebyteshuzi(l_tmpdisplay[7]);
  472.         writebyteshuzi(11);   //显示分号  
  473.         writebyteshuzi(l_tmpdisplay[8]);     
  474.         writebyteshuzi(l_tmpdisplay[9]); //分;     
  475.         writebyteshuzi(11); //显示分号     
  476.         writebyteshuzi(l_tmpdisplay[10]);     
  477.         writebyteshuzi(l_tmpdisplay[11]);//秒;
  478. }
  479. void riqi()
  480. {   
  481.         writebyteshuzi(l_tmpdisplay[0]);   
  482.         writebyteshuzi(l_tmpdisplay[1]); //年;   
  483.         writebyteshuzi(10);    //显示横杠
  484.        
  485.         writebyteshuzi(l_tmpdisplay[2]);   
  486.         writebyteshuzi(l_tmpdisplay[3]); //月;   
  487.         writebyteshuzi(10);//显示横杠   
  488.         writebyteshuzi(l_tmpdisplay[4]);   
  489.         writebyteshuzi(l_tmpdisplay[5]); //日;
  490. }
  491. void wendu()
  492. {
  493.         writebyteshuzi(13);
  494.         writebytehanzi(9);  
  495.         writebytehanzi(10);
  496.         writebyteshuzi(11);

  497.         writebyteshuzi(l_tmpdisplay[13]); //温度
  498.         writebyteshuzi(l_tmpdisplay[14]);   

  499. }
  500. void main()
  501. {  
  502. //         Set_RTC();//对时(有备用电源对时一次就行)
  503.         ReadyReadTemp();//温度转换
  504.         wenduzhuan();       
  505.         menue=0;  
  506.         Write_Ds1302(0x8E,0x00);  
  507.         Write_Ds1302(0x90,0x80);  
  508.         Write_Ds1302(0x8E,0x80);  
  509.         while(1)  
  510.         {
  511.                 ReadyReadTemp();//温度转换
  512.                 wenduzhuan();
  513.                 key();   
  514.         //        for(num=0;num<16;num++)
  515.                 for(num=0;num<8;num++)   
  516.                 {   
  517.                        
  518.                         Read_RTC();//读取时钟   
  519.                         data_change();//时钟数据处理   
  520.                         set_date_time(); /////调时部分
  521.                        
  522.                          
  523.                         if(menue==0)   
  524.                         {
  525.                                 if(set==2)//调整标志位;     
  526.                                 {      
  527.                                 writebyteshuzi(l_tmpdisplay[6]); //时;      
  528.                                 writebyteshuzi(l_tmpdisplay[7]);
  529.                                 writebyteshuzi(11);   //数字数组的第11位置,是":"
  530.                                 writebyteshuzi(l_tmpdisplay[8]);      
  531.                                 writebyteshuzi(l_tmpdisplay[9]); //分;      
  532.                                 writebyteshuzi(11);      
  533.                                 WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[10]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[10]*16+8]));         
  534.                                 WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[11]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[11]*16+8]));     
  535.                                 }
  536.                                 else
  537.                                 if(set==3)     
  538.                                 {     
  539.                         //        writebyteshuzi(l_tmpdisplay[6]); //时;     
  540.                         //        writebyteshuzi(l_tmpdisplay[7]);     
  541.                         //        writebyteshuzi(11);     
  542.                         //        WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[8]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[8]*16+8]));     
  543.                                 WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[9]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[9]*16+8]));     
  544.                                 writebyteshuzi(11);     
  545.                                 writebyteshuzi(l_tmpdisplay[10]);     
  546.                                 writebyteshuzi(l_tmpdisplay[11]);//秒;     
  547.                                 }
  548.                         /*        else
  549.                                 if(set==4)     
  550.                                 {     
  551.                                 WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[6]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[6]*16+8]));     
  552.                                 WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[7]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[7]*16+8]));     
  553.                                 writebyteshuzi(11);     
  554.                                 writebyteshuzi(l_tmpdisplay[8]);     
  555.                                 writebyteshuzi(l_tmpdisplay[9]);//分;     
  556.                                 writebyteshuzi(11);     
  557.                                 writebyteshuzi(l_tmpdisplay[10]);     
  558.                                 writebyteshuzi(l_tmpdisplay[11]);//秒;     
  559.                                 } */   
  560.                                 else shijian();      
  561.                                 }
  562.                                 else
  563.                                 if(menue==1)     
  564.                                 {     
  565.                                         if(set==5) //日期调整标志位;     
  566.                                         {        
  567.                                         writebyteshuzi(l_tmpdisplay[0]); //年;      
  568.                                         writebyteshuzi(l_tmpdisplay[1]);      
  569.                                         writebyteshuzi(10);      
  570.                                         writebyteshuzi(l_tmpdisplay[2]);      
  571.                                         writebyteshuzi(l_tmpdisplay[3]); //月;
  572.                                         writebyteshuzi(10);      
  573.                                         WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[4]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[4]*16+8]));         
  574.                                         WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[5]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[5]*16+8])); //日;     
  575.                                         }     
  576.                                         else
  577.                                         if(set==6)     
  578.                                         {
  579.                         //                writebyteshuzi(l_tmpdisplay[0]); //年;   
  580.                         //                writebyteshuzi(l_tmpdisplay[1]);     
  581.                         //                writebyteshuzi(10);     
  582.                         //                WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[2]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[2]*16+8]));     
  583.                                         WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[3]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[3]*16+8]));//月;     
  584.                                         writebyteshuzi(10);     
  585.                                         writebyteshuzi(l_tmpdisplay[4]);     
  586.                                         writebyteshuzi(l_tmpdisplay[5]);//日;     
  587.                                         }     
  588.                                 /*        else
  589.                                         if(set==7)     
  590.                                         {
  591.                                         WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[0]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[0]*16+8]));     
  592.                                         WriteByte((~table[num+(12*16)])&(~table[num+l_tmpdisplay[1]*16]),(~table[num+(12*16)])&(~table[num+l_tmpdisplay[1]*16+8]));//年;     
  593.                                         writebyteshuzi(10);     
  594.                                         writebyteshuzi(l_tmpdisplay[2]);     
  595.                                         writebyteshuzi(l_tmpdisplay[3]);//月;     
  596.                                         writebyteshuzi(10);     
  597.                                         writebyteshuzi(l_tmpdisplay[4]);     
  598.                                         writebyteshuzi(l_tmpdisplay[5]);//日;      
  599.                                         }    */
  600.                                         else riqi();   
  601.                                 }   
  602.                                 else
  603.                                 if(menue==2)   
  604.                                 {     
  605.                                         week();   
  606.                                 }
  607.                                 else  
  608.                                 if(menue==3)   
  609.                                 {     
  610.                                            writebyteshuzi(13);
  611.                                         writebytehanzi(9);//温;                                  
  612.                                         writebytehanzi(10);//度?
  613.                                         writebyteshuzi(11);
  614.                                         writebyteshuzi(l_tmpdisplay[13]);
  615.                                         writebyteshuzi(l_tmpdisplay[14]);  
  616.                                        
  617.                                 }
  618.                                
  619.                                
  620.                                 else menue=0;   
  621.                                 if ((set<2)&&(menue==0))   
  622.                                 {     
  623.                                         if  ((l_tmpdisplay[10]*10+l_tmpdisplay[11]>11)&&(l_tmpdisplay[10]*10+l_tmpdisplay[11]<14))riqi();     
  624.                                         else
  625.                                         if ((l_tmpdisplay[10]*10+l_tmpdisplay[11]>26)&&(l_tmpdisplay[10]*10+l_tmpdisplay[11]<29))week();
  626.                                         else
  627.                                         if ((l_tmpdisplay[10]*10+l_tmpdisplay[11]>41)&&(l_tmpdisplay[10]*10+l_tmpdisplay[11]<44))riqi();     
  628.                                         else
  629.                                         if ((l_tmpdisplay[10]*10+l_tmpdisplay[11]>55)&&(l_tmpdisplay[10]*10+l_tmpdisplay[11]<59))wendu();     
  630.                                         else shijian();        
  631.                                 }
  632.                                          
  633.                         //        P0=num;
  634.                                 OE=0;
  635.                                    STB=0;     //输出锁存
  636.                                 _nop_();      
  637.                                 STB=1;
  638.                                 OE=1;  
  639.                                 hangsao(num);
  640.                 }      
  641.         }
  642. }



复制代码


回复

使用道具 举报

ID:96682 发表于 2016-6-21 13:12 | 显示全部楼层
LZ,还缺原理图呢,你说的不同没看到哦。
回复

使用道具 举报

ID:79544 发表于 2016-6-21 13:35 | 显示全部楼层
不同的地方就是LED扫描
回复

使用道具 举报

ID:83626 发表于 2019-1-30 07:37 | 显示全部楼层
有没有 16点阵显示2行数字的,上行显示日期,下行显示时间,全部为数字。?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表