找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5497|回复: 1
打印 上一主题 下一主题
收起左侧

利用NOKIA 3310 LCD 显示屏做个电子时钟

[复制链接]
跳转到指定楼层
楼主
ID:85192 发表于 2015-7-10 02:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

做了一个3310显示的时钟,只是用到定时器,简单一点。



  1. //E:\DPJ-C\3310-16\3310_CLOCK\3310_CLOCK.C  2012 01 05

  2. #include<reg51.h>
  3. #include<intrins.h>
  4. #include"tab.h"
  5. #include"tab1.h"
  6. #define uchar unsigned char
  7. #define uint unsigned int
  8. sbit SCLK=P1^0;
  9. sbit SDIN=P1^1;
  10. sbit DC=P1^2;
  11. sbit SCE=P1^3;
  12. sbit RES=P1^4;
  13. sbit key_s_p=P3^0;
  14. sbit key_clear=P3^1;
  15. sbit key_hh=P3^2;
  16. sbit key_mm=P3^3;
  17. sbit key_ss=P3^4;

  18. uchar time,time1,num,hh,mm,ss,h_1,h_0,m_1,m_0,s_1,s_0;
  19. bit flag,Lkey;

  20. void delay(uint ms);
  21. void keyscan();
  22. void TimerINTinit();
  23. void write_dat(uchar dat);
  24. void write_com(dat);
  25. void set_add(uchar x,uchar y);
  26. void clear_scr();
  27. void disp_HH_MM(uchar x,uchar y,uchar *p );
  28. void disp_SS(uchar x,uchar y,uchar *s);
  29. void init_3310();


  30. void TimerINTinit()
  31. {
  32. TMOD=0x11;
  33. EA=1;
  34. ET0=1;
  35. ET1=1;
  36. TH0=(65536-50000)/256;
  37. TL0=(65536-50000)%256;
  38. TH1=(65536-50000)/256;
  39. TL1=(65536-50000)%256;
  40. }

  41. void keyscan()
  42. {
  43. while(!key_s_p)
  44. {
  45.   delay(10);
  46.   if(key_s_p)
  47.   TR0=!TR0;
  48. }
  49. while(!key_clear)         //清零键
  50. {
  51.   delay(10);
  52.   if(key_clear)
  53.   {
  54.    TR0=0;
  55.    hh=0;
  56.    mm=0;
  57.    ss=0;
  58.   }
  59. }
  60. while(!key_hh)   //调时键
  61. {
  62.   delay(10);
  63.   TR1=1;
  64.   if(time1>=10)
  65.   {
  66.    time1=0;
  67.    Lkey=1;   //长按标志置1
  68.   }
  69.   if(key_hh)
  70.   {
  71.    TR1=0;
  72.    time1=0;
  73.    if(Lkey)
  74.    {
  75.     hh=hh+10;
  76.     Lkey=0;
  77.     if(hh>24)
  78.     hh=0;
  79.    }
  80.    else
  81.    {
  82.     hh++;
  83.    }
  84.   }
  85.   if(hh==24)
  86.   hh=0;
  87. }
  88. while(!key_mm)   //调分键
  89. {
  90.   delay(10);
  91.   TR1=1;
  92.   if(time1>=10)
  93.   {
  94.    time1=0;
  95.    Lkey=1;   //长按标志置1
  96.   }
  97.   if(key_mm)
  98.   {
  99.    TR1=0;
  100.    time1=0;
  101.    if(Lkey)
  102.    {
  103.     mm=mm+10; //长按加10
  104.     Lkey=0;
  105.     if(mm>60)
  106.     mm=0;
  107.    }
  108.    else
  109.    {
  110.     mm++;
  111.    }
  112.   }
  113.   if(mm==60)
  114.   mm=0;
  115. }
  116. while(!key_ss)   //调秒键
  117. {
  118.   delay(10);
  119.   TR1=1;
  120.   if(time1>=10)
  121.   {
  122.    time1=0;
  123.    Lkey=1;   //长按标志置1
  124.   }
  125.   if(key_ss)
  126.   {
  127.    TR1=0;
  128.    time1=0;
  129.    if(Lkey)
  130.    {
  131.     ss=ss+10; //长按加10
  132.     Lkey=0;
  133.     if(ss>60)
  134.     ss=0;
  135.    }
  136.    else
  137.    {
  138.     ss++;
  139.    }
  140.   }
  141.   if(ss==60)
  142.   ss=0;
  143. }
  144. }
  145.      
  146. void delay(uint ms)
  147. {
  148. uchar i;
  149. while(ms--)
  150. for(i=0;i<123;i++);
  151. }

  152. void write_dat(uchar dat)
  153. {
  154. uchar i;
  155. SCE=0;
  156. for(i=0;i<8;i++)
  157. {
  158.   SCLK=0;
  159.   dat<<=1;
  160.   SDIN=CY;
  161.   _nop_();
  162.   _nop_();
  163.   _nop_();
  164.   SCLK=1;
  165. }
  166. DC=1;
  167. SCE=1;
  168. }

  169. void write_com(dat)
  170. {
  171. DC=0;
  172. write_dat(dat);
  173. }

  174. void set_add(uchar x,uchar y)
  175. {
  176. write_com(x|0x80);//设置RAM的x地址    1 X?6?4 X?6?3 X?6?2  X?6?1 X?6?0  X?6?9 X?6?8
  177. write_com(y|0x40);//设置RAM的y地址 0 1 0 0   0 Y?6?0 Y?6?9 Y?6?8
  178. }
  179. void clear_scr()
  180. {
  181. uchar i,j;
  182. for(i=0;i<6;i++) //6行、84列 
  183. {
  184.   write_dat(0x00);
  185.   while(j<84)
  186.   {
  187.   write_dat(0x00);
  188.   j++;
  189.   }
  190.   j=0;
  191. }
  192. }

  193. void disp_HH_MM(uchar x,uchar y,uchar *p )
  194. {
  195. uint i;
  196. set_add(x,y);
  197. {
  198.   for(i=0;i<16;i++)
  199.   {
  200.    write_dat(p[2*i]);
  201.   }
  202. }
  203. set_add(x,y+1);
  204. {
  205.   for(i=0;i<16;i++)
  206.   {
  207.    write_dat(p[2*i+1]);
  208.   }
  209. }
  210. }
  211. void disp_SS(uchar x,uchar y,uchar *s)
  212. {
  213. uint i;
  214. set_add(x,y);
  215. {
  216.   for(i=0;i<8;i++)
  217.   {
  218.    write_dat(s[i]);
  219.   }
  220. }
  221. }

  222. void init_3310()
  223. {
  224. write_com(0x21); //功能设定,使用扩充命令
  225. write_com(0x99); //设定液晶电压
  226. write_com(0x20); //使用基本命令
  227. write_com(0x0d); //设定显示模式,反白显示
  228. clear_scr();
  229. }

  230. void main()
  231. {
  232. TimerINTinit();
  233. RES=0;
  234. RES=0;
  235. RES=0;
  236. RES=0;
  237. _nop_();
  238. _nop_();
  239. RES=1;
  240. init_3310();
  241. while(1)
  242. {
  243.   keyscan();
  244.   if(ss==60)
  245.   {
  246.    ss=0;
  247.    mm++;
  248.    if(mm==60)
  249.    {
  250.     mm=0;
  251.     hh++;
  252.    }
  253.    if(hh==24)
  254.    hh=0;
  255.   }
  256.    h_1=hh/10;
  257.    h_0=hh%10;
  258.    m_1=mm/10;
  259.    m_0=mm%10;
  260.    s_0=ss%10;
  261.    s_1=ss/10;
  262.    disp_HH_MM(0x02,0x02,tab+h_1);
  263.    disp_HH_MM(0x12,0x02,tab+h_0);
  264.    disp_HH_MM(0x30,0x02,tab+m_1);
  265.    disp_HH_MM(0x40,0x02,tab+m_0);
  266.    disp_SS(0x40,0x05,tab1+s_1);
  267.    disp_SS(0x48,0x05,tab1+s_0);
  268.    if(!flag)
  269.    disp_HH_MM(0x21,0x02,tab+10);
  270.    else
  271.    disp_HH_MM(0x21,0x02,tab+11);

  272. }
  273. }

  274. void T0INT()interrupt 1
  275. {
  276. TH0=(65536-50000)/256;
  277. TL0=(65536-50000)%256;
  278. time++;
  279. if(time==20)
  280. {
  281.   time=0;
  282.   ss++;
  283.   flag=!flag;
  284. }
  285. }
  286. void T1INT()interrupt 3
  287. {
  288. TH1=(65536-50000)/256;
  289. TL1=(65536-50000)%256;
  290. time1++; //长按标志

  291. }

