一、MEGA16 简介:
44脚封装,共32个I/O口(A,B,C,D 4个完整的8位口) MEGA16工作电压为4.0—6.0V。工作频率为8MHZ(可以更改)。 16K字节的在线可编程Flash存储器。(1000次擦写寿命)1K字节的片内数据存储器, 外设特点:
两个具有预分频器和比较器功能的8 位定时器/ 计数器
一个具有预分频器、比较功能和捕捉功能的16 位定时器 /计数器 具有振荡器的实时计数器RTC。 四通道PWM。
8路 10 位ADC。8 个单端通道。
AVR单片微机大多数指令只需1个时钟周期即可完成。 二、BASCOM—AVR 软件的安装与使用:
该软件用BASIC高级程序设计语言编写程序,经自动编译后,可直接下载到AVR单片微机中运行。 软件试用版可到www.MCSELEC.com或www.OURAVR.com下载(现为1.11.9.0版)。 试用版软件可安装程序最长为2K或4K字节。
安装的PC电脑使用WINDOS98以上系统。双击运行SETUP.EXE安装程序,一路点击NEXT或YES完成安装。安装完毕后如需汉化,将bascavr.chs文件复制到“Program Files/MCS Electronics/Bascom-avr”文件夹中即可。
编程前须设置以下系统参数:在Option->Compiler->Chip下打开各选项,选定所使用的芯片(MEGA16),工作频率,LCD显示屏为16x2模式等。(也可以在程序中用命令语句设置,见后面例九)
下载方式选择:我们使用南京沁源公司提供的CH341DP.EXE来下载程序,在Programmer窗口中选择External programmer(采用外部的程序下载器),并在other选项卡中选择CH341DP.EXE所在的目录。点OK退出。(见下图)
三、用USB口下载程序:1、启动软件:点击“CH341DP.EXE”,即可启动下载工具软件(见图五)。
图五
1
2、点击“浏览”打开想要下载的HEX文件(见图六)。
3、点击下载进行程序下载: 图六
当看到“下载成功————”等字样时,程序下载就完成了(见图七)。
图七 4、点击“复位”按钮:这时单片实验板应该按照你的程序指令开始运行了。 BASCOM变量的类型及数值范围: 位(Bit) 0、1 字节(Byte) 0—255
整型(Integer) -32768—32767 字(Word) 0—65535
长型(Long) -21474838—21474837 字符串(String)与浮点数(Single) 四、MEGA16单片微机实验器介绍:
本实验器采用模块结构,由若干插件组合而成。也可自行设计插件,扩展功能。 1、 主板:
用MEGA16芯片,8MHz工作频率。有USB下载插座,可使用USB口的5V电源供电,并同时利用USB口下载程序,不需要开发器。
A口和C口都用16脚排插引出,两个扩展口都从右边开始第一脚接VDD,第二脚PGND,第三脚VCC(+5V),第四脚GND,第六脚为RESER,第五脚为空脚并用塑料件将其堵上,为防止学生插错扩展插件,特意设计了这个防错插保护口,只有和扩展插件中的插针缺口对齐时才能插入这两个插槽。(见图)
2
A口第7到第14脚为PORTA.0—A.7,第15脚为PORTB.1,第16脚为PORTB.2。C口第7到第14脚为PORTC.0—C.7,第15脚为PORTB.3,第16脚为PORTB.4。A口与C口引脚的具体排列见主板标注。 2、发光二极管(LED)插件:
分二排共16个发光二极管作显示。上排(红色)1电平点亮,下排(绿色)0电平点亮,用短接插进行切换。本插件A口、C口均可使用。
插件共有16脚,右起第一脚接VDD,第二脚PGND,第三脚VCC(+5V),第四脚GND,第六脚为RESER,第五脚为缺口防错插用,其余为口线(电路图和实物图如下)。
3、声音插件:
声音输入为PORTD.7或PORTB.3口。经电路放大后,用蜂鸣器发声。
4、LED数码显示插件:
采用共阴两位8段数码管。插在A口与C口时均可动态显示两位数码。也可静态显示一位数码。 “a,b,c,d,e,f,g,dp( .)”8个笔划段在口线为1电平时能点亮(需要位选配合)。
动态使用个位位选(PortB.1或
3
PortB.3),十位位选(PortB.2或PortB.4)该口为1电平时,该位点亮。静态使用时只能显示一位数码,应关闭(置0电平)十位或个位位选。否则二位显示相同数码。 LED数码管插件显示的数码与对应的二进制码: PortA或C 数码 笔段 .7 dp(.) 0 0 0 0 0 0 0 0 0 0 .6 g 0 0 1 1 1 1 1 0 1 1 .5 f 1 0 0 0 1 1 1 0 1 1 .4 e 1 0 1 0 0 0 1 0 1 0 .3 d 1 0 1 1 0 1 1 0 1 0 .2 c 1 1 0 1 1 1 1 1 1 1 .1 b 1 1 1 1 1 0 0 1 1 1 .0 a 1 0 1 1 0 1 1 1 1 1 0 1 2 3 4 5 6 7 8 9 5、字符型液晶显示屏(LCD)插件:
16x2字符型液晶显示屏是一种符合通用标准的液晶显示屏。可显示二行,每行16个字符。
其内部有专门的CPU(HD44780U或兼用CPU)和指令系统。内建有192个字的字符库,并可由用户自造8个自定义字符(5x8点阵)。
BASCOM-AVR含有与其通讯的专用命令语句,可以很方便地控制应用字符显示器件。 16x2显示屏与外部数据通讯以及电源与调整功能由16个引脚进行,详见下表。
16x2字符型液晶显示屏组件引脚名称及功能表 引脚号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 符号 Vdd GND E RS 状态 三态 三态 三态 三态 三态 三态 三态 三态 输入 输入 功能 +5V电源输入 电源地 数据线0(可不用) 数据线1(可不用) 数据线2(可不用) 数据线3(可不用) 数据线4 数据线5 数据线6 数据线7 使能信号 数据/指令寄存器选择:数据=1,指令=0 组件引脚功能 空脚 空脚 +5V电源输入 接地 防错插缺口 空脚 PORTA.0或C.0 PORTA.1或C.1 PORTA.2或C.2 PORTA.3或C.3 PORTA.4或C.4 PORTA.5或C.5 PORTA.6或C.6 PORTA.7或C.7 PORTB.1或B.3 PORTB.2或B.4 6、8X8LED点阵
通过PORTA轮流控制点亮8个竖列,PORTC控制每列8个点的亮灭。使8X8共个LED达到显示字符或图案的目的。由于每列是轮流点亮的,每秒钟必须点亮25次(最好60次以上)图象才稳定。 1000mS/25次/8列=5mS,因此每列最长点亮5毫秒时间,最好在2毫秒以内。
4
8x8 LED点阵对应口线
C0 C1 C2 C3 C4 C5 C6 C7 A0 A1 A2 A3 A4 A5 A6 A7 例一、 移动发光(使用发光二极管插件)
PORTC口向左流水灯程序:发光二极管发光,每隔0.5秒依次左移一位 (1)Config Portc = Output C口为输出
(2)Dim A As Byte A变量数值范围(0—255)
(3)A = &B00000001 赋值(&B为二进制数,&H为十六进制数,十进制无) (4)Do 循环开始
(5)PortC = A A变量值从C口输出 (6)Waitms 500 等待500毫秒 (7)Rotate A , Left , 1 左移一位 (8)Loop 循环结束 (9)End 程序结束 例二、 0—9单数显示程序(使用数码管插件)
PORTA口所接的数码管个位依次显示0―9这十个数字。 Config Porta = Output Config Pinb.1 = Output Dim Y As Byte Dim B As Byte Y = 0 Do
If Y = 10 Then Y = 0 选择Y值并改值
Select Case Y 选择Y值,并决定B值 Case 0 : B = &B00111111 Case 1 : B = &B00000110 Case 2 : B = &B01011011 Case 3 : B = &B01001111 Case 4 : B = &B01100110 Case 5 : B = &B01101101 Case 6 : B = &B01111101 Case 7 : B = &B00000111 Case 8 : B = &B01111111 Case 9 : B = &B01100111
End Select 结束选择 Y = Y + 1 Porta = B
Portb.1 = 1 开个位位选(点亮个位)
5
Waitms 1000
Loop End
例三、 随机数单数显示程序(PORTC口数码管随机显示0―9这十个数字)
Config Portc = Output Config Pinb.3 = Output Dim x As Byte Dim B As Byte Do
X = Rnd(10) 设定随机数为10个(0—9) Select Case X
Case 0 : B = &B00111111 利用选择,将数值转换为笔划段码 Case 1 : B = &B00000110 Case 2 : B = &B01011011 Case 3 : B = &B01001111 Case 4 : B = &B01100110 Case 5 : B = &B01101101 Case 6 : B = &B01111101 Case 7 : B = &B00000111 Case 8 : B = &B01111111 Case 9 : B = &B01100111 End Select Portc = B
Portb.3 = 1 Waitms 1000 Loop End
例四、 0-99计数(数码管动态显示) Config Porta = Output Config Pinb.1 = Output Config Pinb.2 = Output
Dim A As Byte : Dim B As Byte Dim S As Byte : Dim G As Byte Dim Y As Byte A = 0
Portb.1 = 0 : Portb.2 = 0 关位选 Do
S = A / 10 计算十位值 B = S * 10
G = A – B 计算个位值 For Y = 0 To 49 循环显示50次 Select Case S
Case 0 : B = &B00111111 Case 1 : B = &B00000110 Case 2 : B = &B01011011 Case 3 : B = &B01001111 Case 4 : B = &B01100110
6
Case 5 : B = &B01101101 Case 6 : B = &B01111101 Case 7 : B = &B00000111 Case 8 : B = &B01111111 Case 9 : B = &B01100111 End Select Porta = B Portb.1 = 0 Portb.2 = 1 Waitms 10 Select Case G
Case 0 : B = &010111111 Case 1 : B = &B00000110 Case 2 : B = &B01011011 Case 3 : B = &B01001111 Case 4 : B = &B01100110 Case 5 : B = &B01101101 Case 6 : B = &B01111101 Case 7 : B = &B00000111 Case 8 : B = &B01111111 Case 9 : B = &B01100111 End Select Porta = B Portb.1 = 1 Portb.2 = 0 Waitms 10 Next A = A + 1
If A > 99 Then Exit Do Loop
Portb.1 = 0 Portb.2 = 0 End
例五、 音阶演奏 (使用蜂鸣器插件。注意相同时值,不同音的数值差异。) Config pind.7 = Output 定义D.7为输出,接声音插件的放大器输入,
Sound Portd.7 ,500 , 2000 前、后两个数值的乘积决定音的时值(发声时间长短)
Sound Portd.7 ,560 , 1780 后数(分频数,相当于除数)还决定音的高低,数值大频率低 Sound Portd.7 ,630 , 1590 本例的8个音为1 2 3 4 5 6 7 i 时值相同。 Sound Portd.7 ,670 , 1500 Sound Portd.7 ,750 , 1335 Sound Portd.7 ,840 , 1190 Sound Portd.7 ,945 , 1060 Sound Portd.7 ,1000 , 1000 End
结论:1、相同时值,前后两数的乘积相等。前数控制时值,但时值还与后数(控制音高)有关。
2、后数半音之间(3-4或7- i之间)为1.0595倍,全音之间为1.1225倍(二个1.0595倍)。 3、8度音(例1- i)正好为2倍关系。(12个1. 0595相乘等于2)
7
例六、 音阶与乐曲
Config pind.7 = Output D.7为输出,接声音插件的放大器输入 Dim S As Byte , F As Byte , A As Word , B As Word , C As Word Restore Music 该命令可使数据集中放在程序末尾 Do
Read S 读数据(时值。4为半拍,8为一拍,16为二拍,32为四拍) Read F 读数据(分频数) If S = 0 Then Exit Do S数据为0时结束
A = 8000 / F 通过运算得到各音的单位长度,改变被除数可调整快慢 B = A * S 计算各音的实际长度
C = F * 5 计算各音的音高,改变乘数可变调(该运算使数据小于255,少占内存) Sound Portd.7 , B , C Waitms 10 Loop End
Music: 数据放置开始位置
Data 8 , 214 , 8 , 190 ,8 , 170 , 8 , 160 , 8 , 143 , 8 , 127 , 8 , 113 , 8 , 107 上行音阶(1,2,3,4,5,6,7,i) Data 8 , 107, 8 , 113 , 8 , 127 , 8 , 143 , 8 , 160 , 8 , 170 , 8 , 190 , 8 , 214 下行音阶 (I,7,6,5,4,3,2,1) Data 16 , 252 , 8 , 1 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 150 , 8 , 1 歌曲开始 (同一首歌) Data 12 , 168 , 4 , 168 , 8 , 1 , 8 , 224 , 32 , 1
Data 16 , 252 , 8 , 1 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 126 , 8 , 1 Data 12 , 142 , 4 , 150 , 8 , 126 , 4 , 168 , 4 , 150 , 32 , 168 , 0 , 0
附:参考分频数(表内值是中音。下面加点的低音需乘以2。上面加点的高音需除以2。) 分频数 127 音阶1 音阶2 音阶3 音阶4 1 3 5 6 120 4 113 2 6 7 107 5 1 101 3 7 95 4 6 1 2 90 85 5 7 2 3 80 1 4 75 6 3 71 2 4 5 67 7 例七、 音乐选曲程序:
Config Pina.7 = Input A口装按钮板(A.7口的按钮有效) Config Pind.7 = Output 装蜂鸣器板
Porta.7 = 1 接上拉电阻(插件如有上拉电阻,可删除此句) Dim S As Byte , F As Byte , P As Byte , E As Byte Dim B As Word , C As Word , A As Word Wait 2
E = Pina And &B10000000
If E = 128 Then Restore Music2 If E = 0 Then Restore Music1 Do
Read S : Read F
If S = 0 Then Exit Do A = 8000 / F B = A * S C = F * 5
Sound Portd.7 , B , C Waitms 10 Loop
8
End Music1:
Data 16 , 252 , 8 , 1 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 150 , 8 , 1 Data 12 , 168 , 4 , 168 , 8 , 1 , 8 , 224 , 32 , 1
Data 16 , 252 , 8 , 1 , 8 , 168 , 12 , 150 , 4 , 142 , 8 , 126 , 8 , 1
Data 12 , 142 , 4 , 150 , 8 , 126 , 4 , 168 , 4 , 150 , 32 , 168 , 0 , 0 (同一首歌) Music2:
Data 16 , 2 , 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 , 2 , 8 , 160 , 4 , 190 , 4 , 214 , 4 , 190 , 4 , 160 , 32 , 214 , 0 , 0 (梁祝) 例八、 LCD显示屏应用 0—999计数 (使用A口,4Pin)
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 使用4Pin进行数据通讯 Config Lcdpin = Pin , E = Portb.1 , Rs = Portb.2 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显示屏应用 仿时钟程序 (使用C口,8Pin)
$regfile = \"m16def.dat\" 使用MEGA16 芯片 $crystal = 8000000 工作频率为8MHZ
Config Lcdpin = Pin , Port = Portc, E = Portb.3, Rs = Portb.4 使用8Pin进行数据通讯 Config Lcd = 16 * 2 使用16x2Lcd显示屏 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 = 0 To 59 Locate 1 , 11
If S < 10 Then Lcd \"0\" Lcd S
Waitms 998
Next S : Next M : Next H End
例十、 LCD显示屏应用 (造字、移动显示)
9
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 Config Lcdpin = Pin , E = Portb.1 , Rs = Portb.2 Config Lcd = 16 * 2
Deflcdchar 0,4,4,31,4,14,21,4,4 自造字数据,(该数据可利用工具栏的造字工具算出) Deflcdchar 1 ,4 , 10 , 17 , 4 , 8 , 18 , 30 , 1 Deflcdchar 2 ,32 , 4 , 2 , 32 , 6 , 32 , 6 , 32 Deflcdchar 3,32 , 32 , 31 , 4 , 4 , 4 , 31 , 32 Deflcdchar 4 ,32 , 32 , 14 , 32 , 32 , 31 , 32 , 32 Deflcdchar 5 ,4 , 4 , 31 , 21 , 21 , 31 , 4 , 4 Cls Do
Locate 1 , 3
Lcd \" Hello! Shanghai HUISHUO--CQW \"
Lcd Chr(0) ; Chr(1) ; Chr(2) ; Chr(3) ; Chr(4) ; Chr(5) 显示自造字符 Shiftlcd Left 左移字符 Waitms 1000 Loop End
例十一、 8x8 LED点阵应用 (显示“回”字程序) Config Porta = Output Config Portc = Output Do
Portc = &B11111111 Porta = &B00000001 Waitms 1
Portc = &B10000001 Porta = &B00000010 Waitms 1
Portc = &B10111101 Porta = &B00000100 Waitms 1
Portc = &B10100101 Porta = &B00001000 Waitms 1
Portc = &B10100101 Porta = &B00010000 Waitms 1
Portc = &B10111101 Porta = &B00100000 Waitms 1
Portc = &B10000001 Porta = &B01000000 Waitms 1
Portc = &B11111111 Porta = &B10000000 Waitms 1 Loop
10
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- ryyc.cn 版权所有 湘ICP备2023022495号-3
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务