基于PSOC3,设计数字电压表(LCD屏幕界面一显示时钟,界面二显示电压测量)(未使用定时器版本,软时钟)

3、通过KEY0~3,四个按键设置电压测量范围上下限,测量范围最大为0~5V,下限不得大于等于上限。4、通过按键KEY0切换LCD界面,短按按键KEY0,LCD界面1切换到界面2;1、界面1显示时钟,自动计时,每隔1秒向串口发送时间与电压数据,串口波特率为57600。注:代码中注释故意删除大部分,防止被同一门的同学抄袭,如有人需要,后续会补上。2、通过ADC采样,采集电压数据,并显示在LCD屏幕界面2。(5)VH=x.xv 设置电压测量上限为x.x 伏。声明:代码为原创,项目来源为课设,转载需注明。
摘要由CSDN通过智能技术生成

实现的功能:

1、界面1显示时钟,自动计时,每隔1秒向串口发送时间与电压数据,串口波特率为57600。

2、通过ADC采样,采集电压数据,并显示在LCD屏幕界面2。

3、通过KEY0~3,四个按键设置电压测量范围上下限,测量范围最大为0~5V,下限不得大于等于上限。如果测量的电压超出范围,则LED闪烁告警。

4、通过按键KEY0切换LCD界面,短按按键KEY0,LCD界面1切换到界面2;长按按键KEY0,LCD界面2切换到界面1.

5、通过串口接收上位机指令。

指令列表:

(1)start_vt     开启ADC采样

(2)stop_vt     关闭ADC采样

(3)Timer=HH:MM:SS   手动设置时间为HH:MM:SS

(4)VL=x.xv    设置电压测量下限为x.x 伏

(5)VH=x.xv    设置电压测量上限为x.x 伏

(6)t=xs           设置数据发送周期为x秒

注:代码中注释故意删除大部分,防止被同一门的同学抄袭,如有人需要,后续会补上。


#include <project.h>
int data_bus[14]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};  //用于存储接收到的串口数据
int ii=0;    //用作指向data_bus数组的指针

CY_ISR_PROTO(uart_rx_isr);

/* LCD specific */
#define ROW_0       0  /* LCD row 0     */
#define COLUMN_0    0  /* LCD column 0  */
#define COLUMN_9    9  /* LCD column 9  */
#define COLUMN_10  10  /* LCD column 10 */
#define COLUMN_11  11  /* LCD column 11 */
/* For clearing Tens and Hundreds place */
#define CLEAR_TENS_HUNDREDS "    "
/* For clearing Hundreds place */
#define CLEAR_HUNDREDS      "   "

void Newline();
/*******************************************************************************
* Function Name: main
********************************************************************************
*
* Summary:
*   The main function initializes both the ADC and LCD, starts and waits for an 
*   ADC conversion, then it displays the raw counts to the LCD.
*
* Parameters:
*  void
*
* Return:
*  void
*
*******************************************************************************/
int main(void)
{
    int a=0; //-shang xian
    int b=0; //+shang xian
    int c=0; //-xia xian
    int d=0; //+xia xian
    int i;
    int start=0;
    int H1=0,H2=0; //shi
    int M1=0,M2=0; //fen
    int S1=0,S2=0; //miao
    int VL1,VL2; //电压测量下限
    int VH1,VH2; //电压测量上限
    int m,n,e,f,g,h;  //用于保存电压、上下限的整数位和小数位
    int t=1;     //存储串口指令"t=xs"中赋给t的值
    int time_flag=0;
    int time_flag1=0;
    uint32 time=0;   //用于计时,程序每循环一次就+1
    char admin[40]="(   )HH:MM:SS:V=x.x v,VL=x.x v,VH=x.x v.";    //用于存储发送到串口的数据
    char worning1[5]="error";
    int swich=0; //界面切换标识符,0时为界面1,1时为界面2
    int a1=0; //chuan kou ji shu
    int s_flag1=0;
    int s_flag2=0;
    int s_flag3=0; //用于LED闪烁计数
    uint8 ledState = 0x00;
    uint16 voltageRawCount;
    uint16 vhigh=26667;
    uint16 vlow=0;
    CyGlobalIntEnable; /* Enable global interrupts. */
    UART_1_Start();
    uart_rx_isr_Start();
	uart_rx_isr_SetVector(uart_rx_isr);
    
    ADC_DelSig_1_Start();  /* Configure and power up ADC */
    LCD_Char_1_Position(0,0);
    LCD_Char_1_PrintString("                ");
    LCD_Char_1_Position(1,0);
    LCD_Char_1_PrintString("                ");
    LCD_Char_1_Start(); /* Initialize and clear the LCD */

    ADC_DelSig_1_StartConvert(); /* Force ADC to initiate a conversion */

    while(1)
    {
        time_flag+
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你哥二垂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值