找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7193|回复: 11
收起左侧

12864液晶(ST7920)串并实现各种类型源程序,注释很详细

  [复制链接]
ID:389337 发表于 2018-8-24 16:44 | 显示全部楼层 |阅读模式
12864实用各种串并类型
0.png

注释非常详细单片机驱动的12864源程序如下:
  1. #include<reg52.h>
  2. #include<12864.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int  
  5. uchar dis[110];  
  6. uchar a;  
  7. void delay1ms(uint xms)
  8. {   
  9.   unsigned int i,j;  
  10.   for(i=xms;i>0;i--)    /*或for(i=xms;i<0;i++)*/
  11.      for(j=110;j>0;j--); /*for(j=110;j<0;j++); 总循环数=xms*110*/
  12. }   
  13. void uart_int(void)
  14. {   
  15.   SCON=0x50;   // SCON=0x50是SM1=1和REN=1,设置串口方式1且允许串口接收。
  16.              //一般配合TMOD=0x20作串口中断程序初始化。     
  17.   PCON=0x00;   //         是设置波特率不加倍(0x80加倍)
  18.   TMOD=0x20;   //         是设置波特率发生器为定时器2为8位自动重装载模式
  19.   TH1 =0xFD;   
  20.   TL1 =0xFD;   /*SMOD是特殊功能寄存器PCON的第7位,可以控制波特率的,SMOD=1时串口通讯的波特率倍增,   为0时波特率不倍增。
  21.                SMOD=0时:参数=256-fsoc/12/32/波特率;      SMOD=1时:参数=256-fsoc/12/16/波特率:
  22.                12M晶振或11.0592M晶振的情况下,当SMOD=0时,9600波特率的参数是0xfd,当SMOD=1时,9600波特率的参数是0xfa。
  23.                            一个机器周期=12个时钟周期
  24.                            系统时钟进入串行波特率发生模块后,会进行32分频 ,
  25.                            如果你通过寄存器设置波特率倍增的话,这个32分频就会改为16分频。
  26.                            分频:主要是为了在内核频率与串口波特率之间找一个平衡,同时传统51也要设法降低时钟树上外设部分的工作频率、才能控制住功耗。*/

  27.   TR1 =1;      //         是开启定时器1
  28.   EA=1;              // 是开启总中断。
  29.   ES=1;             //是开启串口中断;
  30. }   

  31. void display(unsigned char *p)//显示
  32. {   
  33.    while(*p!='\0')  /*'\0'是空格,一般是字符串的结束标志,指针变量不等于‘/0’不会跳出循环*/
  34.   {   
  35.     write_dat(*p++);   /*调用函数:写显示数据到LCD,将数组中的所有字符一个个地显示在液晶屏幕上*/   
  36.     delay1ms(1);  
  37.   }
  38. }  


  39.    void serve()  interrupt 4   
  40. {      
  41.    dis[a++]=SBUF; /*单片机自动将串行数据接收缓冲器中的数据取走给table[n]*/     
  42.    RI=0;   /*RI字面是接收中断的意思,是串口接收中断标志,当RI=1时表示串口接收完成,
  43.           SBUF中保存好了接收的数据,此时申请中断,如果ES=1,就进入中断服务程序了。*/            
  44. }
  45. void main()
  46. {         
  47.    uart_int();  /*调用中断初始化函数*/  
  48.    lcd_init();   /*调用leo初始化函数*/

  49.    while(1)  
  50.    {      
  51.    write_cmd(0x98);
  52.         write_cmd(0x90);        /*写指令到第二行地址:串行数据显示的位置*/
  53.             write_cmd(0x88);
  54.                             write_cmd(0x80);
  55.    display(dis);   /*调用dispiay函数:将table的数组中输入的所有字符一个个地显示在液晶屏幕上*/
  56.    }
  57. }   
复制代码

所有资料51hei提供下载:
12864液晶各种实现类型.zip (147.25 KB, 下载次数: 339)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:451441 发表于 2018-12-24 17:14 | 显示全部楼层
谢谢分享,自学中正好卡在12864和proteus关于12864的仿真,LZ的资料帮助很大
回复

使用道具 举报

ID:601736 发表于 2019-8-19 20:37 | 显示全部楼层
好资料,先mark了
回复

使用道具 举报

ID:697530 发表于 2020-2-24 17:07 | 显示全部楼层
好资料,正是我要找的
回复

使用道具 举报

ID:664122 发表于 2020-3-1 19:08 | 显示全部楼层
现在卡在显示温度上了,急需大神在线指导
回复

使用道具 举报

ID:702234 发表于 2020-3-7 21:50 | 显示全部楼层
还是小hei论坛靠谱,找好久了终于找到想要的资料了
回复

使用道具 举报

ID:163501 发表于 2020-3-8 13:14 | 显示全部楼层
下来看盾,不知好不好用。
回复

使用道具 举报

ID:292102 发表于 2020-4-17 14:03 | 显示全部楼层
想仿真串行方式
回复

使用道具 举报

ID:292102 发表于 2020-4-17 14:04 | 显示全部楼层
之前都没成功,试试这个~
回复

使用道具 举报

ID:229137 发表于 2025-1-13 15:20 | 显示全部楼层
16032的不知道能不能用
回复

使用道具 举报

ID:295726 发表于 2025-1-13 16:20 | 显示全部楼层
还不错。就是看不懂。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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