📄 avrstudy._c
字号:
#include <iom8v.h>
#include <macros.h>
#include <stdio.h>
#include "st7920iccavrmega8.c"
#include "ds1302.c"
#include "delay.h"
#include "mega8_spi.c"
#include "24cxx12864.c"
#include "ad.c"
#include "stepmotor.c"
#include "串口测试.c"
#pragma interrupt_handler Int0:2 //外部中断0中断函数声明
#pragma interrupt_handler Int1:3 //外部中断1中断函数声明
unsigned char str1[]="AVR 单片机开发板";
unsigned char str2[]="设计制作:张国旗";
unsigned char str3[]="→SPI 功能测试 2.I2C 功能测试 3.AD功能测试 4.步进电机测试 ";
unsigned char str4[]="1.SPI 功能测试 →I2C 功能测试 3.AD功能测试 4.步进电机测试 ";
unsigned char str5[]="1.SPI 功能测试 2.I2C 功能测试 →AD功能测试 4.步进电机测试 ";
unsigned char str6[]="1.SPI 功能测试 2.I2C 功能测试 3.AD功能测试 →步进电机测试 ";
unsigned char str7[]="2.I2C 功能测试 3.AD功能测试 4.步进电机测试 →串口通讯测试 ";
unsigned char str8[]="3.AD功能测试 4.步进电机测试 5.串口通讯测试 →44键盘功能测试";
unsigned char str9[]="4.步进电机测试 5.串口通讯测试 6.44键盘功能测试→返回 ";
unsigned char str10[]="SPI 功能实验中…";
unsigned char str11[]="步进电机实验中…";
unsigned char str12[]=" 串口实验中… ";
unsigned char str13[]=" 44键盘使用中…";
uchar exit1=0,exit2=0,number1=1,enter1=0;
//unsigned char bmp1[];//先声明一下就可以把表放在函数后面啦,呵呵
//=========================
// 毫秒延时函数8M晶振
//=========================
void delay(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
{
for(j=0;j<1141;j++)
{if(exit1==1){j=1141;i=ms;}}
}
}
void Int0(void)
{
SREG&=0x7F;//打开全局中断
delay(100);
exit1=1;
enter1=1;
SREG|=0x80;//打开全局中断
}
void Int1(void)
{
SREG&=0x7F;//打开全局中断
delay(100);
if(number1<7){number1++;}
else{number1=1;}
SREG|=0x80;//打开全局中断
}
void Init_int()
{
MCUCR =0x00; //设置INT0、INT1为下降沿触发中断
DDRD&=~BIT(PD2); //配置中断管脚为输入
PORTD|=BIT(PD2); //使能中断管脚的上拉
DDRD&=~BIT(PD2); //配置键盘数据输入口为输入
DDRD&=~BIT(PD3); //配置键盘数据输入口为输入
PORTD|=BIT(PD2)|BIT(PD3); //使能数据输入管脚的上拉
SREG|=0x80;//打开全局中断
GICR|=BIT(INT0)|BIT(INT1);//中断使能
}
void main( void )
{
uchar settime[7]={0x50,0x08,0x17,0x12,0x02,0x04,0x09};//设置的秒,分,时,日,月,星期,年
uchar gettime[7]={0x01,0x01,0x01,0x01,0x01,0x01,0x01};//保存当前时间的数组
uint i,data=0;
spi_init();
Init_int(); //中断初始化
LcmInit(); //液晶初始化
Delay(10);
twi_init(); //TWI初始化
PORTB=0xff; //背光口开
LCD_ON; //开液晶背光显示
DS1302_portinit(); //初始化DS1302的三根数据线
//DS1302_init(); //启动振荡器,DS1302开始工作
//DS1302_setT(settime); //设置初始时间
while(1)
{
PutStr(0,0,"DS1302时钟显示");
PutStr(0,0,str1);
Delay(10);
PutStr(3,0,str2);
Delay(10);
while(exit1==0) //以下程序完成显示和设置时间
{
DS1302_getT(gettime); //获得当前时间
Disp_time(gettime); //显示当前时间
delay(100);
}
exit1=0;
exit2=0;
enter1=0;
number1=1;
LcmInit(); //液晶初始化
delay(10);
while(exit2==0)
{
switch(number1)
{
case 1:{PutStr(0,0,str3);}break;
case 2:{PutStr(0,0,str4);}break;
case 3:{PutStr(0,0,str5);}break;
case 4:{PutStr(0,0,str6);}break;
case 5:{PutStr(0,0,str7);}break;
case 6:{PutStr(0,0,str8);}break;
case 7:{PutStr(0,0,str9);}break;
}
delay(100);
if(enter1==1)
{
exit1=0;
LcmInit(); //液晶初始化
delay(10);
while(exit1==0)
{
switch(number1)
{
case 1:
{
PutStr(1,0,str10);
for(i=0;i<256;i++)
{
senddat(i);
delay(100);
}
}break;
case 2:
{
for(i=0;i<7;i++)
{
Put24c256BMP(i*1024);
delay(1000);
if(exit1==1)i=7;
}
LcmInit(); //液晶初始化
delay(10);
}break;
case 3:
{
adchange();
delay(10);
}break;
case 4:
{
delay(10);
PutStr(1,0,str11);
motorstar();
}break;
case 5:
{
delay(10);
PutStr(1,0,str12);
// uart_main();
}break;
case 6:
{
// adchange();
PutStr(1,0,str13);
delay(10);
}break;
case 7:{exit2=1;exit1=1;}break;
}//switch
}//while
exit1=0;
enter1=0;
}
}
exit1=0;
LcmInit(); //液晶初始化
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -