找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1924|回复: 6
收起左侧

哪位大神帮我简化一下这个单片机程序

[复制链接]
ID:257276 发表于 2017-12-4 17:05 | 显示全部楼层 |阅读模式
单片机源程序:
  1. #include <STC15F2K60S2.H>
  2. #include<intrins.h>
  3. #define uc unsigned char
  4. #define ui unsigned int
  5. sbit cs1=P2^0;
  6. sbit cs2=P2^1;
  7. sbit rs=P2^2;
  8. sbit rw=P2^3;
  9. sbit e=P2^4;
  10. sbit cp=P2^5;
  11. sbit dir=P2^6;
  12. sbit rl=P2^7;
  13. sbit wr=P5^5;
  14. uc code sz[][12]={
  15. /*--  文字:  0  --*/
  16. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  17. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  18. 0xF8,0x04,0x04,0x04,0xF8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

  19. /*--  文字:  1  --*/
  20. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  21. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  22. 0x00,0x08,0xFC,0x00,0x00,0x00,0x00,0x02,0x03,0x02,0x00,0x00,

  23. /*--  文字:  2  --*/
  24. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  25. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  26. 0x18,0x84,0x44,0x24,0x18,0x00,0x03,0x02,0x02,0x02,0x02,0x00,

  27. /*--  文字:  3  --*/
  28. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  29. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  30. 0x08,0x04,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

  31. /*--  文字:  4  --*/
  32. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  33. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  34. 0x40,0xB0,0x88,0xFC,0x80,0x00,0x00,0x00,0x00,0x03,0x02,0x00,

  35. /*--  文字:  5  --*/
  36. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  37. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  38. 0x3C,0x24,0x24,0x24,0xC4,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

  39. /*--  文字:  6  --*/
  40. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  41. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  42. 0xF8,0x24,0x24,0x2C,0xC0,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

  43. /*--  文字:  7  --*/
  44. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  45. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  46. 0x0C,0x04,0xE4,0x1C,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,

  47. /*--  文字:  8  --*/
  48. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  49. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  50. 0xD8,0x24,0x24,0x24,0xD8,0x00,0x01,0x02,0x02,0x02,0x01,0x00,

  51. /*--  文字:  9  --*/
  52. /*--  宋体9;  此字体下对应的点阵为:宽x高=6x12   --*/
  53. /*--  高度不是8的倍数,现调整为:宽度x高度=6x16  --*/
  54. 0x38,0x44,0x44,0x44,0xF8,0x00,0x00,0x03,0x02,0x02,0x01,0x00
  55. };
  56. uc Y_i;
  57. uc Page_i;
  58. uc m,d,w,y,s,k;        
  59. void delay(uc z)
  60. {
  61.         uc y,j;
  62.         for(j=z;j>0;j--)                 
  63.          for(y=110;y>0;y--);
  64. }
  65. void xzl(uc com)
  66. {
  67.         rs=0;
  68.         rw=0;
  69.         P0=com;
  70.         e=1;
  71.         delay(5);
  72.         e=0;
  73.         delay(5);
  74.         rs=1;
  75.         rw=1;
  76. }                        
  77. void xsj(uc dat)
  78. {
  79.         rs=1;
  80.         rw=0;
  81.         P0=dat;
  82.         e=1;
  83.         delay(5);
  84.         e=0;
  85.         delay(5);
  86.         rs=0;
  87.         rw=1;
  88. }        
  89. void jz()
  90. {
  91.         uc hi,lei,he;
  92.         P1=0xf0;
  93.         hi=P1&0xf0;           
  94.         if(P1!=0xf0)
  95.         {
  96.                 P1=0xf0;
  97.                 hi=P1&0xf0;
  98.                 if(P1!=0xf0)
  99.                 {
  100.                         P1=0x0f;
  101.                         lei=P1&0x0f;
  102.                         he=hi+lei;
  103.                         while (P1!=0x0f)
  104.                         {
  105.                                 P1=0x0f;
  106.                                 lei=P1&0x0f;
  107.                                 he=hi+lei;
  108.                                 xs();
  109.                         }                 
  110.                         switch (he)
  111.                         {
  112.                                 case 0xee:s=0;break;
  113.                                 case 0xde:s=10;break;
  114.                                 case 0xbe:s=20;break;
  115.                                 case 0x7e:s=30;break;

  116.                                 case 0xed:s=40;break;
  117.                                 case 0xdd:s=50;break;
  118.                                 case 0xbd:s=60;break;
  119.                                 case 0x7d:s=70;break;

  120.                                 case 0xeb:s=80;break;
  121.                                 case 0xdb:s=90;break;
  122.                                 case 0xbb:s=100;break;
  123.                                 case 0x7b:s=110;break;

  124.                                 case 0xe7:s=120;break;
  125.                                 case 0xd7:s=130;break;
  126.                                 case 0xb7:s=140;break;
  127.                                 case 0x77:s=150;break;
  128.                         }
  129.                 }
  130.         }
  131. }
  132. void qp()
  133. {
  134.         uc i,j;
  135.         xzl(0x3f);
  136.         xzl(0xc0);
  137.         for(i=0;i<8;i++)
  138.         {
  139.                 xzl(0xb8+i);
  140.                 xzl(0x40);
  141.                 for(j=0;j<64;j++)
  142.                 xsj(0x00);
  143.         }
  144. }
  145. void Draw(uc page,uc yi,uc *ps,uc n)
  146. {
  147.         uc i;
  148.         xzl(0xb8+page);
  149.         xzl(0x40+yi);
  150.         for(i=0;i<n;i++)
  151.         {
  152.                 xsj(*ps);
  153.                 ps++;
  154.         }
  155. }
  156. void xswz(uc *p,uc x)
  157. {
  158.         uc c,v,b,n;
  159.         c=x/2;
  160.         if(Y_i<64)
  161.         {
  162.                 cs1=1;
  163.                 cs2=0;               
  164.                 Draw(Page_i,Y_i,p,c);
  165.                 Draw(Page_i,Y_i+c,p+c,c);v=c*2;
  166.                 Draw(Page_i+1,Y_i,p+v,c);b=v+c;
  167.                 Draw(Page_i+1,Y_i+c,p+b,c);
  168.         }
  169.         else
  170.         {
  171.                 cs1=0;
  172.                 cs2=1;
  173.                 Draw(Page_i,Y_i-64,p,c);n=64-c;
  174.                 Draw(Page_i,Y_i-n,p+c,c);
  175.                 Draw(Page_i+1,Y_i-64,p+v,c);
  176.                 Draw(Page_i+1,Y_i-n,p+b,c);                 
  177.         }
  178.         Y_i=Y_i+x;
  179. }
  180. void xzwz(uc page_i,uc y_i)
  181. {
  182.         Page_i=page_i;
  183.         Y_i=y_i;
  184. }
  185. void dyjxs()
  186. {               
  187.         xzwz(4,0);
  188.         xswz(sz[m/10],6);
  189. }
  190. void zd()
  191. {        
  192.         EA=1;
  193.         ET0=1;
  194.         TMOD=0x01;
  195.         TH0=(65536-50000)/256;
  196.         TL0=(65536-50000)%256;
  197.         TR0=1;
  198. }
  199. void main()
  200. {
  201.                 zd();
  202.                 qp();
  203.                  while(1)
  204.                 {                        
  205.                         dyjxs();                                                                                       
  206.                 }
  207. }
  208. void Tiem() interrupt 1
  209. {
  210.         TH0=(65536-50000)/256;
  211.         TL0=(65536-50000)%256;
  212.         jz();        
  213. }


