完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#define uint unsigned int #define uchar unsigned char #define ulint unsigned long int ulint count=0; void delay(uint t); void delay1(void); void int_430(void); void sendbyte(uchar zdata); void write_com(uchar cmdcode); void write_data(uchar Dispdata); void lcdinit(); void print_string( char *s); void display(void); /*************主函数************/ void main() { int_430(); lcdinit(); while(1) { display(); count=0; } } /*************延时函数************/ void delay(uint t) { uint i,j; for(i=0;i } //1s延时的计数闸门 void delay1(void) { unsigned long i; for(i=0;i<119000;i++) { _NOP(); // 该函数用来产生一个 MSP430 系统时钟周期的延时 } } /*************430初始化函数************/ void int_430(void) { WDTCTL=WDTPW+WDTHOLD; // 关闭看门狗 P1SEL&=~BIT4; P1DIR|= BIT4; P1OUT&=~BIT4; P1SEL&=~BIT5; P1DIR|= BIT5; P1OUT&=~BIT5; P1SEL|=BIT0; // 设置 P1.0 为 timerA 外部计数信号输入口 P1DIR&=~BIT0; // 设置 P1.0 为输入口 // TimerA 配置 TACTL=TASSEL_0; // 定时器 A 时钟源选择:TACLK TACTL=ID_3; // 计数时钟分频系数选择:1 CCTL0 = CCIE; //开中断 CCR0 = 65535; // 计数终值,方波频率为:1048576/65536/8/2=1HZ _EINT(); } /*************数据传送函数************/ void sendbyte(uchar zdata) { uchar code_seg7,serial_clk, serial_shift; code_seg7=zdata; serial_shift=0x80; for(serial_clk=0; serial_clk<8; serial_clk++) { if(code_seg7&serial_shift) { P1OUT|=BIT4; //SID为1 } else { P1OUT&=~BIT4; //SID为0 } P1OUT&=~BIT5; //产生时钟信号下沿 P1OUT|=BIT5; //产生时钟信号上沿 serial_shift=serial_shift>>1; //准备发送下一位数据 } } /*************写命令函数************/ void write_com(uchar cmdcode) { //串口控制格式(11111AB0) //A数据方向控制,A=H时读,A=L时写 //B数据类型选择,B=H时为显示数据,B=L时为命令 sendbyte(0xf8); //MCU向LCD发命令 sendbyte(cmdcode & 0xf0); //发高四位数据(数据格式D7D6D5D4_0000) sendbyte((cmdcode << 4) & 0xf0); //发低四位数据(数据格式D3D2D1D0_0000) delay(2); //延时等待 } /*************写数据函数************/ void write_data(uchar Dispdata) { sendbyte(0xfa); //MCU向LCD发数据 sendbyte(Dispdata & 0xf0); //发高四位数据 sendbyte((Dispdata << 4) & 0xf0); //发低四位数据 delay(2); } /*************LCD初始化函数************/ void lcdinit() { delay(20000); //复位等待(内部自带上电复位电路),时间较长 write_com(0x30); //功能设定:基本指令集操作 delay(50); //延时等待 write_com(0x0c); //整体显示,关游标 delay(50); } /*************送字符串函数************/ void print_string( char *s) { while(*s > 0) //C语言里字符串末尾自动加“ ”(ASCII码值为0) { delay(50); write_data(*s); //发送字符对应的ASCII码,12864指针可设置自动指向下一个显示地址 s++; } } /*************频率显示函数************/ void display(void) { ulint a1,a2,a3,a4,a5,a6,a7,a8,a9; // 声明计数数据变量 TAR=0x0000; // 定时器 A 计数寄存器内容清零 TACTL=MC_2; // 定时器 A 工作模式选择:连续模式 delay1(); // 产生 1s 计数闸门 TACTL=MC_0; // 定时器 A 工作模式选择:停止模式 count +=TAR; write_com(0x01); //清屏指令 if(count>=1000000) { a1=count/100000000; a2=count%100000000/10000000; a3=count%100000000%10000000/1000000; a4=count%100000000%10000000%1000000/100000; a5=count%100000000%10000000%1000000/100000; a6=count%100000000%10000000%1000000%100000/10000; a7=count%100000000%10000000%1000000%100000%10000/1000; a8=count%100000000%10000000%1000000%100000%10000%1000/100; a9=count%100000000%10000000%1000000%100000%10000%1000%100/10; write_com(0x03); write_com(0x80); //第一行首地址0x80 print_string("德州仪器MSP430 "); //第一行显示(必须加一个空格否则不能下载) write_com(0x90); print_string("频率: "); write_com(0x93); //第二行首地址0x90,从第四个开始显示 write_data(a1+0x30); //发送dat1的ASCII码,显示dat1的值 write_data(a2+0x30); //发送dat1的ASCII码,显示dat2的值 write_data(a3+0x30); //发送dat1的ASCII码,显示dat3的值 write_data('.'); //发送"." write_data(a4+0x30); //发送dat1的ASCII码,显示dat4的值 write_data(a5+0x30); //发送dat1的ASCII码,显示dat5的值 write_data(a6+0x30); //发送dat1的ASCII码,显示dat6的值 write_data(a7+0x30); //发送dat1的ASCII码,显示dat7的值 write_data(a8+0x30); //发送dat1的ASCII码,显示dat8的值 write_data(a9+0x30); //发送dat1的ASCII码,显示dat9的值 write_com(0x88); print_string("单位: "); write_data('M'); //发送H的ASCII码,显示M write_data('H'); //发送H的ASCII码,显示H write_data('z'); //发送z的ASCII码,显示z; delay(500); } else { if(count>=1000) { a1=count/100000; a2=count%100000/10000; a3=count%100000%10000/1000; a4=count%100000%10000%1000/100; a5=count%100000%10000%1000/100; a6=count%100000%10000%1000%100%10; write_com(0x03); delay(50); //延时 // 读定时器 A 计数寄存器内容 write_com(0x80); //第一行首地址0x80 print_string("德州仪器MSP430 "); //第一行显示(必须加一个空格否则不能下载) write_com(0x90); print_string("频率: "); write_com(0x94); //第二行首地址0x90,从第四个开始显示 write_data(a1+0x30); //发送dat1的ASCII码,显示dat1的值 write_data(a2+0x30); //发送dat1的ASCII码,显示dat2的值 write_data(a3+0x30); //发送dat1的ASCII码,显示dat3的值 write_data('.'); //发送"." write_data(a4+0x30); //发送dat1的ASCII码,显示dat4的值 write_data(a5+0x30); //发送dat1的ASCII码,显示dat5的值 write_data(a6+0x30); //发送dat1的ASCII码,显示dat6的值 write_com(0x88); print_string("单位: "); write_data('K'); //发送H的ASCII码,显示K write_data('H'); //发送H的ASCII码,显示H write_data('z'); //发送z的ASCII码,显示z delay(500); //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态 } else { count*=1000; a1=count/100000; a2=count%100000/10000; a3=count%100000%10000/1000; a4=count%100000%10000%1000/100; a5=count%100000%10000%1000/100; a6=count%100000%10000%1000%100%10; write_com(0x03); delay(50); //延时 // 读定时器 A 计数寄存器内容 write_com(0x80); //第一行首地址0x80 print_string("德州仪器MSP430 "); //第一行显示(必须加一个空格否则不能下载) write_com(0x90); print_string("频率: "); write_com(0x94); //第二行首地址0x90,从第四个开始显示 write_data(a1+0x30); //发送dat1的ASCII码,显示dat1的值 write_data(a2+0x30); //发送dat1的ASCII码,显示dat2的值 write_data(a3+0x30); //发送dat1的ASCII码,显示dat3的值 write_data('.'); //发送"." write_data(a4+0x30); //发送dat1的ASCII码,显示dat4的值 write_data(a5+0x30); //发送dat1的ASCII码,显示dat5的值 write_data(a6+0x30); //发送dat1的ASCII码,显示dat6的值 write_com(0x88); print_string("单位: "); write_data('H'); //发送H的ASCII码,显示H write_data('z'); //发送z的ASCII码,显示z delay(500); //较长时间延时,保证下次操作前LCD完成上述功能处于非忙状态 } } } #pragma vector = TIMER0_A0_VECTOR //Timer_A中断向量 __interrupt void Tiemr_A(void) { count +=65535; } 把原先显示在12864上的程序gai |
|
相关推荐
2个回答
|
|
现在要用1602来显示,怎么改动程序
|
|
|
|
硬件接口检查清楚,程序驱动搞清楚,移植就不是难事
|
|
|
|
只有小组成员才能发言,加入小组>>
3053个成员聚集在这个小组
加入小组2968 浏览 1 评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3691 浏览 2 评论
请问怎么把下面51单片机的代码改成msp430 g2 pocket的代码,还有改下时间变成30秒
2366 浏览 1 评论
4830 浏览 1 评论
2592 浏览 1 评论
1378浏览 3评论
MSP430FR5994 使用库函数 定时器触发AD问题请教
3694浏览 2评论
2970浏览 1评论
1574浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:11 , Processed in 1.205849 second(s), Total 85, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号