Altium Designer画的AD接收UART发送模块电路原理图和PCB图如下:(51hei附件中可下载工程文件)
【简要说明】 一、 尺寸:长50mmX宽25mmX高10mm
二、主要芯片:ATMEGA8
三、工作电压:直流5V 二、 特点:
1、检测模拟量电压范围0~5V
2、数码管显示范围0~5000
3、四位数码管显示
4、输入输出接线简单
5、AD转换频率125K,8位数据转换
6、波特率:9600 , 误差率:0.156% 三、 作用:将0~5V的模拟电压量转换成为0~5000的数字量,由数码管显示出来,并转换成为0~255的十六进制,由单片机UART(即,TXD口发出),经232电平转换后,可以和电脑直接通信。
AD接收UART发送模块AD转换数值显示
单片机源程序如下:
- #include <iom8v.h>
- #include <macros.h>
- #define uchar unsigned char
- #define uint unsigned int
- /********************************************************************
- 数码管段码定义0123456789
- *********************************************************************/
- uchar Table[10]={0xc0,0Xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //所需的段的位码
- uchar wei[4]={0X10,0X20,0X40,0X80}; //位的控制端 (仿真)
- //uchar wei[4]={0Xe0,0Xd0,0Xb0,0X70}; //位的控制端 (板子)
- uint date; //定义数据类型
- uchar z,x,c,v; //定义数据类型
- /**********************************************************************
- 延时函数
- **********************************************************************/
- void DelayMs(uint i) //0.25ms
- {uint j;
- for(;i!=0;i--)
- {for(j=8000;j!=0;j--) {;}}
- }
- /**********************************************************************
- 数码管动态扫描
- *********************************************************************/
- void Pre_Display()
- {
- /***********************数据转换*****************************/
- z=date/1000; //求千位
- x=date%1000/100; //求百位
- c=date%100/10; //求十位
- v=date%10; //求个位
- PORTD=wei[0];
- PORTB=Table[z];
- DelayMs(1);
- PORTD=wei[1];
- PORTB=Table[x];
- DelayMs(1);
- PORTD=wei[2];
- PORTB=Table[c];
- DelayMs(1);
- PORTD=wei[3];
- PORTB=Table[v];
- DelayMs(1);
- }
- /**********************************************************************
- 电压值处理函数
- **********************************************************************/
- uint ADC_Convert(void)
- {uint temp1,temp2;
- temp1=(uint)ADCL;//先读ADCL
- temp2=(uint)ADCH;//再读ADCH
- temp2=(temp2<<8)+temp1;//求值
- temp2=temp2*49/10;//求显示的电压值(0~5.12)V
- if(temp2>=5000)temp2=5000;
- return(temp2);
- }
- /**********************************************************************
- 初始化I/O口
- **********************************************************************/
- void Init_IO(void) //初始化I/O口
- {
- DDRC=0x00; //设置C口为不带上拉输入;
- PORTC=0x00;
- DDRB=0xff; //设置B口为推挽1输出;
- PORTB=0xff;
- DDRD=0xFF; //设置D口为推挽1输出;
- PORTD=0xFF;
- }
- /********************************************************************
- 串口初始化子程序
- *********************************************************************/
- void Uart_Init(void)
- {
- UCSRB = 0x00; //disable while setting baud rate
- UCSRA = 0x00; //Bit1为1则倍速发送
- UCSRC = 0x86;
- UBRRL = 0x33; //波特率:9600 Bps
- UBRRH = 0x00; //误差率:0.156%
- UCSRB = 0x18;
- }
- /********************************************************************
- 串口发送字节子程序
- *********************************************************************/
- void Putchar(unsigned char c)
- {
- while (!(UCSRA&(1<<UDRE)));
- UDR=c;
- }
- /**********************************************************************
- 主函数
- **********************************************************************/
- void main(void)
- {uint i;
- uint B=50;
- uint TXD;
- Init_IO();
- Uart_Init();
- ADMUX=0x00;
-
- //选择第一通道;
- /**********************转换速率应在50~200K****************************/
- ADCSR=0xe6; //125K转换速率,自由转换模式;启动AD转换器;
- DelayMs(1); //延时待系统稳定;
- while(1)
- {
-
- B--;
- i=ADC_Convert(); //显示电压值(0~1024)
-
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
|