单片机/MCU论坛
直播中

hcc

3年用户 11经验值
私信 关注
[问答]

单片机1602和流水灯如何同时运行?求大神编一个程序参考。

单片机型号:stc89c52
1602上面显示:我爱单片机。
流水灯八个灯轮流亮起。

回帖(5)

零落凡尘

2020-8-22 21:26:52
  1. #include
  2. #include
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. ***it lcden=P1^2;//液晶使能端
  6. ***it RS=P1^0;//液晶数据命令选择端
  7. ***it RW=P1^1;//液晶读写选择端
  8. uchar code table1[]="  qq417520418"        ;
  9. uchar code table2[]=" Unauthorized"         ;//转载请联系
  10. void delay(uint xms)
  11. {
  12.    uint y,z;
  13.    for(y=xms;y>0;y--)
  14.      for(z=110;z>0;z--);
  15. }
  16. void write_com(uchar com)              //command 命令
  17. {
  18.     RS=0;
  19.         RW=0;
  20.     P0=com;             //高脉冲输入,所以要把lcden进行改变
  21.         delay(5);
  22.         lcden=1;
  23.         delay(5);
  24.         lcden=0;
  25. }  
  26. void write_data(uchar date)              //data 数据
  27. {
  28.     RS=1;
  29.         RW=0;
  30.     P0=date;                   //高脉冲输入,所以要把lcden进行改变
  31.         delay(5);
  32.         lcden=1;
  33.         delay(5);
  34.         lcden=0;
  35. }        
  36. void init()
  37. {
  38.   lcden=0;
  39.   write_com(0x38);        //设置16*2显示,5*7点阵,八位数据口
  40.   write_com(0x0c);         //打开显示,但光标既不显示,也不闪动
  41.   write_com(0x06);         //写一个字地址指针后移一位
  42.   write_com(0x01);         //清屏
  43. }
  44. void main()
  45. {
  46. uchar n;
  47. init();
  48. for(n=0;n<12;n++)                  //就是前文提到的移位
  49. {
  50. write_data(table1[n]);
  51. delay(1);                                  //反正延迟必须有,不然会爆机
  52. }
  53. write_com(0x80+0x40);
  54. for(n=0;n<13;n++)
  55. {
  56. write_data(table2[n]);
  57. delay(1);
  58. }
  59. P1 =0xfe; //流水灯占用
  60. while(1)
  61. {
  62.              delay(50);
  63.              P1=_crol_(P1,1);
  64. }
  65. }

上班摸鱼写的,记事本写的,可能有小问题,中文代码自己百度
1 举报
  • hcc: 谢谢!!!

人中狼

2020-8-23 19:11:08
流水灯可以放在定时器中断里,1602在主程序里,这样流水灯就可以和1602分开了
举报

chenwei6991627

2020-8-24 08:54:45
自己找找,应该很多
1 举报
  • hcc: 我找了蛮久,没找到,谢谢

阿信509

2020-8-24 09:07:33
随便在论坛里一找就是好几百个程序
4 举报
  • hcc: 那个论坛有,我找了蛮久没找到符合要求的,谢谢
  • 阿信509 回复 hcc: 咱们论坛里就有好多1602和流水灯的程序啊,页面右上角那里有搜索功能
  • hcc 回复 阿信509: 没有一起执行的,全是单独
  • 阿信509 回复 hcc: 你要是要个现成的就找人给你编一个吧,你要是想学习的话,就把两个程序写一起就成了

零落凡尘

2020-8-27 16:37:31
#include
#include
#define uchar unsigned char
#define uint unsigned int
***it lcden=P1^2;//液晶使能端
***it RS=P1^0;//液晶数据命令选择端
***it RW=P1^1;//液晶读写选择端
uchar code table1[]="  qq417520418"        ;
uchar code table2[]=" Unauthorized"         ;//转载请联系
void delay(uint xms)
{
   uint y,z;
   for(y=xms;y>0;y--)
     for(z=110;z>0;z--);
}
void write_com(uchar com)              //command 命令
{
    RS=0;
        RW=0;
    P0=com;             //高脉冲输入,所以要把lcden进行改变
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}  
void write_data(uchar date)              //data 数据
{
    RS=1;
        RW=0;
    P0=date;                   //高脉冲输入,所以要把lcden进行改变
        delay(5);
        lcden=1;
        delay(5);
        lcden=0;
}        
void init()
{
  lcden=0;
  write_com(0x38);        //设置16*2显示,5*7点阵,八位数据口
  write_com(0x0c);         //打开显示,但光标既不显示,也不闪动
  write_com(0x06);         //写一个字地址指针后移一位
  write_com(0x01);         //清屏
}
void main()
{
uchar n;
init();
for(n=0;n<12;n++)                  //就是前文提到的移位
{
write_data(table1[n]);
delay(1);                                  //反正延迟必须有,不然会爆机
}
write_com(0x80+0x40);
for(n=0;n<13;n++)
{
write_data(table2[n]);
delay(1);
}
P1 =0xfe; //流水灯占用
while(1)
{
             delay(50);
             P1=_crol_(P1,1);
}
}
//上班摸鱼写了一个,记事本写可能会有少个括号啥的小错误,中文自己找对应代码,直接搜就行
举报

更多回帖

发帖
×
20
完善资料,
赚取积分