当前位置:   article > 正文

单片机:STC89C52的最小单元_单片机52最小系统显示屏元器件名称

单片机52最小系统显示屏元器件名称
STC89C52RC是 STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
中文名
STC89C52
本    质
一种低耗高性能的微控制器
公    司
STC公司
特    性
低功耗、高性能CMOS8位微控制器
Flash存储器
8K
内    核
MCS-51

标准功能

编辑
具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线, 看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位 定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工 串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。

主要特性

编辑
8K字节程序存储空间;
512字节数据存储空间;
内带4K字节EEPROM存储空间;
可直接使用串口下载;

器件参数

编辑
1. 增强型8051单片机,6 时钟/ 机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051. [1]  
2. 工作电压:5.5V~3.3V(5V单片机)/3.8V~2.0V(3V 单片机)
3. 工作频率范围:0~40MHz,相当于普通8051 的0~80MHz,实际工作 频率可达48MHz
4. 用户应用程序空间为8K字节
5. 片上集成512 字节RAM
6. 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是 准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用 编程器,无 需专用 仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片
8. 具有EEPROM 功能
9. 共3 个16 位 定时器/计数器。即定时器T0、T1、T2
10. 外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发 中断方式唤醒
11. 通用异步 串行口(UART),还可用定时器软件实现多个UART
12. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)