复制代码


"TAB.H"
  1. //16x16 逐列、逆向、阴码 Microsoft Sans Serif    宽 31   高 25
  2. unsigned char code tab[12][32]=
  3. {

  4. {0x00,0x00,0xE0,0x0F,0xF8,0x3F,0xFC,0x7F,0x1C,0x70,0x0E,0xE0,0x06,0xC0,0x06,0xC0,
  5. 0x06,0xC0,0x06,0xC0,0x0E,0xE0,0x1C,0x70,0xFC,0x7F,0xF8,0x3F,0xE0,0x0F,0x00,0x00,},/*"0",0*/

  6. {0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x30,0x00,0x38,0x00,0x18,0x00,
  7. 0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*"1",1*/

  8. {0x00,0x00,0x10,0xE0,0x18,0xE0,0x1C,0xF0,0x0E,0xD8,0x06,0xD8,0x06,0xCC,0x06,0xCC,
  9. 0x06,0xC6,0x06,0xC6,0x06,0xC3,0x8E,0xC1,0xFC,0xC1,0xFC,0xC0,0x78,0xC0,0x00,0x00,},/*"2",2*/

  10. {0x00,0x00,0x10,0x30,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x06,0xC0,0x86,0xC1,0x86,0xC1,
  11. 0x86,0xC1,0x86,0xC1,0xCE,0xC3,0xFC,0x63,0x7C,0x7F,0x38,0x3E,0x00,0x1C,0x00,0x00,},/*"3",3*/

  12. {0x00,0x00,0x00,0x0E,0x00,0x0F,0x80,0x0D,0xC0,0x0C,0x60,0x0C,0x60,0x0C,0x30,0x0C,
  13. 0x18,0x0C,0x0C,0x0C,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x0C,0x00,0x0C,0x00,0x00,},/*"4",4*/

  14. {0x00,0x00,0x00,0x10,0xE0,0x71,0xFE,0x71,0xFE,0xE1,0x9E,0xC0,0xC6,0xC0,0xC6,0xC0,
  15. 0xC6,0xC0,0xC6,0xC0,0xC6,0xE1,0xC6,0x71,0x86,0x7F,0x06,0x3F,0x00,0x1E,0x00,0x00,},/*"5",5*/

  16. {0x00,0x00,0xE0,0x0F,0xF8,0x3F,0xFC,0x7F,0xBC,0x71,0x8E,0xE1,0xC6,0xC0,0xC6,0xC0,
  17. 0xC6,0xC0,0xC6,0xC0,0xC6,0xE1,0xCE,0x61,0x9C,0x7F,0x1C,0x3F,0x10,0x1E,0x00,0x00,},/*"6",6*/

  18. {0x00,0x00,0x06,0x00,0x06,0x00,0x06,0x00,0x06,0x80,0x06,0xE0,0x06,0xF0,0x06,0xFC,
  19. 0x06,0x3F,0xC6,0x0F,0xE6,0x03,0xFE,0x01,0x7E,0x00,0x1E,0x00,0x06,0x00,0x00,0x00,},/*"7",7*/

  20. {0x00,0x00,0x00,0x3C,0x38,0x7E,0x7C,0x7E,0xFC,0xE7,0xCE,0xC3,0xC6,0xC1,0x86,0xC1,
  21. 0x86,0xC1,0xC6,0xC1,0xCE,0xC3,0xFC,0xE7,0x7C,0x7E,0x38,0x7E,0x00,0x3C,0x00,0x00,},/*"8",8*/

  22. {0x00,0x00,0xF0,0x10,0xF8,0x71,0xFC,0x73,0x0C,0xE7,0x0E,0xC7,0x06,0xC6,0x06,0xC6,
  23. 0x06,0xC6,0x06,0xC6,0x0E,0xE3,0x1C,0x7B,0xFC,0x7F,0xF8,0x1F,0xE0,0x0F,0x00,0x00,},/*"9",9*/

  24. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x30,0x30,
  25. 0x30,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*":",10*/

  26. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  27. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,},/*" ",11*/

  28. };

  29. /***************************************************************/
