[Atmel] 用AtmelStudio6.2跑mega16例程(17):电压表

[复制链接]
1129|0
 楼主| ddllxxrr 发表于 2014-9-18 21:29 | 显示全部楼层 |阅读模式
今天是采用TLC548做的电压表:



下图是proteus仿真截图:


以下是Atmel Studio6.2的程序
  1. /*
  2. * GccApplication24.c
  3. *
  4. * Created: 2014-9-18 21:08:34
  5. *  Author: Administrator
  6. */


  7. #include <avr/io.h>
  8. #include <avr/interrupt.h>
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. #define ulong unsigned long
  12. #define SS  4//PORTB.4
  13. #define dv  196             //5V*1000/255
  14. uchar dat_in;
  15. uint  adc_v;
  16. uchar tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,  //共阳极LED  0~F的段码
  17. 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
  18. void  delay(uint k)            //延时约0.1ms
  19. {
  20.         uchar  m,n;
  21.         for(m=0;m<k;m++)
  22.         {
  23.                 for(n=0;n<114;n++);
  24.         }
  25. }
  26. //interrupt [SPI_STC] void spi_isr(void)
  27. ISR(SPI_STC_vect)
  28. {
  29.         dat_in=SPDR;
  30.         PORTB |= 1<<SS;//SS=1;
  31.         adc_v=(ulong)dat_in*dv/10;
  32. }
  33. void display(void)
  34. {
  35.         uchar val1,val2,val3,val4;
  36.         val1=adc_v/1000;
  37.         val2=(adc_v/100)%10;
  38.         val3=(adc_v/10)%10;
  39.         val4=adc_v%10;
  40.         PORTD=0x01;
  41.         PORTC=tab[val1];
  42.         //PORTC.7=0;                            //小数点
  43.         PORTC &= ~(1<<7);
  44.         delay(10);
  45.         PORTD=0x02;
  46.         PORTC=tab[val2];
  47.         delay(10);
  48.         PORTD=0x04;
  49.         PORTC=tab[val3];
  50.         delay(10);
  51.         PORTD=0x08;
  52.         PORTC=tab[val4];
  53.         delay(10);
  54. }
  55. //interrupt [TIM0_COMP] void timer0_isr(void)
  56. ISR(TIMER0_COMP_vect)
  57. {
  58.         PORTB &=~(1<<SS);  //SS=0;                              // 每隔2ms选通TLC548
  59.         SPDR=0x00;                           // 启动SPI
  60. }
  61. int main(void)
  62. {
  63.         DDRB=0xBF;
  64.         PORTB=0x4F;
  65.         DDRC=0xFF;
  66.         PORTC=0xFF;
  67.         DDRD=0xFF;
  68.         PORTD=0xFF;
  69.         TCCR0=0x0B;
  70.         OCR0=0x7C;
  71.         TIMSK=0x02;
  72.         SPCR=0xD3;  //SPE=1,SPE=1,MSTR=1,SPR1=1,SPR0=1,使能SPI 主机模式,设置时钟速率为fck/128
  73.         SPSR=0x00;
  74.         //#asm("sei")
  75.         sei();
  76.         while (1)
  77.         {
  78.                 display();
  79.         }
  80. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7002

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部