⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st7920hz.bas

📁 用bascom编的一个st7920LCD汉字显示程序
💻 BAS
字号:

'BASCOM-AVR1.11.9.0编译 
 
$regfile = "m16def.dat" 
$crystal = 8000000 
Dim Zf As String * 16 
Dim Zf1 As String * 1 
Dim A0 As Word 
Dim A1 As Byte 
Dim Gs As Byte 
Dim Rs As Bit 
Dim I As Byte 
Dim Ac As Byte 
Ac = 0 

Config Spi = Soft , Dout = Portc.2 , Clock = Portc.1        '模拟SPI协议 
Spiinit 
Waitms 100 

Do 
'-------------------RS=0 就是写指令,下面是指示LCD初始化------------------------- 
   Rs = 0 
   A0 = &B00110000 : Gosub Data_out : Waitms 10 
   A0 = &B00001100 : Gosub Data_out : Waitms 10 
   A0 = &B00000001 : Gosub Data_out : Waitms 10 
   A0 = &B00000110 : Gosub Data_out : Waitms 10 

'---------------------------RS=1写数据,RS=0写指令------------------------------- 
   Rs = 0 : A0 = &H80 : Gosub Data_out                      '光标复位 
   Rs = 1 : Zf = " AVR单片机DIY" : Gosub Zf_out             '显示字符 
   Rs = 0 : A0 = &H90 : Gosub Data_out                      '光标定位到第二行 
   Rs = 1 : Zf = Str(ac) : Gosub Zf_out                     '显示变量AC 
   Ac = Ac + 1 
   Waitms 1000 
Loop 
End 

Zf_out: 
   Gs = Len(zf)                                             '求字符"Zf"的个数 
   For I = 1 To Gs 
      Zf1 = Mid(zf , I , 1)                                 '返回某一个字符 
      A0 = Asc(zf1)                                         '把字符转变为国标GB标准代码 
      Gosub Data_out 
   Next 
Return 


Data_out:                                                   '判断输入的是指令还是数据,并且把它发送给LCD 
   If Rs = 1 Then A1 = &B11111010 Else A1 = &B11111000 
   Spiout A1 , 1 
   A1 = A0 And &B11110000 
   Spiout A1 , 1 
   A1 = A0 And &B00001111 
   A1 = A1 * 16 
   Spiout A1 , 1 
Return 
 

-----此内容被panxiaoyi于2006-03-08,19:53:15编辑过 
 
__________________________
AVR单片机DIY网  www.avrdiy.com  
2006-03-08,19:49:46   资料  邮件            编辑  删除    
 
【1楼】 panxiaoyi 啊艺

积分:599
派别:
等级:------
来自:广州市 白云区
 移植到89S51,只改动了一点点就可以了 

$regfile = "89c51.dat" 
$crystal = 12000000 

Dim Zf As String * 16 
Dim Zf1 As String * 1 
Dim A0 As Word 
Dim A1 As Byte 
Dim Gs As Byte 
Dim Rs As Bit 
Dim I As Byte 
Dim Ac As Byte 
Ac = 0 

Config Spi = Soft , Dout = P1.2 , Clk = P1.1                  '模拟SPI协议 
Spiinit 
Waitms 100 

Do 
'-------------------RS=0 就是写指令,下面是指示LCD初始化------------------------- 
   Rs = 0 
   A0 = &B00110000 : Gosub Data_out : Waitms 10 
   A0 = &B00001100 : Gosub Data_out : Waitms 10 
   A0 = &B00000001 : Gosub Data_out : Waitms 10 
   A0 = &B00000110 : Gosub Data_out : Waitms 10 

'---------------------------RS=1写数据,RS=0写指令------------------------------- 
   Rs = 0 : A0 = &H80 : Gosub Data_out                      '光标复位 
   Rs = 1 : Zf = " AVR单片机DIY" : Gosub Zf_out             '显示字符 
   Rs = 0 : A0 = &H90 : Gosub Data_out                      '光标定位到第二行 
   Rs = 1 : Zf = Str(ac) : Gosub Zf_out                     '显示变量AC 
   Ac = Ac + 1 
   Waitms 1000 
Loop 
End 

Zf_out: 
   Gs = Len(zf)                                             '求字符"Zf"的个数 
   For I = 1 To Gs 
      Zf1 = Mid(zf , I , 1)                                 '返回某一个字符 
      A0 = Asc(zf1)                                         '把字符转变为国标GB标准代码 
      Gosub Data_out 
   Next 
Return 


Data_out:                                                   '判断输入的是指令还是数据,并且把它发送给LCD 
   If Rs = 1 Then A1 = &B11111010 Else A1 = &B11111000 
   Spiout A1 , 1 
   A1 = A0 And &B11110000 
   Spiout A1 , 1 
   A1 = A0 And &B00001111 
   A1 = A1 * 16 
   Spiout A1 , 1 
Return 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -