Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2916|回复: 13

20电信本2张庆余组:电子钟

[复制链接]

1

主题

1

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2022-11-3 19:45:47 | 显示全部楼层 |阅读模式
本帖最后由 张庆余 于 2022-11-4 12:46 编辑

负责人:张庆余 房宇
仿真图:;
  1. 代码:#include<reg52.h>
  2. #include<math.h>
  3. #include<absacc.h>
  4. #define uchar unsigned char
  5. #define uint unsigned int
  6. sbit RS=P3^0;
  7. sbit EN=P3^1;
  8. uchar tab_key[50];
  9. uchar code tab[]="0123456789abcdef";
  10. uchar n=0,temp,key;

  11. /声明区/
  12. void lcd_disp();
  13. void lcd_init();
  14. void write_com(uchar);
  15. void write_data(uchar);
  16. void delay(uint);
  17. void key_scan();
  18. void key_manage1();
  19. void key_manage2();
  20. void key_manage3();
  21. void key_manage4();
  22. void key_manage5();
  23. void key_manage6();
  24. void key_manage7();
  25. void key_manage8();
  26. void key_manage9();
  27. void key_manage10();
  28. void key_manage11();
  29. void key_manage12();
  30. void key_manage13();
  31. void key_manage14();
  32. void key_manage15();
  33. void key_manage16();

  34. /主函数/
  35. void main()
  36. {
  37.   lcd_init();
  38.   write_com(1);
  39.   while(1)
  40. {
  41.    key_scan();
  42.    lcd_disp();
  43. }
  44. }

  45. /LCD显示/
  46. void lcd_disp()
  47. {
  48.   uchar a,i=0;
  49.   write_com(0x80);
  50.   for(i=0;i<n;i++)
  51. {
  52.    a=tab_key;
  53.    write_data(tab[a]);
  54. }
  55. }

  56. /LCD初始/
  57. void lcd_init()
  58. {
  59. EN=0;
  60. write_com(0x38);
  61. write_com(0x0c);
  62. write_com(0x06);
  63. write_com(0x80);
  64. }

  65. /写命令/
  66. void write_com(uchar com)
  67. {
  68. RS=0;
  69. P0=com;
  70. delay(3);
  71. EN=1;
  72. delay(5);
  73. EN=0;
  74. }

  75. /写数据/
  76. void write_data(uchar dat)
  77. {
  78. RS=1;
  79. P0=dat;
  80. delay(3);
  81. EN=1;
  82. delay(5);
  83. EN=0;
  84. }

  85. /键扫描/
  86. void key_scan()
  87. {
  88.   P2=0xfe;
  89.   temp=P2;
  90.   temp=temp&0xf0;
  91.   if(temp!=0xf0)
  92. {
  93.    delay(100);
  94.    if(temp!=0xf0)
  95.   {
  96.     temp=P2;
  97.     switch(temp)
  98.    {
  99.      case 0xee:
  100.      key_manage1();
  101.      break;
  102.      case 0xde:
  103.      key_manage2();
  104.      break;
  105.      case 0xbe:
  106.      key_manage3();
  107.      break;
  108.      case 0x7e:
  109.      key_manage4();
  110.      break;
  111.     }
  112.     while(temp!=0xf0)
  113.    {
  114.      temp=P2;
  115.      temp=temp&0xf0;
  116.    }
  117.   }
  118. }
  119.   P2=0xfd;
  120.   temp=P2;
  121.   temp=temp&0xf0;
  122.   if(temp!=0xf0)
  123. {
  124.    delay(100);
  125.    if(temp!=0xf0)
  126.   {
  127.     temp=P2;
  128.     switch(temp)
  129.    {
  130.      case 0xed:
  131.          key_manage5();
  132.          break;
  133.          case 0xdd:
  134.          key_manage6();
  135.          break;
  136.          case 0xbd:
  137.          key_manage7();
  138.          break;
  139.          case 0x7d:
  140.          key_manage8();
  141.          break;
  142.         }
  143.    while(temp!=0xf0)
  144.   {
  145.     temp=P2;
  146.     temp=temp&0xf0;
  147.   }
  148. }
  149. }
  150.   P2=0xfb;
  151.   temp=P2;
  152.   temp=temp&0xf0;
  153.   if(temp!=0xf0)
  154. {
  155.    delay(100);
  156.    if(temp!=0xf0)
  157.   {
  158.     temp=P2;
  159.     switch(temp)
  160.    {
  161.          case 0xeb:
  162.          key_manage9();
  163.          break;
  164.          case 0xdb:
  165.          key_manage10();
  166.          break;
  167.          case 0xbb:
  168.          key_manage11();
  169.          break;
  170.          case 0x7b:
  171.          key_manage12();
  172.          break;
  173.     }
  174.      while(temp!=0xf0)
  175.     {
  176.          temp=P2;
  177.          temp=temp&0xf0;
  178.         }
  179.    }
  180.   }
  181.     P2=0xf7;
  182.     temp=P2;
  183.     temp=temp&0xf0;
  184.     if(temp!=0xf0)
  185.    {
  186.      delay(100);
  187. if(temp!=0xf0)
  188. {
  189. temp=P2;
  190. switch(temp)
  191. {
  192. case 0xe7:
  193. key_manage13();
  194. break;
  195. case 0xd7:
  196. key_manage14();
  197. break;
  198. case 0xb7:
  199. key_manage15();
  200. break;
  201. case 0x77:
  202. key_manage16();
  203. break;
  204. }
  205. while(temp!=0xf0)
  206. {
  207. temp=P2;
  208. temp=temp&0xf0;
  209. }
  210. }
  211. }
  212. }

  213. /键功能/
  214. void key_manage1()
  215. {
  216. tab_key[n]=0;
  217. n++;
  218. }
  219. void key_manage2()
  220. {
  221. tab_key[n]=1;
  222. n++;
  223. }
  224. void key_manage3()
  225. {
  226. tab_key[n]=2;
  227. n++;
  228. }
  229. void key_manage4()
  230. {
  231. tab_key[n]=3;
  232. n++;
  233. }
  234. void key_manage5()
  235. {
  236. tab_key[n]=4;
  237. n++;
  238. }
  239. void key_manage6()
  240. {
  241. tab_key[n]=5;
  242. n++;
  243. }
  244. void key_manage7()
  245. {
  246. tab_key[n]=6;
  247. n++;
  248. }
  249. void key_manage8()
  250. {
  251. tab_key[n]=7;
  252. n++;
  253. }
  254. void key_manage9()
  255. {
  256. tab_key[n]=8;
  257. n++;
  258. }
  259. void key_manage10()
  260. {
  261. tab_key[n]=9;
  262. n++;
  263. }
  264. void key_manage11()
  265. {
  266. tab_key[n]=10;
  267. n++;
  268. }
  269. void key_manage12()
  270. {
  271. tab_key[n]=11;
  272. n++;
  273. }
  274. void key_manage13()
  275. {
  276. tab_key[n]=12;
  277. n++;
  278. }
  279. void key_manage14()
  280. {
  281. tab_key[n]=13;
  282. n++;
  283. }
  284. void key_manage15()
  285. {
  286. tab_key[n]=14;
  287. n++;
  288. }
  289. void key_manage16()
  290. {
  291. tab_key[n]=15;
  292. n++;
  293. }

  294. void delay(uint k)
  295. {
  296.   uint i,j;
  297.   for(i=k;i>0;i--)
  298.   for(j=50;j>0;j--);
  299. }