复制代码

"TAB1.H"
  1. // 8x8 逐列、逆向、阴码 Microsoft Sans Serif    字宽 14   字高 12

  2. unsigned char code tab1[10][8]=
  3. {
  4. {0x00,0x7C,0x82,0x82,0x82,0x82,0x7C,0x00,},/*"0",0*/
  5. {0x00,0x00,0x04,0x04,0xFE,0x00,0x00,0x00,},/*"1",1*/
  6. {0x00,0x84,0xC2,0xA2,0xA2,0x92,0x8C,0x00,},/*"2",2*/
  7. {0x00,0x44,0x82,0x92,0x92,0x92,0x6C,0x00,},/*"3",3*/
  8. {0x00,0x20,0x30,0x28,0x24,0xFE,0x20,0x00,},/*"4",4*/
  9. {0x00,0x4E,0x8A,0x8A,0x8A,0xCA,0x72,0x00,},/*"5",5*/
  10. {0x00,0x7C,0xD6,0x92,0x92,0x92,0x64,0x00,},/*"6",6*/
  11. {0x00,0x02,0x82,0x42,0x32,0x0A,0x06,0x00,},/*"7",7*/
  12. {0x00,0x6C,0x92,0x92,0x92,0x92,0x6C,0x00,},/*"8",8*/
  13. {0x00,0x4C,0x92,0x92,0x92,0xD2,0x7C,0x00,},/*"9",9*/
  14. };

复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:218023 发表于 2018-3-23 22:23 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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