AVR-2313单片机应用(2005)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A VR-2313单片微机应用(2005版)
一、AT90S2313—10 简介:
20脚封装,(8位B口、7位D口、2个振荡引脚、2个电源脚、1个重新启动)
B口和D口15位均可用软件单独定义为输入或输出,作为输入时每个脚内部有上拉电阻,可用软件定义接通,即输入电平为1,当外部短路到地时输入电平为0。
当作为输出时,灌入电流为20m A,流出电流较小,约几个mA。
振荡脚可外接频率最高为10MHZ的晶振,作为工作时钟。
A VR90系列单片微机大多数指令只需1个时钟周期即可完成。
工作电压为4.0—6.0V
2K字节的在线可编程Flash存储器。
(1000次以上寿命)
二、BASCOM—AVR 软件的安装与使用:
该软件用BASIC高级程序设计语言编写程序,经自动编译后,可直接下载到A VR单片微机中运行。
软件免费试用版可到或/BA1FB/下载。
试用版软件可安装程序最长为2K字节。
适合A T90S2313的2K字节存储器。
安装的PC电脑使用WINDOS98以上系统。
双击运行SETUP.EXE安装程序,一路点击NEXT或YES完成安装。
编程前须设置以下系统参数:(使用KJ—2313实验器时)
在Option->Compiler->Chip下打开各选项,选定芯片(90S2313),工作频率8000000HZ,LCD显示屏为16X2模式。
在Programmer窗口中选择Sample Electronics programmer(采用内部的程序下载器)。
OK退出。
BASCOM变量的类型及数值范围:
位(Bit)0、1
字节(Byte)0—255
整型(Integer)-32768—32767
字(Word)0—65535
长型(Long)-2147483648—2147483647
字符串(String)
三、KJ—2313单片微机实验器介绍:
本实验器采用模块结构,由若干插件组合而成。
也可自行设计插件,扩展功能。
1、主板:
用AT90S2313-10芯片,8MHZ晶振,5V稳压(外接7—9V整流电源),有下载插座,用专用下载线和BASCOM-A VR软件从PC电脑打印口下载程序至芯片,不需要开发器。
B口用12脚排插引出,D口用9脚排插引出,右边开始第一脚接地,第二脚+5V电源,第三脚开始为各个口,因此插件时必须从插座右边第一脚开始插,左边可空出。
B口最左的两个脚从D口引入,用于动态LED数码显示作位选。
最下面为16 X 2液晶屏(LCD)专用的2个6脚插座,中间空四个脚的位置,因实际使用时有四根数据线未用(见图)。
2、发光二极管(LED)插件:
分二排共16个发光二极管作显示。
上排1电平点亮,下排0电平点亮,用短接插进行切换。
本插件B口、D口均可使用,但插在D口时最左边1位不亮(D口只有7位)。
插件共有10脚,右起第一脚接地,第二脚电源,其余为口线。
3、声音插件:
声音输入为B.0或D.6口。
经电路放大后,用蜂鸣器发声。
并有三个按钮可供选曲。
插件共有6脚,右起第一脚接地,第二脚电源,第三脚为声音输入,其余为按钮输出。
4、LED数码显示插件:采用共阴两位8段数码管。
插在B口时可动态显示两位数码。
插脚从左到右依次为十位、个位、小数点、a、b、c、d、e、f、g段、电源、地。
动态使用个位或十位选中时该脚应为0电平,这时该位点亮。
静态使用时这二脚悬空,并用短路块将插件上方中间的插脚与左右插脚之一短路,只有该方向的一位能显示数码。
5、字符型液晶显示屏(LCD)插件:
16A2字符型液晶显示屏是一种符合通用标准的液晶显示屏。
可显示二行,每行16个字符。
其内部有专门的CPU(HD44780U或兼用CPU)和指令系统。
内建有192个字的字符库,并可由用户自造8个自定义字符(5x8点阵)。
BASCOM-A VR含有与其通讯的专用命令语句,可以很方便地作为字符显示器件应用。
16A2显示屏与外部数据通讯以及电源与调整功能由16个引脚进行,详见下表。
本插件应插入主板最下方的专用插座(2个6芯插座,中间空四个脚位置)。
例一:移动发光(使用发光二极管插件)
根据硬件短路插的设定,发光二极管在1电平或0电平发光,每隔0.5秒左移一位。
Config Portb = Output 设置B端口为输出
Dim A As Byte 定义变量值的数值范围(0—255)
A = &B00010001 赋值(前缀二进制&B,十六进制&H,十进制无)
Do 循环体开始
Portb = A B端口输出A值
Waitms 500 等待500毫秒
Rotate A , Left , 1 左移一位
Loop 循环体结束。
运行时在DO—LOOP之间不断循环。
End 程序结束
例二:0—9随机数显示(使用数码管插件、静态显示要用短路插)
Config Portd = Output D口作为输出口(只有7位,没有小数点)
Dim X As Byte
Dim D As Byte
Do
X = Rnd(10) 设定最大随机数为9(不包括10)
If X = 0 Then D = &B00111111 数码管显示用的译码,从右到左为A—G,1电平点亮If X = 1 Then D = &B00000110
If X = 2 Then D = &B01011011
If X = 3 Then D = &B01001111
If X = 4 Then D = &B01100110
If X = 5 Then D = &B01101101
If X = 6 Then D = &B01111101
If X = 7 Then D = &B00000111
If X = 8 Then D = &B01111111
If X = 9 Then D = &B01100111
Portd = D
Wait 1 延时1秒
Loop
End
例三:倒计数显示(使用数码管插件、静态显示要用短路插)
Config Portb = Output 选用B口作输出口
Config portd = Input B口静态显示,须使D0、D1位选失效
Dim Y As Byte
Dim B As Byte
Y = 11
Do
If Y = 0 Then Y = 11 计数到0时从11重新计数
Y = Y - 1
Select Case Y 选择Y的变量值
Case 0 : B = 126 译码用十进制表示,相当于二进制01111110,从右到左G—A Case 1 : B = 48 译码用十进制表示,相当于二进制00110000
Case 2 : B = 109 译码用十进制表示,相当于二进制01101101
Case 3 : B = 121 译码用十进制表示,相当于二进制01111001
Case 4 : B = 51 译码用十进制表示,相当于二进制00110011
Case 5 : B = 91 译码用十进制表示,相当于二进制01011011
Case 6 : B = 95 译码用十进制表示,相当于二进制01011111
Case 7 : B = 112 译码用十进制表示,相当于二进制01110000
Case 8 : B = 127 译码用十进制表示,相当于二进制01111111
Case 9 : B = 115 译码用十进制表示,相当于二进制01110011
Case 10 : B = 128 等于10时,点亮小数点,相当于二进制10000000
End Select 结束选择
Portb = B 显示变量B的数码
Waitms 1000
Loop
End
例四:0—99计数(数码管动态显示,不要用短路插)
Config Portb = Output B口输出(按主板图接好跨线)Config Pind.1 = Output : Config Pind.0 = Output 设置位选输出脚,d .1十位,d .0个位Dim A As Byte : Dim B As Byte
Dim S As Byte : Dim G As Byte
Dim Y As Byte
A = 0
Portd.1 = 1 : Portd.0 = 1 关闭位选,两位数码管均不亮
Do
S = A / 10 除以10,计算十位数的位值,小数部分被自动省略
B = S * 10 乘以10,计算十位数的值
G = A – B 计算个位数的位值
For Y = 0 To 49 设定循环次数,显示50次
If S = 0 Then Portb =126 二进制为&B01111110
If S = 1 Then Portb =48 二进制为&B00110000
If S = 2 Then Portb = 109 二进制为&B01101101
If S = 3 Then Portb =121 二进制为&B01111001
If S = 4 Then Portb = 51 二进制为&B00110011
If S = 5 Then Portb =91 二进制为&B01011011
If S = 6 Then Portb =95 二进制为&B01011111
If S = 7 Then Portb=112 二进制为&B01110000
If S = 8 Then Portb =127 二进制为&B01111111
If S = 9 Then Portb =115 二进制为&B01110011
Portd.1 = 0 十位点亮
Waitms 10
Portd.1 = 1 十位熄灭
If G = 0 Then Portb = &B01111110
If G = 1 Then Portb = &B00110000
If G = 2 Then Portb = &B01101101
If G = 3 Then Portb = &B01111001
If G = 4 Then Portb = &B00110011
If G = 5 Then Portb = &B01011011
If G = 6 Then Portb = &B01011111
If G = 7 Then Portb = &B01110000
If G = 8 Then Portb = &B01111111
If G = 9 Then Portb = &B01110011
Portd.0 = 0 个位点亮
Waitms 10
Portd.0 = 1 个位熄灭
Next FOR 50次点亮循环出口
A = A + 1 A变量加1计数
If A > 99 Then Exit Do 计数到99停止
Loop
End
例五:音阶(注意相同时值,不同音的数值差异)
Config pind.6 = Output 定义D.6为输出,接声音插件的放大器输入
Sound Portd.6 ,500 , 2000 前、后两数的乘积决定音的时值(长短)
Sound Portd.6 ,560 , 1780 后数决定音的高低,数值大频率低
Sound Portd.6 ,630 , 1590 本例的8个音为1 2 3 4 5 6 7 i 时值相同。
Sound Portd.6 ,670 , 1500
Sound Portd.6 ,750 , 1335
Sound Portd.6 ,840 , 1190
Sound Portd.6 ,945 , 1060
Sound Portd.6 ,1000 , 1000
End
结论:1、相同时值,前后两数的乘积相等。
前数影响时值,但时值还与后数有关。
2、后数半音之间数值为1.0595倍,全音之间为二个1.0595倍(1.1225倍)。
3、8度音正好为2倍关系。
(12个1. 0595相乘等于2)
例六:音阶与乐曲
Config pind.6 = Output D.6为输出,接声音插件的放大器输入
Dim S As Byte , F As Byte , A As Word , B As Word , C As Word
Restore Music 该命令可使数据均放在程序末尾
Do
Read S 读数据
Read F 读数据
If S = 0 Then Exit Do S数据为0时结束
A = 8000 / F 通过运算得到各音的单位长度,改变被除数可调整快慢
B = A * S 运算各音的实际长度
C = F * 5 运算各音的音高,改变乘数可变调(该运算使数据小,少占内存)Sound Portd.6 , B , C
Waitms 10
Loop
End
Music: 数据放置开始位置
Data 8 , 214 , 8 , 190 ,8 , 170 , 8 , 160 , 8 , 143 , 8 , 127 , 8 , 113 , 8 , 107 上行音阶
Data 8 , 107, 8 , 113 , 8 , 127 , 8 , 143 , 8 , 160 , 8 , 170 , 8 , 190 , 8 , 214 下行音阶
Data 16 , 252 , 8 , 189 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 150 , 8 , 189 歌曲开始
Data 12 , 168 , 4 , 168 , 8 , 189 , 8 , 224 , 32 , 189
Data 16 , 252 , 8 , 189 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 126 , 8 , 189
Data 12 , 142 , 4 , 150 , 8 , 126 , 4 , 168 , 4 , 150 , 32 , 168 , 0 , 0
例七:选曲,随音乐发光
Config Portb = Output B口为输出口,接发光二极管插件
Config Pind.3 = Input D.3为输入,接声音插件的按钮
Config pind.6 = Output D.6为输出,接声音插件的放大器输入
Portd.3 = 1 D.3口接上拉电阻
Dim S As Byte , F As Byte , A As Word , B As Word , C As Word , P As Byte , E As Byte
Wait 2 等待选曲键入
E = Pind And &B00001000 读D.3口,利用“与”运算屏蔽其它位
If E = 8 Then Restore Music2 D.3口为1选第二曲
If E = 0 Then Restore Music1 D.3口为0选第一曲
Do
Read S : Read F
For B = 0 To S 将S的值作为循环的次数
Select Case F 根据音高值选择不同的数值,点亮不同数量的发光管Case 0 : P = &B00000000
Case Is < 101 : P = &B11111111
Case 101 To 131 : P = &B11111110
Case 132 To 147 : P = &B11111100
Case 148 To 155 : P = &B11111000
Case 156 To 175 : P = &B11110000
Case 176 To 207 : P = &B11100000
Case 208 To 220 : P = &B11000000
Case 221 To 255 : P = &B10000000
End Select 选择内容结束
Portb = P
Waitus 1
If S = 0 Then Exit Do
A = 8000 / F
C = F * 5
Sound Portd.6 , A , C
Next FOR循环出口
Waitms 10
Loop
End
Music1:
Data 16 , 252 , 8 , 189 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 150 , 8 , 189
Data 12 , 168 , 4 , 168 , 8 , 189 , 8 , 224 , 32 , 189
Data 16 , 252 , 8 , 189 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 126 , 8 , 189
Data 12 , 142 , 4 , 150 , 8 , 126 , 4 , 168 , 4 , 150 , 32 , 168 , 0 , 0
Music2:
Data 16 , 254 , 12 , 214 , 4 , 190 , 12 , 160 , 4 , 143 , 4 , 190 , 4 , 160 , 8 , 214
Data 12 , 107 , 4 , 80 , 4 , 95 , 4 , 107 , 4 , 127 , 4 , 107 , 32 , 143
Data 12 , 143 , 4 , 127 , 8 , 170 , 8 , 190 , 12 , 214 , 4 , 190 , 8 , 160 , 8 , 143
Data 8 , 254 , 8 , 160 , 4 , 190 , 4 , 214 , 4 , 190 , 4 , 160 , 32 , 214 , 0 , 0
例八:LCD显示屏应用0—999计数
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5, Db7 = Portd.6 Config Lcdpin = Pin , E = Portd.0 , Rs = Portd.1
Config Lcd = 16 * 2
Dim A As Word
For A = 0 To 999
Cls 清屏幕,光标回到第一行首
Locate 2 , 5 字符定位在第2行第5位开始
Lcd "TO – " ; A ; "#" 字符串用引号,多个字符或变量中间用分号隔开Waitms 200
Next A
End
例九:LCD时钟
Config Lcdpin = Pin , Db4 = Portd.3 , Db5 = Portd.4 , Db6 = Portd.5, Db7 = Portd.6 Config Lcdpin = Pin , E = Portd.0 , Rs = Portd.1
Config Lcd = 16 * 2
Dim S As Byte , M As Byte , H As Byte 定义秒、分、时的变量名
Cls
Cursor Off 光标关闭(不显示)
For H = 0 To 23
Locate 1 , 5
If H < 10 Then Lcd "0"
Lcd H ; ":"
For M = 0 To 59
Locate 1 , 8
If M < 10 Then Lcd "0"
Lcd M ; ":"
For S = 00 To 59
Locate 1 , 11
If S < 10 Then Lcd "0"
Lcd S
Waitms 998 调整延时值可使计时准确
Next S :Next M :Next H
End
例十:LCD显示屏应用:造字、移动显示
Config Lcdpin = Pin , E = Portd.0 , Rs = Portd.1 , Db4 = Portd.3
Config Lcdpin = Pin , Db5 = Portd.4 , Db6 = Portd.5 , Db7 = Portd.6
Config Lcd = 16 * 2
Deflcdchar 0 , 2 , 2 , 3 , 2 , 2 , 2 , 2 , 31 造字命令和字符数据(“上海”二字)Deflcdchar 1 , 2 , 1 , 18 , 1 , 1 , 2 , 2 , 20 可自造字共8个,每个5 X 8 点阵,Deflcdchar 2 , 8 , 31 , 30 , 26 , 31 , 22 , 31 , 2 在工具栏(TOOLS)内有造字工具。
Cls
Do
Locate 1 , 3
Lcd " Hello! LCD AT90S2313 Shanghai " 显示字符串
Lcd Chr(0) ; Chr(1) ; Chr(2) 显示《上海》二字
Shiftlcd Left 左移字符
Waitms 100
Loop
End
补充程序:
碰撞
Config Portb = Output
Dim A As Byte
Dim B As Byte
A = &B00000001
B = &B10000000
Do
Portb = A Or B 利用“或”运算将两数叠加
Waitms 300
Rotate A , Left , 1
Rotate B , Right , 1
Loop
End
打乒乓
Config Portb = Output
Dim A As Byte
Dim B As Byte
A = &B00000001
Do
For B = 1 To 7
Portb = A
Waitms 100
Rotate A , Left , 1
Next B
For B = 1 To 7
Portb = A
Waitms 100
Rotate A , Right , 1
Next B
Loop
End
简谱音显示与选曲(选择演奏三段音乐,并显示1---7七个音符)
Config Portb = Output B口插数码管插件,静态显示要用短路插Config Pind.6 = Output D6口,音乐输出口
Config Pind.0 = Input 使数码管位选失效
Config Pind.1 = Input 使数码管位选失效
Config Pind.3 = Input 接按钮
Config Pind.4 = Input 接按钮
Config Pind.5 = Input 接按钮
Portd.3 = 1 接上拉电阻
Portd.4 = 1 接上拉电阻
Portd.5 = 1 接上拉电阻
Dim S As Byte , F As Byte
Dim A As Word , B As Word , C As Word
Dim P As Byte , E As Byte
Do 演奏完毕回到等待选曲状态
Do
Waitms 200
E = Pind And &B00111000 按钮检测
Loop Until E < 56 按钮未按下为56,<56时有按钮按下,退出循环If E = 48 Then Restore Music1 根据数值确定按下的按钮,选出乐曲
If E = 40 Then Restore Music2
If E = 24 Then Restore Music3
Do
Read S : Read F
Select Case F
Case 0 : P = &B00000000 F=0,不显示
Case 160 : P = &B00110000 根据F值,选择简谱各音的数码显示笔划译码Case 80 : P = &B00110000
Case 143 : P = &B01101101
Case 127 : P = &B01111001
Case 254 : P = &B11111001 低音3,左边最高位为1,小数点亮
Case 113 To 120 : P = &B00110011 显示4,113为#4音数据,120为4音数据Case 240 : P = &B10110011
Case 107 : P = &B01011011
Case 214 : P = &B11011011
Case 95 : P = &B01011111
Case 190 : P = &B11011111
Case 85 : P = &B01110000
Case 170 : P = &B11110000
End Select
Portb = P
Waitms 20
If S = 0 Then Exit Do
A = 8000 / F
B = A * S
C = F * 5
Sound Portd.6 , B , C
Loop
Waitms 200
Loop
End
Music1: 音阶数据
Data 8 , 160 , 8 , 143 , 8 , 127 , 8 , 120 , 8 , 107 , 8 , 95 , 8 , 85 , 8 , 80
Data 8 , 80 , 8 , 85 , 8 , 95 , 8 , 107 , 8 , 120 , 8 , 127 , 8 , 143 , 8 , 160
Data 8 , 160 , 8 , 127 , 8 , 107 , 8 , 80 , 8 , 107 , 8 , 127 , 8 , 160 , 0 , 0
Music2: 《同一首歌》歌谱数据
Data 16 , 214 , 8 , 160 , 8 , 143 , 12 , 127 , 4 , 120 , 8 , 127 , 8 , 160
Data 12 , 143 , 4 , 143 , 8 , 160 , 8 , 190 , 32 , 160
Data 16 , 214 , 8 , 160 , 8 , 143 , 12 , 127 , 4 , 120 , 8 , 107 , 8 , 160
Data 12 , 120 , 4 , 127 , 8 , 107 , 4 , 143 , 4 , 127 , 32 , 143
Data 16 , 127 , 8 , 107 , 8 , 80 , 12 , 85 , 4 , 95 , 16 , 95
Data 8 , 107 , 4 , 107 , 4 , 95 , 8 , 85 , 4 , 95 , 4 , 107 , 32 , 127
Data 12 , 120 , 4 , 120 , 8 , 107 , 8 , 95 , 8 , 107 , 4 , 120 , 4 , 127 , 16 , 143
Data 8 , 170 , 4 , 170 , 4 , 190 , 8 , 214 , 8 , 190 , 32 , 160
Data 16 , 80 , 16 , 95 , 12 , 120 , 4 , 107 , 16 , 95
Data 12 , 85 , 4 , 85 , 8 , 85 , 4 , 95 , 4 , 107 , 32 , 127
Data 16 , 80 , 16 , 95 , 12 , 120 , 4 , 107 , 16 , 95
Data 8 , 143 , 8 , 143 , 8 , 95 , 4 , 120 , 4 , 127 , 32 , 143
Data 16 , 214 , 8 , 160 , 8 , 143 , 12 , 127 , 4 , 120 , 8 , 127 , 8 , 160
Data 12 , 143 , 4 , 143 , 8 , 143 , 4 , 143 , 4 , 160 , 8 , 190 , 24 , 190
Data 16 , 170 , 8 , 170 , 8 , 190 , 8 , 214 , 8 , 95 , 8 , 107 , 4 , 143 , 4 , 143
Data 12 , 120 , 4 , 120 , 8 , 127 , 4 , 127 , 4 , 143 , 32 , 160 , 0 , 0
Music3: 《梁祝》歌谱数据
Data 8 , 107 , 8 , 127 , 8 , 143 , 40 , 160 , 8 , 143 , 8 , 170 , 8 , 190 , 40 , 214
Data 8 , 85 , 8 , 95 , 8 , 85 , 12 , 107 , 4 , 95 , 8 , 113 , 8 , 127
Data 4 , 143 , 4 , 127 , 4 , 120 , 4 , 127 , 12 , 107 , 4 , 127
Data 4 , 143 , 4 , 127 , 4 , 107 , 4 , 143 , 4 , 127 , 4 , 120 , 4 , 127 , 4 , 143
Data 24 , 160 , 4 , 127 , 4 , 107 , 8 , 170 , 8 , 143 , 8 , 190 , 8 , 160 , 32 , 214
Data 16 , 254 , 12 , 214 , 4 , 190 , 12 , 160 , 4 , 143 , 4 , 190 , 4 , 160 , 8 , 214
Data 12 , 107 , 4 , 80 , 4 , 95 , 4 , 107 , 4 , 127 , 4 , 107 , 32 , 143
Data 12 , 143 , 4 , 127 , 8 , 170 , 8 , 190 , 12 , 214 , 4 , 190 , 8 , 160 , 8 , 143
Data 8 , 254 , 8 , 160 , 4 , 190 , 4 , 214 , 4 , 190 , 4 , 160 , 32 , 214
Data 12 , 127 , 4 , 107 , 8 , 170 , 8 , 143 , 4 , 190 , 4 , 160 , 16 , 214 , 4 , 190 , 4 , 214
Data 8 , 254 , 4 , 214 , 4 , 254 , 6 , 214 , 2 , 190 , 4 , 170 , 4 , 143 , 24 , 190 , 4 , 214 , 4 , 190 Data 12 , 160 , 4 , 143 , 8 , 107 , 8 , 127 , 8 , 143 , 4 , 127 , 4 , 143 , 6 , 160 , 2 , 143 , 4 , 190 , 4 , 214 , 16 , 254 , 16 , 160
Data 6 , 190 , 2 , 160 , 4 , 190 , 4 , 214 , 4 , 254 , 4 , 214 , 4 , 190 , 4 , 160 , 24 , 214 , 4 , 127 , 4 , 107
Data 6 , 143 , 2 , 127 , 4 , 143 , 4 , 160 , 8 , 170 , 8 , 190 , 32 , 214 , 0 , 0。