复制代码
目前进度:实物已经完成,正在调试程序,增加功能。
遇到问题:使用的单片机最小系统不便于下载,同时发的原件都无针脚,不便于下载。使用的stc89c52rc芯片下载程序后显示屏亮但显示很不清楚。无可变电阻显示屏亮度背光无法调节。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-4 22:57:38 | 显示全部楼层
看的出代码下了不少功夫,大大的赞,学习思路非常好。
一个小建议:

void key_manage15()
{
tab_key[n]=14;
n++;
}
改成
void key_manage(int x)
{
tab_key[n]=x-1;
n++;
}
这样,16个key_manage函数用一个描述就可以了
记住,凡是大量重复的代码,肯定有更简洁的表达方式
回复

使用道具 举报

0

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-11-10 12:42:35 | 显示全部楼层
课程报告最终版

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 14:57:42 | 显示全部楼层
继续修改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-11-24 21:10:32 | 显示全部楼层
修改后            

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 21:26:35 | 显示全部楼层
继续改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-11-24 22:07:06 | 显示全部楼层
老师,字体字号那个地方我们打开是按要求设置的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-11-24 23:24:19 | 显示全部楼层
老师这个是新版的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

399

主题

1251

帖子

4020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4020
发表于 2022-11-24 23:28:53 | 显示全部楼层
好,基本这样吧,有个小问题就是图和表要单独排号的,我标出来了,改一下,打印即可。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

7

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-11-24 23:32:29 | 显示全部楼层
已将图和表的排号问题更改

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-6-8 16:24 , Processed in 0.040798 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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