找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2834|回复: 1
收起左侧

基于51单片机的可控硅调压调光源程序-带过零检测

[复制链接]
ID:338053 发表于 2018-5-25 14:35 | 显示全部楼层 |阅读模式
基于51单片机的可控硅调压调光程序-带过零检测

单片机源程序如下:
  1. #include<reg52.h>

  2. #include<intrins.h>
  3. sbitledRS=P1^0;
  4. sbitledRW=P1^1;
  5. sbit ledE=P1^2;
  6. sbit keyjia=P2^7;
  7. sbitkeyjian=P2^6;
  8. sbitcontrolLD=P1^3;
  9. bitflag1=1;
  10. bitflag2=1;
  11. unsigned
  12. char code table[]=" guang liangdu
  13. ";
  14. unsignedchar code table1[]=" 00 ";
  15. intnum,flag=0,count=0;
  16. charliangdu=3;
  17. voiddelaykt(void) //导通延时
  18. {
  19. unsigned char a;
  20. for(a=2;a>0;a--);
  21. }
  22. voiddelay(int z) //可调延时
  23. {
  24. unsigned x,y;
  25. for(x=z;x>0;x--)
  26. for(y=110;y>0;y--);
  27. }
  28. void
  29. delay9ms(void) //误差
  30. -0.43402777778us 延时9ms
  31. {
  32. unsigned char a,b,c;
  33. for(c=1;c>0;c--)
  34. for(b=224;b>0;b--)
  35. for(a=17;a>0;a--);
  36. }
  37. voidwrite_com(unsigned com) //写指令
  38. {
  39. ledRS=0;
  40. P0=com;
  41. delay(10);
  42. ledE=1;
  43. delay(20);
  44. ledE=0;
  45. }
  46. voidwrite_date(unsigned date) //写数据
  47. {
  48. ledRS=1;
  49. P0=date;
  50. delay(10);
  51. ledE=1;
  52. delay(20);
  53. ledE=0;
  54. }
  55. voidwrite_liangdu(unsigned liangdu) //写亮度
  56. {
  57. int shi,ge;
  58. shi=(liangdu-3)/10;
  59. ge=(liangdu-3)%10;
  60. write_com(0x80+0x40+7);
  61. write_date(0x30+shi);
  62. write_date(0x30+ge);
  63. }
  64. voidinit() //初始化
  65. {
  66. controlLD=1; //触发控制初始化
  67. ledRW=0; //液晶初始化
  68. ledE=0;
  69. write_com(0x38);
  70. write_com(0x0c);
  71. write_com(0x06);
  72. write_com(0x80);
  73. for(num=0;num<15;num++)
  74. {
  75. write_date(table[num]);
  76. delaykt();
  77. }
  78. write_com(0x80+0x40);
  79. for(num=0;num<15;num++)
  80. {
  81. write_date(table1[num]);
  82. delaykt();
  83. }
  84. EA=1; //外部中断设置
  85. EX0=1;
  86. IT0=1;
  87. }
  88. voidkeyscanf() //键盘判断
  89. {
  90. if(keyjia==0) //加键判断
  91. {
  92. delaykt();
  93. if(keyjia==0)
  94. {
  95. if(flag1==1)
  96. {
  97. flag1=0;
  98. liangdu++;
  99. if(liangdu==10)
  100. liangdu=3;
  101. write_com(0x80+0x40+7);
  102. write_liangdu(liangdu);
  103. }
  104. }
  105. }
  106. else if(keyjia!=0)
  107. {
  108. delaykt();
  109. if(keyjia!=0)
  110. flag1=1;
  111. }
  112. if(keyjian==0) //减键判断
  113. {
  114. delaykt();
  115. if(keyjian==0)
  116. {
  117. if(flag2==1)
  118. {
  119. flag2=0;
  120. liangdu--;
  121. if(liangdu==2)
  122. liangdu=9;
  123. write_com(0x80+0x40+7);
  124. write_liangdu(liangdu);
  125. }
  126. }
  127. }
  128. else if(keyjian!=0)
  129. {
  130. delaykt();
  131. if(keyjian!=0)
  132. flag2=1;
  133. }
  134. }
  135. voidzhongduan() interrupt 0 //外部中断
  136. {
  137. flag=1;
  138. }
  139. voidtimepd() //同步标志判断与定时器设置
  140. {
  141. if(flag==1)
  142. {
  143. flag=0;
  144. TMOD=0x01;
  145. TH0=(65536-1000*(10-liangdu))/256;
  146. TL0=(65536-1000*(10-liangdu))%256;
  147. ET0=1;
  148. TR0=1;
  149. }
  150. }
  151. voidtime0() interrupt 1 //定时中断程序
  152. {
  153. count=1;
  154. }
  155. voidchufa() //MOS3020触发
  156. {
  157. if(count==1)
  158. {
  159. count=0;
  160. controlLD=0;
  161. delaykt();
  162. controlLD=1;
  163. delay9ms();
  164. controlLD=0;
  165. delaykt();
  166. controlLD=1;
  167. }
  168. }
  169. voidmain()
  170. {
  171. init();
  172. while(1)
  173. {
  174. keyscanf();
  175. timepd();
  176. chufa();
  177. }
  178. }
复制代码

所有资料51hei提供下载:
基于51单片机的可控硅调压调光程序-带过零检测.rar (1.16 KB, 下载次数: 91)
回复

使用道具 举报

ID:416820 发表于 2018-12-28 19:18 | 显示全部楼层
顶顶,支持楼主
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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