stc89c52在Linux或MacOS下使用sdcc和stcgal中断与LCD测试代码

举报
zhangrelay 发表于 2021/07/15 01:36:51 2021/07/15
【摘要】 使用说明参考:https://zhangrelay.blog.csdn.net/article/details/108449115 外部中断: #include<8052.h> #define LSA P1_5 #define LSB P1_6#define LSC P1_7 void EXint_Init(void);void Delayms(unsigne...

使用说明参考:https://zhangrelay.blog.csdn.net/article/details/108449115

外部中断:


  
  1. #include<8052.h>
  2. #define LSA P1_5
  3. #define LSB P1_6
  4. #define LSC P1_7
  5. void EXint_Init(void);
  6. void Delayms(unsigned int);
  7. void Down2Up(int);
  8. void Up2Down(int);
  9. void EXINT0() __interrupt 0;
  10. void EXINT1() __interrupt 2;
  11. void main()
  12. {
  13. EXint_Init();
  14. LSA=0;
  15. LSB=0;
  16. LSC=0;
  17. while(1)
  18. {
  19. P0 = 0xff;
  20. Delayms(250);
  21. P0 = 0x00;
  22. Delayms(250);
  23. }
  24. }
  25. void EXint_Init()
  26. {
  27. IT0=1;
  28. IT1=0;
  29. // IPH=0x40;
  30. PX1=1;
  31. EA=1;
  32. EX0=1;
  33. EX1=1;
  34. }
  35. void Delayms(unsigned int xms)
  36. {
  37. unsigned int i,j;
  38. for(i = xms;i > 0;i--)
  39. {
  40. for (j = 110;j > 0;j--);
  41. }
  42. }
  43. void EXINT0() __interrupt 0
  44. {
  45. Down2Up(3);
  46. }
  47. void EXINT1() __interrupt 2
  48. {
  49. Up2Down(3);
  50. }
  51. void Down2Up(int x)
  52. {
  53. int i, j;
  54. unsigned char sel=0xfe;
  55. for(i=0;i<x;i++)
  56. {
  57. for(j=0;j<8;j++)
  58. {
  59. P0 = sel;
  60. Delayms(250);
  61. sel =sel<<1;
  62. }
  63. sel=0xfe;
  64. }
  65. }
  66. void Up2Down(int x)
  67. {
  68. int i, j;
  69. unsigned char sel=0x7f;
  70. for(i=0;i<x;i++)
  71. {
  72. for(j=0;j<8;j++)
  73. {
  74. P0 = sel;
  75. Delayms(250);
  76. sel=sel>>1;
  77. }
  78. sel=0x7f;
  79. }
  80. }

定时器中断:


  
  1. #include <8052.h>
  2. #define Wave P0_1 //位定义,定义完之后,以下 Wave 即代表P0.1
  3. #define LSA P1_5 // P0口所接的发光二极管由开发板上的WaveS0控制,
  4. #define LSB P1_6 //且该位连接到74HC138三八译码器的输出端,
  5. #define LSC P1_7 //因此P1.5,P1.6,P1.7需赋值0以选中该位。
  6. unsigned char cnt = 0; //定义一个计数变量,记录 T0 溢出次数
  7. void Timer0() __interrupt 1;
  8. /************************************************************/
  9. void main () //主函数
  10. {
  11. LSA=0; //本开发板的P0发光二极管片选地址
  12. LSB=0;
  13. LSC=0;
  14. Wave = 0; //初始化P1.0=0
  15. TMOD = 0x01; //设置定时器T0工作方式1
  16. TL0 = 47104%256; //计数器初值
  17. TH0 = 47104/256;
  18. TR0 = 1; //启动定时器
  19. ET0 = 1; //开中断
  20. EA = 1;
  21. while(1); //模拟主程序其它工作
  22. }
  23. /************************************************************/
  24. void Timer0() __interrupt 1 //定时器 T0 中断响应
  25. {
  26. TL0 = 47104%256; //计数器初值
  27. TH0 = 47104/256;
  28. cnt++; //计数值自加 1
  29. if (cnt > 49) //判断 T0 溢出是否达到 50 次,100次
  30. {
  31. Wave=1;
  32. if (cnt > 99)
  33. {
  34. cnt=0;
  35. Wave=0;
  36. }
  37. //cnt = 0; //达到 50 次后计数值清零
  38. /*if( Wave = 0 )
  39. {
  40. Wave = 1;
  41. }
  42. else
  43. {
  44. Wave = 0;
  45. }*/
  46. //Wave = ~Wave; //Wave 取反:0-->1、1-->0
  47. }
  48. }

helloworld:


  
  1. #include<8052.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. #define lcden P1_2
  5. #define lcdrs P1_0
  6. #define rw P1_1
  7. uchar table[] = "Hello World!";
  8. uchar num;
  9. void delay(uint z) {
  10. uint x, y;
  11. for(x = z; x > 0; x--)
  12. for(y = 110; y > 0; y--);
  13. }
  14. void write_com(uchar com) {
  15. lcdrs = 0;
  16. P0 = com;
  17. delay(5);
  18. lcden = 1;
  19. delay(5);
  20. lcden = 0;
  21. }
  22. void write_data(uchar date) {
  23. lcdrs = 1;
  24. P0 = date;
  25. delay(5);
  26. lcden = 1;
  27. delay(5);
  28. lcden = 0;
  29. }
  30. void init() {
  31. rw = 0;
  32. lcden = 0;
  33. write_com(0x38);
  34. write_com(0x0e);
  35. write_com(0x06);
  36. write_com(0x01);
  37. write_com(0x80);
  38. }
  39. void main() {
  40. init();
  41. for(num = 0; num < 12; num++) {
  42. write_data(table[num]);
  43. delay(100);
  44. }
  45. while(1);
  46. }

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/108953914

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。