中国中小企业电子产品方案技术服务资讯平台         中软创芯电子 | 发布信息 | 设为首页 | 加入收藏

     

首页   维修专栏   产品中心   技术频道   资讯快递   应用专题   供求信息   开发案例   联系我们
 电子产品方案设计|单片机程序开发|工业控制板订制
站内搜索:
推荐文章
基于NiosⅡ的直流电机PID调速控..
基于ARM的单相电力计量装置现场..
基于单片机C8051F130的远程在线..
基于VB与单片机技术的温度测控..
基于混沌蚁群的神经网络速度辨..
基于CANOPEN协议的智能消防水炮..
CC2430与DS18B20的粮库温度传感..
声传感器网络节点的硬件系统设..
基于Lonworks现场总线的机房监..
基于Windows CE的超市预收款系..
基于单片机及CPLD技术的B超检测..
施耐德QUANTUM PLC在炼钢转炉..
变频器在中央空调和采暖通风空..
嵌入式以太网数字语音广播系统..
基于μC/OS-Ⅱ的线控转向Fle..

 首页 >> 技术频道 >> 单片机技术
单片机按键扫描数码管显示C语言程序
设备技术网   时间:2010-4-7

/*******************************************************************************
 *函数原型: void timer0_ovf_isr(void);
 *功能:定时器0中断服务程序
 *参数:
 *说明:键盘和led一起构成1/6扫描,每6次中断进行一次键盘处理
 *******************************************************************************/
#pragma interrupt_handler timer0_ovf_isr:10
void timer0_ovf_isr(void)
{

  TCNT0 = 0xAA; //set count
  if (state <= 5)
  {
    lflash();
    display(state);
    state++;

  }
  else
  {
    key();
    state = 0;
  }
}

void USART0_Init(void)
{
 UCSRB = 0x00; //disable while setting baud rate
 UCSRA = 0x00;
 UCSRC = BIT(URSEL) | 0x06;
 UBRRL = 0x47; //set baud rate lo
 UBRRH = 0x00; //set baud rate hi
 UCSRB = 0x18;
}

//-------------------------------------------------------------------------

void USART0_Transmit(unsigned char data)
{
  while (!(UCSRA &(1 << UDRE)))
    ;
  UDR = data;
}

//-------------------------------------------------------------------------

void USART0_TransmitString(char *data)
{
  while (*data)
    USART0_Transmit(*data++);
}

//-------------------------------------------------------------------------

unsigned char USART0_Receive(void)
{
  while (!(UCSRA &(1 << RXC)))
    ;
  return UDR;
}

/*******************************************************************************
 *函数原型: void port_init(void);
 *功能:端口初始化
 *参数:
 *说明: 
 *******************************************************************************/
void port_init(void) //端口初始化
{
  DDRB = 0xff; //led数据口    11111111
  DDRC = 0xff; //键盘      00111111
  DDRD = 0xfc; //段码选择  11111100

  PORTD = 0xff;
  PORTB = 0xff;
  PORTC = 0xff;
}
/*******************************************************************************
 *函数原型: void init_devices(void);
 *功能:m8初始化
 *参数:
 *说明: 
 *******************************************************************************/
//call this routine to initialize all peripherals
void init_devices(void)
{
  //stop errant interrupts until set up
  CLI(); //disable all interrupts
  port_init();
  timer0_init();
  USART0_Init();
  MCUCR = 0x00;
  GICR = 0x00;
  TIMSK = 0x01; //timer interrupt sources
  SEI(); //re-enable interrupts
  //all peripherals are now initialized
}

/*******************************************************************************
 *函数原型: void main() ;
 *功能:主程序,执行初始化操作,循环等待案件事件 
 *参数:
 *说明:
 *******************************************************************************/
void main()
{
  init_devices();
  //标志和常量初始化
  task = 0x00;       //按键状态
  state = 0x00;      //显示位置变量
  keyprocess = 0;    //按键有效标志
  keydone = 1;       //按键任务完成标志
  ledtime = ledshow; //累计闪烁时已点亮或已熄灭时间
  ledtask = 0;       //当前的闪烁状态 0 代表亮
  keymark = 0;       //指示当前工作状态为正常工作状态
  USART0_TransmitString("OK!\r\n");
  while (1)
  {
    key_processing();
  }
}

 
第1页 第2页 第3页 第4页 第5页
>>上一篇: 单片机设计的定时器程序(含C语言及汇编)
>>下一篇: 印刷及设备器材工业仍面临突出矛盾
打印】 【关闭
【资讯版权声明】
 1. 本站所提供资源均为原文章或程序作者提供和网友推荐收集整理而来,仅供学习和研究使用,不得用于商业用途。
 2. 本站转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
 3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
 4. 部分内容来源于网络,如侵犯您的版权,请通知本站即撤。

关于创芯  维修指引  开发案例  版权声明  友情连接  联系我们 
Copyright©2006-2010 设备技术网 | 中软创芯 版权所有
电话:0755-33122368 传真:0755-83255830 E-mail:szbase@126.com QQ:1092081589
致力于单片机技术应用推广,电子产品方案设计,控制器设计,电路板复制,工控板开发,单片机开发
本站资源仅供学习参考,部分内容来源于网络,如侵犯您的版权,请通知本站即撤
ICP备案序号:粤ICP备10019209号