找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机LCD1602随机模拟显示乘法口诀的proteus仿真与源程序

[复制链接]
跳转到指定楼层
楼主
lcd1602随机显示乘法口诀的仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REGX52.H>
  2. #include <INTRINS.H>

  3. unsigned int x,y,z;

  4. unsigned int sj_x_cnt = 0,sj_y_cnt = 0;//随机
  5. unsigned int sd_x_cnt = 0,sd_y_cnt = 0;//顺到序
  6. unsigned char cheng[46][2] =
  7. {
  8. {0,0},
  9. {1,1},
  10. {1,2},{2,2},
  11. {1,3},{2,3},{3,3},
  12. {1,4},{2,4},{3,4},{4,4},
  13. {1,5},{2,5},{3,5},{4,5},{5,5},
  14. {1,6},{2,6},{3,6},{4,6},{5,6},{6,6},
  15. {1,7},{2,7},{3,7},{4,7},{5,7},{6,7},{7,7},
  16. {1,8},{2,8},{3,8},{4,8},{5,8},{6,8},{7,8},{8,8},
  17. {1,9},{2,9},{3,9},{4,9},{5,9},{6,9},{7,9},{8,9},{9,9},
  18. };
  19. void delay1ms(unsigned char xms)
  20. {
  21.         unsigned char i,j;
  22.         for(i=xms;i>0;i--)
  23.                 for(j=110;j>0;j--);
  24. }


  25. /***************液晶显示模块*****************/
  26. sbit RS=P2^0;
  27. sbit RW=P2^1;
  28. sbit E=P2^2;
  29. sbit key=P1^4;
  30. sbit key2=P1^5;
  31. sbit key3=P1^6;

  32. //sbit BF=P0^7;
  33.   /*液晶忙检测
  34. bit BusyTest(void)
  35. {
  36.         bit result;
  37.         RS=0;
  38.         RW=1;
  39.         E=1;
  40.         _nop_();
  41.         _nop_();
  42.         _nop_();
  43.         result=BF;
  44.         _nop_();
  45.         _nop_();
  46.         _nop_();
  47.         E=0;
  48.         return result;
  49. }*/
  50. /*写指令*/
  51. void Write_com(unsigned char command)
  52. {
  53. //        while(BusyTest()!=0);
  54.         RS=0;
  55.         RW=0;
  56.         E=0;
  57.         _nop_();
  58.         _nop_();
  59.         _nop_();
  60.         P0=command;
  61.         _nop_();
  62.         _nop_();
  63.         _nop_();
  64.         E=1;
  65.         _nop_();
  66.         _nop_();
  67.         _nop_();
  68.         E=0;
  69. }
  70. /*写地址*/
  71. void Write_Address(unsigned char address)
  72. {
  73.         Write_com(address);
  74.         delay1ms(1);        
  75. }
  76. /*写数据*/
  77. void Write_Date(unsigned char date)
  78. {
  79.         RS=1;
  80.         RW=0;
  81.         E=0;
  82.         _nop_();
  83.         _nop_();
  84.         _nop_();
  85.         P0=date;
  86.         _nop_();
  87.         _nop_();
  88.         _nop_();
  89.         E=1;
  90.         _nop_();
  91.         _nop_();
  92.         _nop_();
  93.         E=0;
  94.         delay1ms(1);
  95. }
  96. /*初始化*/
  97. void Lcd_Int(void)
  98. {
  99.         Write_com(0x38);
  100.         delay1ms(1);
  101.         Write_com(0x38);
  102.         Write_com(0x38);
  103.         delay1ms(1);
  104.         delay1ms(1);
  105.         Write_com(0x06);
  106.         delay1ms(1);
  107.         Write_com(0x0c);
  108.         delay1ms(1);
  109.         Write_com(0x01);               
  110. }

  111. void writelcd(unsigned char a,b,dat)
  112. {
  113.         if(b==1)
  114.         {
  115.                 Write_Address(0x80+a);
  116.                 Write_Date(dat);                        
  117.         }
  118.            else
  119.         {
  120.                 Write_Address(0xc0+a);
  121.                 Write_Date(dat);
  122.         }               
  123. }

  124. void main()
  125. {
  126.     unsigned char mode = 0;
  127.         int k_cnt = 0;
  128.         TMOD = 0x01;
  129.     TH0 = 0x0EC;
  130.     TL0 = 0x78;
  131.     EA = 1;
  132.     ET0 = 1;
  133.     TR0 = 0;
  134.         Lcd_Int();
  135.         mode = 1;//默认为随机的
  136.         while(1)
  137.         {
  138.                 if(key==0)
  139.                 {
  140.                         delay1ms(10);
  141.                         if(key==0)
  142.                         {
  143.                                 TR0=1;
  144.                         }
  145.                         while(!key);
  146.                         TR0=0;
  147.                         mode = 1; //随机
  148.                 }
  149.                 else if(key2==0)
  150.                 {
  151.                         delay1ms(10);
  152.                         if(key2==0)
  153.                         {
  154.                                 while(!key2);
  155.                                 mode = 2;//顺序
  156.                                 k_cnt ++;
  157.                                 if(k_cnt >=46)
  158.                                         k_cnt = 0;
  159.                         }
  160.                 }
  161.                 else if(key3==0)
  162.                 {
  163.                         delay1ms(10);
  164.                         if(key3==0)
  165.                         {
  166.                                 while(!key3);
  167.                                 mode = 3;//倒序
  168.                                 k_cnt --;
  169.                                 if(k_cnt <= 0)
  170.                                         k_cnt = 45;
  171.                         }
  172.                 }
  173.                 if(mode == 1)
  174.                 {
  175.                         x = sj_x_cnt;
  176.                         y = sj_y_cnt;
  177.                 }
  178.                 else
  179.                 {
  180.                         x = cheng[k_cnt][0];
  181.                         y = cheng[k_cnt][1];
  182.                 }
  183.                 z=x*y;
  184.                 Write_Address(0x80);
  185.                 if(x/10!=0)
  186.                 Write_Date(0x30+x/10);
  187.                 Write_Date(0x30+x%10);
  188.                 Write_Date('*');
  189.                 if(y/10!=0)
  190.                 Write_Date(0x30+y/10);
  191.                 Write_Date(0x30+y%10);
  192.                 Write_Date('=');
  193.                 if(z/1000!=0)
  194. ……………………

  195. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
1602LCD随机模拟显示乘法口诀.rar (54.06 KB, 下载次数: 52)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:387047 发表于 2018-8-16 21:11 | 只看该作者
看到這麼完整的PCB封裝庫,心理非場想要,但我得努力賺黑幣才行~
回复

使用道具 举报

板凳
ID:387047 发表于 2018-8-16 21:12 | 只看该作者
心理非場想要,但我得努力賺黑幣才行~
回复

使用道具 举报

地板
ID:1 发表于 2018-8-17 00:05 | 只看该作者
注意,此程序存在重复内容:详见http://www.51hei.com/bbs/dpj-84794-1.html
以后不要发这种重复的
回复

使用道具 举报

5#
ID:818482 发表于 2020-9-13 14:37 | 只看该作者
非常有用,看完恍然大悟
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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