试验一:基本I/O口功能设计

硬件资源:ATmega8开发板,LED灯,按键,步进电机。

要实现功能:1,跑马灯;2,按键控制跑马灯(按一次亮灯走一位);3,驱动步进电机

程序设计:1,初始化引脚,用TIME0计数器设计延时程序

     //IO端口初始化
void port_init()
{
  DDRD = 0xFF; //PORTD引脚设置为输出(LED灯) //也可用 DDRD = (1<<PD3)|(1<<PD4); 来置位引脚
DDRC = 0xFE; //PORTC0引脚设置为输入(按键),其他为输出
DDRB = 0xFF; //PORTB引脚设置为输出(驱动电机)
PORTC = 0xFF;// PORTC引脚上拉电阻使能
}


//延时函数 T/C0来计数
void delay_us(int us)  // ~和!是不一样的,判断时用“!”,取反时用“~ ”
{
  TCCR0 = 0;//关定时器
TIFR |= 1;//TOV0置位;
TCCR0 = 0x02; //16MHz时钟,8分频
TCNT0 = 255 - 2*us;
while(!(TIFR)){;}
TIFR |= 1;
}
void delay_ms(int ms)
{
  char j;
while(ms--){
for(j=0;j<10;j++){
delay_us(100);
}
}
}


  2,//跑马灯程序
void led()
{
  uchar i=0;
for(i;i<8;i++){
PORTD = ~(0x01<<i);  
delay_ms(2000);
}
}

 3,//按键扫描函数
uchar key_scan()
{
  uchar a,i;
i=1;
a = PINC; //不能直接用PINC0
if(a&0x01){     //没按下
 return 0;
}else{   //按下
 return 1;
}  
}
//按键功能函数
char val;    // 必须是全局变量!!!!!
void key_led()
{
uchar key;
key = key_scan();
if(key){          //按下,
delay_ms(1);  //消抖延时
if(val==7){val=0;}
    else {val+=1;}
}else{
  val=val;
}
//delay_ms(10);
PORTD = ~(0x01<<val);
}

 4,//驱动电机函数
unsigned char CCW[8]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};  //逆时钟旋转相序表
unsigned char CW[8]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08};   //正时钟旋转相序表
void StepMotor(uchar dir,int speed)
{
  uchar i;
if(dir){
for(i=0;i<8;i++){
PORTB = CW[i];      //正转
delay_ms(speed); //延时(速度)
}
}else{
    for(i=0;i<8;i++){
PORTB = CCW[i];      //反转
delay_ms(speed);  //延时(速度)
        }
 }
}

5,//主函数
void main()
{
  port_init();
  while(1){
    key_led();
   StepMotor(0,1); //电机正转
   delay_ms(5000);
   StepMotor(1,10);// 电机反转
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片机课程设计 课题名称:单片机简易计算器课程设计 姓名:XXXX 学号:XXXXXX 年级专业班级: XXXXXXX 学院: XXXX 设计时间: XXXXXXX 设计地点: XXXXXX 指导老师:姜晟 目录 一、单片机课程设计实习目的 1 1、增进对单片机的感性认识,加深对单片机理论方面的理解; 1 2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O等 ; 1 3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。 1 二、实习课题任务 1 1、课题:简易计算器的设计 1 2、设计基本要求: 1 利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。 1 任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。 1 3、功能实现: 1 4、设计任务 1 5、设计思路 2 三、系统分析 4 四、硬件系统设计 4 1、键盘接电路 4 2、数码管显示电路 5 五、软件系统设计 6 六、调试结果 6 1)10以内计算器 6 2)100以内计算器 6 七、结论 7 八、体会与收获 8 九、附件(程序): 8 1、程序一:只能进行两位数与两位数格式的四则运算 8 2、程序二:能进行百位以内的四则运算,但一位与两位数运算结果调试不对 18 一、单片机课程设计实习目的 1、增进对单片机的感性认识,加深对单片机理论方面的理解; 2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O等; 3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。 二、实习课题任务 1、课题:简易计算器的设计 2、设计基本要求: 利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。 任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。 3、功能实现: 计算器将完成的功能有两位数以内加、减、乘、除功能,并通过LED数 码管显示输入值及结果。 4、设计任务 1. 扩展4*4键盘,其中10个数字,5个功能键,1个清零 2 . 使用五位数码管接电路 3. 完成十进制的四则运算(加、减、乘、除); 4. 实现低于三位小于255数字的连续运算; 5. 使用keil C软件编写程序; 6. 最后用ptoteus仿真; 7. 具有较强的抗干扰能力; 8. 体积小、功耗低,便于嵌入其他系统。 2 / 18 5、设计思路 1)、了解键盘、显示电路的编程方法 2)、了解键盘电路工作原理及编程方法 3)、调试键盘扫描显示程序,进一步熟悉键盘工作原理 利用EL-8051- III型单片机实验箱上提供的8279,键盘电路,数码显示电路,组成一个键盘分析电路, 编写程序,要求在键盘上按动一个键,就将8279对此键扫描的扫描码显示在数码管上。 4)、设计总体流程图,分模块编写程序 N N N 5)键盘扫描流程图: 三、系统分析 按照系统设计的功能的要求,初步确定设计系统由主控模块、显示模块、键扫描接 电路共三个模块组成,电路系统构成框图如图1.1所示。主控芯片使用89S51/52单片机, 比 80C51速度更快,功能更强,由先进工艺制造,并带有非易失性Flash程序存储器。它是 一种高性能、低功耗的8位COMS微处理芯片,市场应用最多。 键盘电路采用4*4矩阵键盘电路。 显示模块采用4枚共阳极数码管和74ls273锁存芯片构成等器件构成。 四、硬件系统设计 单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路 和晶振电路。 主控芯片选取74LS164芯片,因其具有良好的性能及稳定性,价格便宜应用方便。 晶振选取11.0592MHz,晶振旁电容选取22pF。 采用按键复位电路,电阻分别选取560Ω和10K,电容选取10μF。 1、键盘接电路 计算器所需按键有: 数字键:"0""1""2""3""4""5""6""7""8""9" 功能键:"A(+)""B(—)""C(*)""D(/)""E(=)" 键盘共计15个按键,其中15个按键采用到,采用4*4矩阵键盘,键盘的行和列之间都 有公共端相连,四行和四列的8个公共端分别接P1.0~P1.7,这样扫描P1就可以完成对 矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的地址,对比P1的扫描 结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘扫描的功能。 2、数码管显示电路 采用6位数码管对计算数据和结果的显示,这里选取共阳数码管,利用NPN三极管对数码 管进行驱动,为了节省I/O资源,采取动态显示的方法来显示计算数据及结果,动态扫描 。 为了实现数码管的动态显示,P2输出显示值,通过P2的二进制代码送到数码管进行 显示。 P3.0~P3.5用来作为位选端,控制哪几位数码管进行显示。比如当P3.2为高电平时, 其他位全给

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值