13. PDIP封装





  1. #include <reg52.h>
  2. //串口assic控制led灯
  3. void delay02s(void) //延时1ms子程序
  4. {
  5. unsigned char i,j,k;
  6. for(i=18;i>0;i--) //20 //18 2.5K
  7. for(j=1;j>0;j--) //10 //20
  8. for(k=1;k>0;k--); //248
  9. }
  10. void delay200ms(void) //延时200ms子程序
  11. {
  12. unsigned char i,j,k;
  13. for(i=20;i>0;i--)
  14. for(j=20;j>0;j--) //10 //20
  15. for(k=248;k>0;k--); //248
  16. }
  17. sbit led0=P2^0;
  18. sbit led1=P2^1;
  19. sbit led2=P2^2;
  20. sbit led3=P2^3;
  21. sbit led4=P2^4;
  22. sbit led5=P2^5;
  23. sbit led6=P2^6;
  24. sbit led7=P2^7;
  25. void start_led(char n)
  26. {
  27. led0 = n&0x01; n=n>>1;
  28. led1 = n&0x01; n=n>>1;
  29. led2 = n&0x01; n=n>>1;
  30. led3 = n&0x01; n=n>>1;
  31. led4 = n&0x01; n=n>>1;
  32. led5 = n&0x01; n=n>>1;
  33. }
  34. unsigned char flag;
  35. void main(void)
  36. {
  37. int i=30;
  38. //设置参数
  39. TMOD = 0x20; //设定定时器1的工作方式为方式2
  40. TH1 = 0xfd;
  41. TL1 = 0xfd; //装载TH1、TL1
  42. TR1 = 1; //启动定时器1
  43. SM0 = 0;
  44. SM1 = 1; //设定串口工作方式为方式1
  45. REN = 1; //允许串行接收位
  46. EA = 1; //全局中断允许位
  47. ES = 1; //串口中断允许位
  48. // start_led(0);
  49. // delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
  50. // start_led(0xff);
  51. while(1)
  52. {
  53. /* 刚开始单片机缓冲寄存器为空,无数据可以显示
  54. * 先从串口接收数据,再返回该数据
  55. * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据
  56. * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值
  57. */
  58. led6 = ~led6;
  59. led7 = ~led7;
  60. delay200ms();
  61. if(flag == 1)
  62. {
  63. start_led(P1);
  64. //发送数据
  65. ES = 0; //关闭串口中断,发送数据
  66. SBUF = P1; //数据写入SBUF寄存器
  67. while(!TI); //等待
  68. TI = 0;
  69. ES = 1;
  70. flag = 0;
  71. }
  72. }
  73. }
  74. void ser() interrupt 4
  75. {
  76. //接收数据
  77. P1 = SBUF;
  78. flag = 1;
  79. RI = 0;
  80. }



  1. #include <reg52.h>//CPCI系统控制电源程序
  2. void delay02s(void) //延时1ms子程序
  3. {
  4. unsigned char i,j,k;
  5. for(i=18;i>0;i--) //20 //18 2.5K
  6. for(j=1;j>0;j--) //10 //20
  7. for(k=1;k>0;k--); //248
  8. }
  9. void delay200ms(void) //延时200ms子程序
  10. {
  11. unsigned char i,j,k;
  12. for(i=20;i>0;i--)
  13. for(j=20;j>0;j--) //10 //20
  14. for(k=248;k>0;k--); //248
  15. }
  16. void delay_ms()
  17. {
  18. int i,j;
  19. for(j=110;j>0;j--);
  20. }
  21. sbit led0=P2^0;
  22. sbit led1=P2^1;
  23. sbit led2=P2^2;
  24. sbit led3=P2^3;
  25. sbit led4=P2^4;
  26. sbit led5=P2^5;
  27. sbit ps_switch = P3^2;
  28. sbit pci_rst = P2^6;
  29. sbit ps_on = P2^7;
  30. void start_led(char n)
  31. {
  32. led0 = n&0x01; n=n>>1;
  33. led1 = n&0x01; n=n>>1;
  34. led2 = n&0x01; n=n>>1;
  35. led3 = n&0x01; n=n>>1;
  36. led4 = n&0x01; n=n>>1;
  37. led5 = n&0x01; n=n>>1;
  38. }
  39. unsigned char flag_switchon=0;
  40. unsigned char flag_switchFF=0;
  41. unsigned char flag_switchOSoff=0;
  42. unsigned char flag_switchOSen=0;
  43. unsigned char int_cnt=0;
  44. unsigned char flag;
  45. void checkOSoff()
  46. {
  47. unsigned int i=0,k=0;
  48. flag_switchOSoff=0;
  49. while(1)
  50. {
  51. if(pci_rst==0)
  52. {
  53. k++;
  54. }
  55. else
  56. {
  57. break;
  58. }
  59. if(k>3000)
  60. {
  61. flag_switchOSoff=1;
  62. break;
  63. }
  64. delay_ms();
  65. }
  66. }
  67. void checkOSen()
  68. {
  69. unsigned int i=0,k=0;
  70. if(flag_switchOSen==1)return ;
  71. while(1)
  72. {
  73. if(pci_rst==1)
  74. {
  75. k++;
  76. }
  77. else
  78. {
  79. break;
  80. }
  81. if(k>3000)
  82. {
  83. flag_switchOSen=1;
  84. break;
  85. }
  86. delay_ms();
  87. }
  88. }
  89. void checkSwitch()
  90. {
  91. unsigned int i=0,k=0;
  92. while(1)
  93. {
  94. if(ps_switch==0)
  95. {
  96. k++;
  97. }
  98. else
  99. {
  100. break;
  101. }
  102. if(k>3000)
  103. {
  104. break;
  105. }
  106. delay_ms();
  107. }
  108. if(k>3000)
  109. flag_switchFF = 1;
  110. else
  111. flag_switchFF = 0;
  112. //
  113. if(k>3)
  114. flag_switchon = 1;
  115. else
  116. flag_switchon = 0;
  117. }
  118. void send(int t)
  119. {
  120. ES = 0; //关闭串口中断,发送数据
  121. SBUF = t+0x30; //P1//数据写入SBUF寄存器
  122. while(!TI); //等待
  123. TI = 0;
  124. ES = 1;
  125. }
  126. int status=0;
  127. void main(void)
  128. {
  129. int i=0;
  130. //设置参数
  131. TMOD = 0x20; //设定定时器1的工作方式为方式2
  132. TH1 = 0xfd;
  133. TL1 = 0xfd; //装载TH1、TL1
  134. TR1 = 1; //启动定时器1
  135. SM0 = 0;
  136. SM1 = 1; //设定串口工作方式为方式1
  137. REN = 1; //允许串行接收位
  138. ES = 1; //串口中断允许位
  139. EA = 1; //全局中断允许位
  140. // EX0 = 1; //开外部中断0
  141. // IT0=1; //中断触发为跳沿触发
  142. // start_led(0);
  143. // delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
  144. // start_led(0xff);
  145. while(1)
  146. {
  147. /* 刚开始单片机缓冲寄存器为空,无数据可以显示
  148. * 先从串口接收数据,再返回该数据
  149. * 在中断中接收数据,同时将flag标志位置为1.说明接收到了数据
  150. * 若接收到数据(flag == 1),说明接收到了;否则说明未接收到数据,不显示。继续判断flag数值
  151. */
  152. checkSwitch(); //开机检测
  153. if(flag_switchFF == 1)//3秒关机
  154. {
  155. i++;
  156. flag_switchFF=0;
  157. flag_switchon = 0;
  158. delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
  159. delay200ms();delay200ms();delay200ms();delay200ms();delay200ms();
  160. flag_switchOSen = 0;
  161. send(0);
  162. }
  163. if(flag_switchon == 1)//开机
  164. {
  165. i++;
  166. flag_switchon=0;
  167. ps_on = 0;
  168. flag_switchOSoff = 0;
  169. flag_switchOSen = 0;
  170. send(1);
  171. }
  172. checkOSen();
  173. if(flag_switchOSen==1) //系统运行中。。。
  174. {
  175. checkOSoff();
  176. send(2);
  177. }
  178. if(flag_switchOSoff==1)//操作系统已经关闭
  179. {
  180. ps_on = 1;
  181. flag_switchon = 0;
  182. flag_switchFF=0;
  183. flag_switchOSen = 0;
  184. send(3);
  185. }
  186. if(flag == 1)//发送232数据
  187. {
  188. // start_led(P1);
  189. //发送数据
  190. ES = 0; //关闭串口中断,发送数据
  191. SBUF = P1; //P1//数据写入SBUF寄存器
  192. while(!TI); //等待
  193. TI = 0;
  194. ES = 1;
  195. flag = 0;
  196. }
  197. }
  198. }
  199. void ser() interrupt 4
  200. {
  201. //接收数据
  202. P1 = SBUF;
  203. flag = 1;
  204. RI = 0;
  205. }
  206. void INT0_ISR(void) interrupt 0
  207. {
  208. EX0=0;
  209. start_led(int_cnt++%10);
  210. P1 = int_cnt%10+0x30;
  211. // delay200ms();
  212. flag = 1;
  213. // ET0=1;
  214. // TR0=1;
  215. EA=1;
  216. EX0=1;
  217. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/571960
推荐阅读
相关标签
  

闽ICP备14008679号