请高手看看我这程序哪里出错了 用ht1621b驱动的液晶屏

2020-01-15 19:26发布

本帖最后由 如果 于 2012-6-20 13:41 编辑

为什么时钟不会跑 求大神指点啊
  1. #include <stc11.h>
  2. #include <stdio.h>
  3. #include <intrins.h>
  4. #define BIAS 0X52             //1/3偏压,4背极
  5. #define RC256K 0X38           //系统时钟选择为片外RC振荡器
  6. #define WDTDIS1 0X0A           //禁止WDT溢出标志输出
  7. #define TIMERDIS 0X08           //时基输出禁止
  8. #define SYSEN 0X02              //打开系统时钟
  9. #define SYSDIS 0X00             //关闭系统时钟和偏压发生器
  10. #define LCDON 0X06            //打开LCD偏压发生器
  11. #define LCDOFF 0X04        //关闭LCD偏压发生器
  12. #define TONEON  0X12       //打开音频输出
  13. #define TONEOFF 0X10       //关闭音频输出  
  14. sbit CS=P2^0;
  15. sbit WRD=P2^2;
  16. sbit DATA=P2^3;
  17. sbit LED=P2^1;
  18. sbit speak=P1^4;

  19. #define uchar unsigned char
  20. #define uint unsigned int


  21. char tab[]={0x5f,0x06,0x6b,0x2f,0x36,0x3d,0x7d,0x07,0x7f,0x3f};  //显示0—9  
  22. char x,sec,min,hour,shi;
  23. uchar a[16];


  24. /***************************延时子函数******************************/
  25. void delay(uchar i)                   //j=12延时约4.3us
  26. {

  27.   while(i--)
  28.   {
  29.    uchar j=0;
  30.    while(j<8)
  31.    j++;
  32.   }
  33. }

  34. void delay_1s()
  35. {unsigned int i,j,k;
  36. for(i=100;i>0;i--)
  37.    for(j=20;j>0;j--)
  38.      for(k=248;k>0;k--);

  39. }


  40. void delay_ms(int x)                         //延时毫秒
  41. {
  42.         int i;
  43.         while(x--)
  44.         {
  45.                 for(i=0;i<100;i++);
  46.                
  47.         }
  48. }

  49. void SendBit_1621(uchar dat ,uchar cnt)
  50. {
  51. uchar i;
  52. for(i =0; i <cnt; i ++)
  53. {
  54.   if((dat&0x80)==0)
  55.   DATA=0;
  56.   else
  57.   DATA=1;
  58.   WRD=0;
  59.   delay(2);  
  60.   WRD=1;
  61.         dat=dat<<1;
  62. }
  63. }

  64. void SendDataBit_1621(uchar dat,uchar cnt)
  65. {
  66. uchar i;
  67. for(i =0; i <cnt; i ++)
  68. {
  69.   if((dat&0x01)==0) DATA=0;
  70.   else DATA=1;
  71.   WRD=0;
  72.   delay(2);
  73.   WRD=1;
  74.   dat=dat>>1;
  75. }
  76. }
  77. void SendCmd(uchar command)
  78. {
  79. CS=0;
  80. _nop_();
  81. _nop_();
  82. SendBit_1621(0x80,4);
  83. SendBit_1621(command,8);
  84. CS=1;
  85. }
  86. void Write_1621(uchar addr,uchar dat)
  87. {
  88. CS=0;
  89. _nop_();
  90. _nop_();
  91. SendBit_1621(0xa0,3);
  92. SendBit_1621(addr,6);
  93. SendDataBit_1621(dat,4);
  94. CS=1;
  95. }
  96. void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
  97. {
  98. uchar i;
  99. CS=0;
  100. _nop_();
  101. _nop_();
  102. SendBit_1621(0xa0,3);
  103. SendBit_1621(addr,6);
  104. for(i =0; i <cnt; i ++,p++)
  105. {
  106.   SendDataBit_1621(*p,8);
  107. }
  108. CS=1;
  109. }


  110. /*******************************主函数******************************/
  111. main()                                    
  112. {
  113.        
  114. //a[0]=0x00;a[1]=0x00;a[2]=0x00;a[3]=0x00;a[4]=0x00;
  115. //a[5]=0x00;a[6]=0x00;a[7]=0x00;a[8]=0x00;
  116. //a[9]=0x5F;a[10]=0x5F;a[11]=0x5F;a[12]=0x5F;
  117. //a[13]=0x00;a[14]=0x00;a[15]=0x00;
  118.         speak=1;
  119.        
  120.         TMOD=0x01;
  121.         ET0=1;
  122.         EA=1;
  123.         TH0=(65535-10000)/256;
  124.         TL0=(65535-10000)%256;
  125.         TR0=1;

  126.         SendCmd(BIAS);
  127.         SendCmd(SYSEN);
  128.         SendCmd(LCDON);
  129.         // SendCmd(RC256K);
  130.         WriteAll_1621(0,a,16);
  131.         // SendCmd(LCDOFF);
  132.    while(1)
  133.         {

  134.                 /*speak=0;
  135.                                 delay_1s();
  136.                                 speak=1;
  137.                                 delay_1s();*/
  138.                 a[12]=tab[min%10];                                 //显示分个位
  139.                 delay_ms(2);

  140.                 a[11]=tab[min/10];                                 //显示分十位
  141.                 delay_ms(2);

  142.                 a[10]=tab[hour%10];                             //显示时个位
  143.                 delay_ms(2);

  144.                 a[9]=tab[(hour/10)|0x80];                         //显示时十位
  145.                 delay_ms(2);
  146.                
  147.         }
  148.        
  149.        
  150.        
  151. }

  152. void int0() interrupt 1
  153. {       
  154.         //uchar a[16];
  155.         TH0=(65535-10000)/256;
  156.         TL0=(65535-10000)%256;                   //定时10ms       
  157.         x++;
  158.         shi++;
  159.         if(shi>=50)
  160.         {
  161.                 shi=0;
  162.                 //a[11]=0x80;
  163.                 //a[10]=0x80;
  164.         }
  165.         if(x>=100)                                          //表示1S
  166.         {
  167.                 x=0;
  168.                 sec++;
  169.                 if(sec==60)                                  //到60秒,秒清零,分加一
  170.                 {
  171.                         sec=0;
  172.                         min++;
  173.                         if(min==60)                         //到60分,分清零,小时加一
  174.                         {
  175.                                 min=0;
  176.                                 hour++;
  177.                                 /*speak=0;
  178.                                 delay_1s();
  179.                                 speak=1;
  180.                                 delay_1s();*/
  181.                                 if(hour==24)         //到24时,时清零,也是所有清零
  182.                                 {
  183.                                         hour=0;
  184.                                 }
  185.                         }
  186.                 }
  187.         }
  188. }
复制代码程序调试不出来,没显示
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
seti
1楼-- · 2020-01-16 21:16
怎么没见while(1)里面写1621的ram?
如果
2楼-- · 2020-01-16 22:44
seti 发表于 2012-6-20 14:30
怎么没见while(1)里面写1621的ram?

原来是这样,谢谢了  可以了
如果
3楼-- · 2020-01-17 02:15
jinbangzhou 发表于 2012-6-20 13:51
#define FREQUENCY          36000000

#if FREQUENCY > 8000

谢谢  加深理解一下
jinbangzhou
4楼-- · 2020-01-17 04:45
seti 发表于 2012-6-20 14:30
怎么没见while(1)里面写1621的ram?

while(1)的程序只需调用初始化部分,还有一个写数据部分
lijie1116
5楼-- · 2020-01-17 06:24
 精彩回答 2  元偷偷看……

一周热门 更多>