复制代码

评分

参与人数 1黑币 +5 收起 理由
wangtao123 + 5 淡定

查看全部评分

回复

使用道具 举报

ID:241686 发表于 2017-12-4 17:35 | 显示全部楼层
刚开始学习液晶屏
回复

使用道具 举报

ID:230826 发表于 2017-12-4 22:05 | 显示全部楼层
P1=0xf0;
        hi=P1&0xf0;           
        if(P1!=0xf0)
        {
          P1=0xf0;
          hi=P1&0xf0;
          if(P1!=0xf0)
          {
          P1=0x0f;
          lei=P1&0x0f;
          he=hi+lei;
          while (P1!=0x0f)
          {
          P1=0x0f;
          lei=P1&0x0f;
          he=hi+lei;//?????

          xs();//????
回复

使用道具 举报

ID:230826 发表于 2017-12-4 22:10 | 显示全部楼层
rs=0;
        rw=0;
        P0=com;
        e=1;
        delay(5);
        e=0;
        delay(5);
        rs=1;//???
        rw=1;//???
回复

使用道具 举报

ID:257276 发表于 2017-12-5 09:16 | 显示全部楼层
changle11 发表于 2017-12-4 22:05
P1=0xf0;
        hi=P1&0xf0;           
        if(P1!=0xf0)

什么意思
回复

使用道具 举报

ID:257562 发表于 2017-12-5 10:08 | 显示全部楼层
P1=0xf0;         hi=P1&0xf0;                    if(P1!=0xf0)         {           P1=0xf0;           hi=P1&0xf0;           if(P1!=0xf0)           {           P1=0x0f;           lei=P1&0x0f;           he=hi+lei;           while (P1!=0x0f)           {           P1=0x0f;           lei=P1&0x0f;           he=hi+lei;//?????
回复

使用道具 举报

ID:257503 发表于 2017-12-5 10:57 | 显示全部楼层
P1=0xf0;         hi=P1&0xf0;                    if(P1!=0xf0)         {           P1=0xf0;           hi=P1&0xf0;           if(P1!=0xf0)           {           P1=0x0f;           lei=P1&0x0f;           he=hi+lei;           while (P1!=0x0f)           {           P1=0x0f;           lei=P1&0x0f;           he=hi+lei;//?????            xs();//????
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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