找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13104|回复: 13
打印 上一主题 下一主题
收起左侧

51单片机ILI9341彩屏版万年历仿真(DS3231时钟 240128LCD驱动源程序)

  [复制链接]
跳转到指定楼层
楼主
ILI9341tft屏幕的单片机驱动给广大网友做参考,由于时间写的参促,难免有错希望大家指出.
单片机彩屏版万年历仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)



单片机源程序如下(主程序):

  1. #include <REGX55.H>
  2. #include "TFT.H"
  3. #include "TFT_GDI.H"
  4. #include "DS3231.h" //如果不测试时间请注销它
  5. void Travel_time();
  6. void Display_stc(void);
  7. void Display_dyn_time(void);//显示需更新的界面
  8. void Display_dyn_rili(void);//显示需更新的界面
  9. //=========================================================================
  10. //本程序用来学习彩屏应用,以及时钟写法,学习钟能深入了解51编程,让你展握编辑思想.
  11. //时间调整程序,留给各位网友,发挥自己想象
  12. //如果有能力,可以采用GPS调时.
  13. //=========================================================================
  14. void main()
  15. {
  16.         //写时间为了测试用,
  17.         IIC_single_byte_write(0x00,0x54);
  18.         IIC_single_byte_write(0x01,0x59);
  19.         IIC_single_byte_write(0x02,0x23);
  20.         
  21.         IIC_single_byte_write(0x04,0x15);
  22.         IIC_single_byte_write(0x05,0x02);
  23.         IIC_single_byte_write(0x06,0x18);
  24.         //不用测试时间请注销
  25.         LCD_Init();
  26.         Display_stc();
  27.         Display_dyn_time();
  28.         Display_dyn_rili();
  29.         
  30.         while(1)
  31.         {
  32.                 Travel_time();
  33.         }
  34. }
复制代码
TFT_GDI.C
  1. #include "TFT.H"
  2. #include "TFT_GDI.H"

  3. void LcdPutStr(RECT rect,unsigned int color,unsigned int bkcolor,unsigned char* GB_font,unsigned int font_num)
  4. {//四个参数分别起启地址X与Y,字体颜色,字体背景色,要显示数字
  5.         unsigned char i,j;
  6.         LCD_SetArea(rect);
  7.         LCD_WR_REG(0x2C);//写储存器命令
  8.         for(i=0;i<font_num;i++)
  9.         {
  10.                  for(j=8;j>0;j--)
  11.                 {
  12.                                 if(1==(GB_font[i]>>j-1&0x01))//判断字符位置是否有像素//--有
  13.                                 {
  14.                                         LcdWirteColorData(color);//写入字体颜色
  15.                                 }
  16.                                 else //没有
  17.                                 {
  18.                                                 LcdWirteColorData(bkcolor);//没有则写入背景色

  19.                     }
  20.                 }
  21.                
  22.         }
  23. }
  24. void show816(unsigned int num_X, unsigned int num_Y,unsigned char* GB_font)
  25. {
  26.                 RECT rect;//屏显示范围
  27.                 num_Y=239-num_Y-15;//屏坐标转换
  28.                 rect.top=num_X;
  29.                 rect.left=num_Y;
  30.                 rect.right=num_Y+15;
  31.                 rect.bottom=num_X+15;
  32.                 LcdPutStr(rect,0XF800,0XFfff,GB_font,16);
  33. }
  34. void show3216(unsigned int num_X, unsigned int num_Y,unsigned char* GB_font)
  35. {//调用该涵数,num_X最大不要超过224,num_Y不超304
  36.                 RECT rect;//屏显示范围
  37.                 num_Y=239-num_Y-15;//屏坐标转换
  38.                 rect.top=num_X;
  39.                 rect.left=num_Y;
  40.                 rect.right=num_Y+15;
  41.                 rect.bottom=num_X+31;
  42.                 LcdPutStr(rect,0XF800,0XFfff,GB_font,32);
  43. }
  44. void show3264(unsigned int num_X, unsigned int num_Y,unsigned char* GB_font)
  45. {
  46.                 RECT rect;//屏显示范围
  47.                 num_Y=239-num_Y-63;//屏坐标转换
  48.                 rect.top=num_X;
  49.                 rect.left=num_Y;
  50.                 rect.right=num_Y+63;
  51.                 rect.bottom=num_X+31;        
  52.                 LcdPutStr(rect,0XF800,0XFfff,GB_font,255);
  53. }
复制代码

