找回密码
 立即注册

QQ登录

只需一步,快速开始

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

EA DOGS102N-6 102x64 LCD仿真(编译器:BASCOM AVR)

[复制链接]
跳转到指定楼层
楼主

bascom-avr程序

'===========================================================
' 程序名称:图形LCD测试及电压表
' 单片机型号:ATmega8
' 时钟频率:8MHz
' 功能:演示EADOGS102图形LCD的显示功能并实现0-5V电压表(ADC0通道)
'===========================================================

' ----- 编译器设置 -----
$regfile = "m8def.dat"             ' 指定使用的AVR单片机型号,此文件包含ATmega8的寄存器定义
$crystal = 8000000                 ' 设置系统时钟频率(8MHz),用于定时、延时等函数
$hwstack = 32                      ' 硬件堆栈大小(字节),用于中断和函数调用
$swstack = 32                      ' 软件堆栈大小(字节),用于BASIC语言的GOSUB等
$framesize = 24                    ' 帧缓冲区大小(字节),用于字符串转换等临时存储

' ----- 图形LCD配置 -----
$lib "glcdEADOGS102.LIB"           ' 引入针对EADOGS102(或兼容)图形LCD的驱动库

   Const Eadogs_rotate = 0       ' 选择LCD的颠倒布局方式。当控制针脚在下方时使用 [Const Eadogs_rotate = 1]


' 配置图形LCD的引脚连接和分辨率
' 参数含义:
'   128 * 64eadogm  → 分辨率128x64,驱动类型为EADOGM系列
'   Cs1 = Portd.4   → 片选信号(CS1)接PORTD的第4脚
'   A0  = Portd.5   → 数据/命令选择(A0,即D/I)接PORTD的第5脚
'   Si  = Portd.7   → 串行数据输入(SI,即MOSI)接PORTD的第7脚
'   Sclk = Portd.6  → 串行时钟(SCLK)接PORTD的第6脚
'   Rst = Portc.6   → 复位信号(RST)接PORTC的第6脚(RESET)

Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.4 , A0 = Portd.5 , Si = Portd.7 , Sclk = Portd.6 , Rst = Portc.6


' 设置LCD对比度
' Glcdcmd &H81  → 扩展命令,进入对比度设置模式(根据EADOGS102指令集)
' Glcdcmd 14    → 设置对比度值为14(范围0~63,14为适中值)

Glcdcmd &H81 : Glcdcmd 14


' ----- 模数转换器(ADC)配置 -----
' Config Adc:
'   Single        → 单次转换模式(每次触发采样一次)
'   Prescaler = Auto → 自动选择预分频器以满足ADC时钟要求(通常50kHz~200kHz)
'   Reference = Avcc → 使用AVcc引脚作为参考电压(测量范围0~AVcc,此处AVcc=5V)

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc                         ' 启动ADC模块(使能ADC电源)


' ----- 变量声明 -----
Dim V_adc As Word                 ' 存储10位的ADC原始值(0~1023)
Dim V_float As Single             ' 存储转换后的电压值(浮点数,单位:伏特)
Dim V_str As String * 10          ' 用于存储格式化的电压字符串,最大10个字符
Dim Prog As Word                  ' 用于条形图绘制的进度值(0~1023对应LCD宽度)
Dim i as byte

' ----- 初始演示:显示图片 -----
Cls                               ' 清除整个LCD屏幕(所有像素点置0)
Showpic 0 , 0 , Plaatje           ' 显示图片
wait 1
cls

' ----- 初始演示:显示LCD测试信息 -----
Setfont my12_16                   ' 切换到自定义的12x16像素字体
Lcdat 4 , 10 , " "; Chr(128) ; Chr(129)  ; Chr(132) ; Chr(133) ; Chr(134);" " , 1
' 在行4列10(以字符为单位)显示特殊符号(ASCII 128~134为自定义图形文字"图形屏测试")和"LCD"字符串
Lcdat 2 , 36 , "LED"
Wait 2                            ' 延时2秒(单位:秒)
Cls                               ' 清除屏幕

Setfont Font8x8tt                 ' 切换到8x8像素等宽字体
Lcdat 1 , 1 , "DOGS102N-6 Test"   ' 第1行第1列显示测试标题
Lcdat 2 , 1 , " 102x64dot 3.3V"   ' 第2行显示分辨率和工作电压



' 绘制1到5的标尺
Cls 7, 0, 101, &H8                '绘制条形图宽度线
For i = 0 To 5
    Cls 7, i * 20, i * 20, &H7    '标注1~5v的分割线
    Lcdat 8, i * 20, i            '分段标注1~5字符
Next i

Setfont my12_16                   ' 切换到12x16像素大字体文件
'Lcdat 3 , 2 , " EADOGS"          ' 第3行显示产品系列名称
'Lcdat 5 , 2 , " 102N-6"          ' 被注释掉的另一行文字(可忽略)

' ----- 主循环:电压表功能(ADC0通道)-----
Do
   ' 读取ADC通道0(对应ATmega8的PC0引脚)
   V_adc = Getadc(0)              ' 执行AD转换并返回10位结果(0~1023)

   Prog = V_adc / 10              ' 将ADC值缩放到0~102范围
   ' 注:用于条形图宽度,代码后续用Cls 8绘制,Prog代表绘制的宽度值



   ' 将ADC原始值转换为对应电压(假设参考电压为5.00V)
   V_float = V_adc * 5.0          ' 先乘以参考电压(扩大为整数倍)
   V_float = V_float / 1023.0     ' 再除以最大分辨率(1023),得到实际电压(0~5.000V)

   ' 格式化电压字符串,保留两位小数(例如 "4.56")
   V_str = Fusing(v_float , "#0.00")
Setfont my12_16                   ' 切换到12x16像素大字体文件
   ' 在屏幕指定位置显示电压值
   ' Lcdat参数:行5,列2,显示内容(电压+":"+电压值+"V"),最后参数1表示反白显示
   Lcdat 3 , 2 , " "; ; V_str ; "V "       ', 1
   ' 这里Chr(132), Chr(133)是自定义的中文符号"电压"

   Waitms 100                     ' 延时100毫秒,控制采样频率(约10次/秒)

   ' 绘制条形图:
   ' 语法形式:CLS Y, X1, X2 [, CHAR]
   '作用:清除第 Y 行上从 X1 到 X2 的像素/字符段,可选填充字符 CHAR(默认 0,反色时用 255)
   ' 第一条:从X=0到Prog位置填充0xFF(通常代表黑色像素)
   Cls 6 , 0 , Prog , &HF
   ' 第二条:从X=102开始向左边清除(填充0x00,亮白像素)
   Cls 6 , Prog , 102 , &H00
   ' 这两行配合实现一个类似"进度条"的刷新效果
   ' 从而用条形长度表示电压高低(Prog值从0~102)。由于之前Prog = V_adc/10,故满量程时Prog=102。

Loop                              ' 无限循环

End                               ' 程序结束(实际上不会执行到这里)

' ----- 字体数据文件包含(必须放在程序末尾)-----
$include "../font8x8TT.font"      ' 8x8像素英文字体文件,路径相对于源文件
$include "../my12_16.font"        ' 12x16像素大字体文件

Plaatje:                          ' 图片数据标签
'包含图片数据
$bgf "../ks108.bgf"               ' 导入背景图片文件

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:342822 发表于 2026-5-20 12:33 | 只看该作者
这是我的三分自留地~~~~~~~~~~~~~~~
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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