嵌入式实验二_实验嵌入式二
嵌入式实验二由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“实验嵌入式二”。
1.实验二:利用中断实现 OLED 动态显示实验
1.1 实验名称
1.2 实验目的(1)深入学习、理解、掌握 OLED 字符显示方法
(2)深入学习、理解、掌握 OLED 图形显示方法(3)学习、理解、掌握中断使用方法
1.3 实验过程与分析
1.3.1 回答实验报告中的实验问题
(1)ISR是什么?简述一下中断的作用和使用方法
答:ISR是中断服务程序。作用是通过处理器执行事先编好的某个特定的程序。使用方法就是在main中写一个中断程序,然后在startup.s中进行注册。
(2)嵌入式系统中有哪些应用有定时性循环处理的要求?举几个例子
答:在各种网络的应用中,设计的一些部件,如计数器,时钟等。
(3)定时时间间隔如何修改?
(4)选作内容5-8的编程思路是什么?若做的话应该怎样实现? 答:编程思路:先画直线和竖线,组成一个正方形,将各个参数填写到函数答:通过改变SysTickPeriodSet(SysCtlClockGet()/100)后面的100这个参数。
RIT128x96x4ImageDraw(buf,,);
第6个选作:判断画的原点x,原点y,和画原点x+的长,画原点y+画宽的值要在0-128和0-96。
第7个选作:把RIT128x96x4StringDraw(“hello”,,);就是把画的灰度定义为一个变量x。最后就会出现由不同的亮度而形成的波浪。
第8个就是利用随机函数产生画的原点,随机的在屏幕上进行显示。
(5)拖影现象如何解决?计数值显示为什么没有拖影? 答:在程序结束后执行清屏语句:计数显示是每次重新赋值,所以不会出现拖影。
1.3.2 实验中遇到的问题及解决方法
(1)字符和下方横线,从左至右移动,无法同时到达
通过最大宽度128除以阀值,调整了字符和横线的速度,解决(2)附加字符循环移动,移动到一半,不见了
查看函数排错,得以解决
(3)基本问题做完时,字符显示完整,添加附加任务后,字符显示不全
未解决...1.4实验结果总结 实验结果(附照片)
总结(自己的收获)1.5心得体会
#include #include #include “rit128x96x4.h” int Event = 0;unsigned char buf1[] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };unsigned char buf2[] = {
0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00 };unsigned char buf3[] = {
0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf4[] = {
0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf5[] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff };unsigned char buf6[] = {
0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff };unsigned char buf7[] = {
0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff };unsigned char buf8[] = {
0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff };
unsigned char r1[] = {
0xff, 0xff };unsigned char r2[] = {
0xf0, 0x0f };unsigned char r3[] = {
0xf0, 0x0f };unsigned char r4[] = {
0xff, 0xff };
unsigned char c1[] = {
0x0f, 0xf0 };unsigned char c2[] = {
0xf0, 0x0f };unsigned char c3[] = {
0xf0, 0x0f };unsigned char c4[] = {
0x0f, 0xf0 };void SysTick_Handler(void){ Event = 1;} void printX(){ }
int main(){
int count = 0,i,Light=0,x=0,z=0,y=0,zz=0,yy=0,c=0,cc=0,a=0,aa=0;unsigned char buf[5];
//存(数字)字符串
unsigned char name[20] = “”;unsigned char number[20] = “”;SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN SYSCTL_XTAL_8MHZ);RIT128x96x4Init(1000000);RIT128x96x4Clear();
串
SysTickPeriodSet(SysCtlClockGet()/ 10);
//调频率
SysTickEnable();SysTickIntEnable();while(1){
if(Event){
RIT128x96x4Clear();
Event = 0;
sprintf(buf,“%3i”,count);
//通过sprintf将数字转换为字符
| if(Light >= 15)
{
Light=0;
} else {
Light++;} RIT128x96x4StringDraw(name, 50, 55, 15-Light);RIT128x96x4StringDraw(number, 50, 65, Light);sprintf(buf,“%d”,count);;RIT128x96x4StringDraw(buf, 50, 75, 12);
count++;if(count>=200){
count=0;} RIT128x96x4ImageDraw(buf2,(int)(x*0.50), 5, 20, 1);RIT128x96x4ImageDraw(buf3,(int)(x*0.50), 7, 20, 1);RIT128x96x4ImageDraw(buf4,(int)(x*0.50), 9, 20, 1);RIT128x96x4ImageDraw(buf5,(int)(x*0.50), 11,20, 1);RIT128x96x4ImageDraw(buf6,(int)(x*0.50), 13, 20, 1);RIT128x96x4ImageDraw(buf7,(int)(x*0.50), 15, 20, 1);RIT128x96x4ImageDraw(buf8,(int)(x*0.50), 17, 20, 1);RIT128x96x4ImageDraw(buf1, 0, 20,(int)(x*0.60), 1);RIT128x96x4ImageDraw(c1,(int)(60+c*1.20),(int)(5+a*0.85), 4, 1);RIT128x96x4ImageDraw(c2,(int)(60+c*1.20),(int)(7+a*0.85), 4, 1);RIT128x96x4ImageDraw(c3,(int)(60+c*1.20),(int)(9+a*0.85), 4, 1);RIT128x96x4ImageDraw(c4,(int)(60+c*1.20),(int)(11+a*0.85), 4, 1);RIT128x96x4ImageDraw(r1,(int)(z*0.30),(int)(50+y*0.20), 4, 1);RIT128x96x4ImageDraw(r2,(int)(z*0.30),(int)(52+y*0.20), 4, 1);RIT128x96x4ImageDraw(r3,(int)(z*0.30),(int)(54+y*0.20), 4, 1);RIT128x96x4ImageDraw(r4,(int)(z*0.30),(int)(56+y*0.20), 4, 1);if(x=0)
//直线 {
x++;} if(x>=200){
x=0;} if(c=-50)
//圆形循环 {
if(cc==0)c++;
if(cc==1)c--;} if(c>=50){
cc=1;} if(c
cc=0;} if(a=0){
if(aa==0)a++;
if(aa==1)a--;} if(a>=100){
aa=1;} if(x
aa=0;} if(y=0){
if(yy==0)y++;
if(yy==1)y--;} if(y>=200){
yy=1;} if(y
yy=0;} if(z=0){
if(zz==0)z++;
if(zz==1)z--;} if(z>=400){
zz=1;} if(z
//矩形反弹
}
zz=0;
} } } return 0;