DS3231.c单片机源程序如下:
  1. #include <REGX55.H>
  2. #include "DS3231.h"
  3. #include <intrins.h>
  4. sbit SCL        =        P3^0;  //时钟
  5. sbit SDA        =        P3^1;  //数据
  6. void delay_IIC(void)   
  7. {//IIC总线限速延时函数。
  8. //该函数是空函数,延时4个机器周期。
  9. _nop_();_nop_();_nop_();_nop_();
  10. }
  11. //void IIC_Init(void)
  12. //{//IIC总线初始化函数

  13. //   SDA=1;//释放IIC总线的数据线。
  14. //   SCL=1;//释放IIC总线的时钟线。
  15. //}
  16. void IIC_start(void)
  17. {//IIC总线产生起始信号函数
  18.      
  19.      SDA=1;//拉高数据线
  20.      SCL=1;//拉高时钟线
  21.      delay_IIC();
  22.      SDA=0;//在时钟线为高电平时,拉低数据线,产生起始信号。
  23.      delay_IIC();
  24.      SCL=0;//拉低时钟线
  25. }
  26. void IIC_stop(void)
  27. {//IIC总线产生停止信号函数
  28.     SDA=0;//拉低数据线
  29.     delay_IIC();
  30.     SCL=1;//拉高时钟线。
  31.     delay_IIC();
  32.     SDA=1;//时钟时线为高电平时,拉高数据线,产生停止信号。
  33.     delay_IIC();
  34. }
  35. bit IIC_Tack(void)
  36. {//接收应答信号函数
  37.     bit ack;//定义一个位变量,来暂存应答状态。
  38.     SDA=1;//释放数据总线,准备接收应答信号。
  39.     delay_IIC();
  40.     SCL=1;//拉高时钟线。
  41.     delay_IIC();
  42.     ack=SDA;//读取应答信号的状态。
  43.     delay_IIC();
  44.     SCL=0;//拉低时钟线。
  45.     delay_IIC();
  46.     return ack;//返回应答信号的状态,0表示应答,1表示非应答。
  47. }
  48. void IIC_write_byte(unsigned char Data)
  49. {//向IIC总线写入一个字节的数据函数
  50.     unsigned char i;
  51.      for(i=0;i<8;i++)//有8位数据
  52.     {
  53.         SDA=Data&0x80;//写最高位的数据
  54.           delay_IIC();
  55.           SCL=1; //拉高时钟线,将数写入到设备中。
  56.         delay_IIC();
  57.         SCL=0;//拉低时钟线,允许改变数据线的状态
  58.         delay_IIC();
  59.         Data=Data<<1;//数据左移一位,把次高位放在最高位,为写入次高位做准备
  60.     }
  61. }
  62. unsigned char IIC_read_byte()
  63. {//从IIC总线读取一个字节的数据函数
  64.     unsigned char i;
  65.     unsigned char Data;       //定义一个缓冲寄存器。
  66.     for(i=0;i<8;i++)//有8位数据
  67.     {
  68.         SCL=1;//拉高时钟线,为读取下一位数据做准备。
  69.         delay_IIC();
  70.         Data=Data<<1;//将缓冲字节的数据左移一位,准备读取数据。
  71.         delay_IIC();
  72.       
  73.         if(SDA)//如果数据线为高平电平。
  74.             Data=Data|0x01;//则给缓冲字节的最低位写1。
  75.         SCL=0;//拉低时钟线,为读取下一位数据做准备。
  76.         delay_IIC();
  77.     }
  78.     return Data;//返回读取的一个字节数据。
  79. }

  80. void IIC_single_byte_write(unsigned char Waddr,unsigned char Data)
  81. {//向任意地址写入一个字节数据函数
  82.     IIC_start();//产生起始信号
  83.     IIC_write_byte(0xd0);//写入设备地址(写)
  84.     IIC_Tack();//等待设备的应答
  85.     IIC_write_byte(Waddr);//写入要操作的单元地址。
  86.     IIC_Tack();//等待设备的应答。
  87.     IIC_write_byte(Data);//写入数据。
  88.     IIC_Tack();//等待设备的应答。
  89.     IIC_stop();//产生停止符号。
  90. }
  91. unsigned char IIC_single_byte_read(unsigned char Waddr)
  92. {//从任意地址读取一个字节数据函数
  93.     unsigned char Data;//定义一个缓冲寄存器。
  94.         
  95.     IIC_start();//产生起始信号
  96.     IIC_write_byte(0xd0);//写入设备地址(写)
  97.     IIC_Tack();//等待设备的应答
  98.     IIC_write_byte(Waddr);//写入要操作的单元地址。
  99.     IIC_Tack();//等待设备的应答。
  100.     IIC_stop();//产生停止符号。

  101.     IIC_start();//产生起始信号

  102.         
  103.     IIC_write_byte(0xd1);//写入设备地址(写)
  104.     IIC_Tack();//等待设备的应答
  105. ……………………

  106. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
51万年历彩屏版.7z (109.57 KB, 下载次数: 449)


评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏11 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:65680 发表于 2018-5-13 17:31 | 只看该作者
刚好需要,找了一波,可以的,感谢
回复

使用道具 举报

板凳
ID:341117 发表于 2018-7-14 19:54 | 只看该作者
下载后需要用winrar才能解压
回复

使用道具 举报

地板
ID:371835 发表于 2018-7-15 10:18 | 只看该作者
能不能发个完整版的。
回复

使用道具 举报

5#
ID:377565 发表于 2018-7-23 22:23 | 只看该作者
我也要下载,谢谢楼主
回复

使用道具 举报

6#
ID:100224 发表于 2018-12-3 10:08 | 只看该作者
刚好需要
回复

使用道具 举报

7#
ID:412534 发表于 2018-12-8 21:45 | 只看该作者
可以用
回复

使用道具 举报

8#
ID:56490 发表于 2019-7-25 11:51 | 只看该作者
下载了打不开
回复

使用道具 举报

9#
ID:643346 发表于 2019-11-23 14:09 | 只看该作者
谢谢大佬,太牛逼了
回复

使用道具 举报

10#
ID:585455 发表于 2020-10-1 16:05 | 只看该作者
正常玩TFT,剛好可以測試,測試完再報告結果。
回复

使用道具 举报

11#
ID:585455 发表于 2020-10-1 16:14 | 只看该作者
板子不一樣,沒辦法正確驅動,不過依然感謝你。
回复

使用道具 举报

12#
ID:66328 发表于 2021-2-20 10:23 | 只看该作者
看着很好,点赞支持,谢谢分享,学习了
回复

使用道具 举报

13#
ID:884564 发表于 2021-3-2 21:00 | 只看该作者
真是学习好去处
回复

使用道具 举报

14#
ID:88606 发表于 2021-7-11 17:40 | 只看该作者
这个屏哪有?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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